There are many things I wish I had known when I started my journey as a programming student. It's been almost 10 years since then, and unfortunately, I can't share my experiences and knowledge with my past self, only with my younger colleagues. This post consists of some helpful tips that I wish I had heard when I was 18 years old.

Decide what you need.

You certainly don't need to be familiar with formal logic or categories if you just want to learn how to create something practical (say, an interface) and do just that. There are two basic paths that differ in effort, duration, and outcome.

You can master one area quickly - say in one or two years. You won't be useless, you'll be doing something and making a living. There are enough job opportunities (at least for now) that don't require much flexibility.

You can become a well-established professional who has spent a lot of time and effort on fundamental things. Then you can adapt, switching career paths becomes relatively easy. You can do machine learning, then formal verification, then some low-level programming for trading or move into game dev. It takes time and dedication - I would estimate this process at least 6-8 years.

I strongly favor the second path because it's more versatile, interesting, and brings more in the long run. Technology is constantly changing, so you'll want to switch to new technologies quickly.

#### Math

Study math because math is useful. I can't stress this enough. When you start, you may think you don't need linear algebra because you don't know about applications. However, for any non-trivial machine learning, you will need it. You need statistics and probability. You'll need logic, combinatorics, set theory, all kinds of discrete mathematics, graph theory, computability theory, formal grammars, lambda calculus, formal semantics, topology, type theories, number theory, groups, rings, fields, categories.

New technologies are constantly emerging. Many of them are based on existing mathematical models. If you know basic mathematics well, you get very nice advantages:

Choosing among the newfangled technologies will be an order of magnitude easier.

You will understand where you should and should not use new methods.

You will understand why the solutions are the way they are. Then you will be able to modify them so that they better fit the context.

For example, my impression is that few people understand why you shouldn't always use the least squares method to estimate how well your linear regression fits the data. This will be required when the errors are normally distributed with an appropriate mean. If they are not, you will blindly apply an inadequate solution without even thinking that part of the model needs adjusting.