The truth about becoming a self-taught software engineer

I graduated from a university with a degree in Finance and immediately started my career in investment banking. After about 7 years of working in the industry, the realization came to me that it wasn’t for me. So in my late 20s I decided to change my career path completely and become a software engineer. I did not have much time nor motivation to obtain another college degree, so I decided to take self learning path. And the transitioning process was much harder than I could imagine, it was probably the hardest thing I’ve ever done in my life.

In this blog post, I would like to give people thinking about diving into software engineering a realistic understanding of what should they prepare themselves for.

Software engineering is hard

Contrary to what another youtube ad or a blog post on Medium try to convince you in, becoming a software engineer is extremely hard. You have to learn tons of things to even become a junior developer. I’m a back end engineer, so let’s take this path as an example.

Bootcamps and online schools may assure you that all you need to learn is a general purpose programming language like Python or JavaScript and you will be all set. And they promise that you can learn a language in a couple of weeks. First of all, it take much longer to actually learn a language, even the one with a relatively low entry barrier (e.g. Python).

Secondly and most importantly, learning a language alone is not even a major piece of the puzzle. In order to effectively build modern server side applications, you need to have a solid understanding of algorithms and data structures, software development practices, internet protocols, servers, databases, source control, containerization, and the list goes on. Do not believe anyone who assures you that you can learn everything in 6 months, it takes years to build knowledge in those areas.

You may think that other career paths can be simpler (e.g. Front end engineering, DevOps, etc.), but I believe that the amount of work that needs to be done is relatively comparable across all those fields, at least in the beginning of your path.

Even though I truly believe that one can become a software engineer at any age, I also think that it gets increasingly harder as people age. And it’s not about neurological changes in your brain, it’s more about finding enormous amount of motivation to walk your way through all the difficulties along the way which is just much harder to do at a later stage in life.

Financial motivation is not enough

Nowadays, software engineering is definitely a hyped field. Many people want to get inside mainly because of the perks that come with the field, be it remote working options, high salaries or fancy offices. Even though the compensation can be really good if you land a good job, this motivation alone will not be enough for you to succeed.

Software engineering is not only about building things and solving problems. It is also about constantly becoming better at those things. Even though it may sound like an obvious statement, in practice it means that you need to spend much more time planning, coding, debugging, refactoring and optimizing code than your actual project requires you to. I am convinced that only with this kind of attitude can you constantly evolve and become better. And considering the fact that there are millions of people around the world doing the same, you simply cannot remain competitive otherwise.

Software engineering is not for everyone

As rough as it may sound, I believe that software engineering is not for everyone and it never was. It does not mean however that one has to be a genius to become a software engineer. Let me provide an analogy to make this point clear. How many people in the world can become professional athletes? Not so many. Do you have to possess extraordinary physical abilities to become one? Well, sometimes yes, especially if we are talking about breaking world records, but oftentimes it’s more about hard work. You have to routinely push yourself to train everyday for years in order to master your sports and become better than others. And even though lots of people can physically do this, a few have a courage and motivation to actually do it. If we think about what differentiates those that succeed from ones that do not, I believe the decisive factor is the passion for the sports. And this one is not easy to cultivate if it’s not there.

I believe the same principle applies to software engineering. Most people are physically able to become software engineers, but not all of them will actually succeed because of the amount of work that needs to be done. If you hate sitting long hours in front of the computer, constantly learning new things, puzzling over hard problems, this may not be for you.

What should you do next

Even though it may seem that this article is intended to demotivate you, it is actually quite the opposite. The problem is that too many people underestimate how hard the actual career path is. As a result they start with a lot of energy in the beginning that quickly dissolves as they go through first obstacles. Imagine if you were told to run a sprint, but once you reach the finish line, you are now being told that it’s a marathon. Will you be able to finish? Will it be harder or easier if you knew about the distance in advance?

Now, what should you do with all that information? I believe the best way to figure out if this path is for you is to actually try it. Start learning things, give yourself 2-3 months and make an informed decision afterwards. This period is more than enough for you to build a clear picture in your mind and evaluate your feelings throughout the learning process. You will know for sure whether you like it or not. It will be hard in both cases, but you will feel that you still want to continue if it’s truly yours. Just don’t underestimate the amount of work and prepare for a long battle and you will eventually succeed.