How I became a software developer in 4 years
“Ars longa, vita brevis”.
Why such a long time?
I know it’s not the flashy and catchy title we are used to seeing on the internet. In fact, I went to youtube and tried to search for this phrase and look at the first 3 suggestions I received. Although, the 4th one is pretty good too. And all of the resulting videos are very popular as well.
There are plenty of blog posts and youtube videos that are trying to show you how someone got a job in 6 months or less, so why should you read this one? After all, who has 4 years?? Bear with me please. I think there is some value in this side of the picture as well. My aim is not to discourage people from learning to code, actually the opposite. I understand that clickbait titles like the ones above in the search recommendations have some value too. The underlying message: “Change/start your career quickly and easily” works very well to get you interested in a career in software development. But I think its an unhealthy long-term strategy and one can make an argument that it’s equivalent to false advertising. You might get “A Job” in 6 months or less but I am not sure if it would be fair to call yourself a “Software Engineer”.
The quick results promising articles and videos are very attractive to newbies. After all, they were what got me interested in becoming a software developer in the first place. And I think that’s all they contributed to my journey of becoming one. In fact, after I started studying, blog posts and videos like those contributed to my frustration constantly. I would read an article or watch a video about how someone started their first job only after 4 months into learning with no prior programming background and wonder what the hell was wrong with me? Why was I already not working professionally? Was this not for me? Were all these people landing jobs some genius ninjas? Studying remotely is hard enough and such thoughts made the whole experience a little bit harder.
No one talks about how hard it is to try and become a software developer by studying remotely or by teaching yourself. Being a self-taught programmer in a field which is full of self taught professionals, is celebrated and worn as a badge of pride. So, naturally if you are struggling at some point in your journey, it makes you question whether you are even made for this. And that’s why now when I see a blog post where the author got hired by Google only after studying part time for 8 months, I just smile and think, “Good for you. That’s not my journey though.”
I am writing this blog post thinking maybe, just maybe, there is someone out there who is trying to become a software engineer and is feeling a bit demotivated or stuck, and looking up for some advice online, and they come across my article rather than one of those “6 months or less” ones. And if you are that person, then hello my friend 👋🏼, read on. I hope you find some value in reading my story and carry on with your journey.
A word about Mastery
I think we would agree when I say that in order to become really good at something, it is essential to master the fundamentals in that field. And the road to mastery in software development is just like any other road to mastery in any other field; it is filled with disappointments, setbacks, heartbreaks, obstacles along with little moments of victories. But just like in any other area of our life, here too we are bombarded with promises of immediate gratifications, instant success and easy achievement, all of which is bound to lead us in exactly the wrong direction. Our current society works hard to lead us astray (think about the click bait titles in other areas: e.g. Fitness: “Loose 20 pounds in 20 days”). But the path to mastery is always there for us to take, waiting for us, looking us right in the eyes.
“If there is any sure route to success and fulfilment in life, it is to be found in the long-term, essentially goalless process of mastery. This is true, it appears in personal as well as professional life, in economics as well as ice skating, in medicine as well as martial arts.” — Mastery by George Leonard
My personal journey has been anything but smooth. I am not saying that I have become a master software engineer but I have been through the many ups and downs of this path already. And I am sure there are many more to come.
I started off with taking courses on Udemy that would promise to make me a software engineer at the end of 4 weeks (yup, I was that guy). If you have wanted quick results in the past yourself or if you still do, you might be familiar with the pattern below.
- Buy the course and feel amazing
- Week 1 — Motivation is touching the sky
- Week 2 — Motivation starts depleting
- Week 3 — Motivation fades and energy is low
- Week 4 — End is in the sight. Excitement about finishing sets in.
- Week 5 — Course is finished but you have no idea how to do anything
I am not sure how many times I repeated the pattern above. I had a sever case of Shiny Object Syndrome so I was always on the lookout for the next best thing. I believe I wasted a good year just dabbling like that before I decided that I needed something more structured and serious.
“The very desire to find shortcuts makes you eminently unsuited for any kind of mastery.” — Robert Greene
Stumbling on happiness (Launch School)
I am not even sure how I came across Launch School — a very serious coding school for people who are serious about becoming software engineers. At this point I had spent over a year taking quick-result-promising courses and had gotten no results. So naturally I was feeling pretty hopeless and fatigued. But the more I read about LS’s program the more I got interested. There was walls and walls of text to read and at every step there was emphasis on the fact that it might take you a year or longer to finish the program. Wow! What? A year or longer? Who has that much time? right? But no, after what I had been through, this honesty was like a breath of fresh air. I needed someone to smack me in the head and tell me that it’s not easy and it takes time. I don’t know if it was a deliberate marketing tactic or it was just sheer honesty, but it was very appealing. In Launch School’s curriculum, there was a bunch of free content that you had to get through before you could actually join the core course. The idea behind this was that going through this free material will give you the feel for what’s coming next. So I had nothing to lose. I jumped in with a full time job and thought I would be done in a year and get a job as a developer (notice the underlying mental script here?).
But little did I know what was coming next.
So LS’s philosophy is all about mastering the fundamentals of programming no matter how long it takes you. If you can’t pass an assessment after a course, you can’t move on to the next course. In fact, If you fail an assessment few times, you are asked to leave the program. Their pedagogy is so focused on mastery that reading the Mastery book mentioned above is one of the pre-reqs for joining the program. I love reading so that was not a problem for me. And it’s a great book which I would highly recommend. Anyhow, because I had assumed smooth sailing from here onwards, I was soon met with a lot of surprises.
- Going through a serious coding program while working a full time job is not an easy task
- Some concepts take time to sink in. Our brain needs time and rest to create new neural pathways. You can’t just read something carefully and assume you can implement it (even though you understand it at the time you are reading it). Learning any complex skill requires that you brain structure changes, and that happens slowly.
- Repetition is you best friend. You have to go over some concepts multiple times before you can truly grasp them.
- Muscle memory in your fingers is a thing. Even if we understand some piece of code on surface level, when it comes to actually coding it, it’s a different game.
- We have to spend time with the problem before we can even start to think of a solution.
- We all have been brain washed about how to learn by traditional school system and have developed bad study habits that we are not aware of.
So after the free course, for the first few months I made no progress at all. It took me a long time to internalise mastery based learning. I was not even aware of the invisible scripts I had in my brain about learning a new topic. A free course called “Learning How To Learn” by Barbara Oakley on Coursera was very helpful in decoding a lot of the programming in my brain. If you are learning a new skill, it’s helpful to take a look at how you have been learning all your life and if that’s going to be a problem in your current endeavour. Anyways, my Launch School journey continued for more than 2 years.
And if you add the “dabbling” period, at this point it had already been 4 years since I have been trying to become a software developer. Life was teaching me some very important lessons.
Concept of Progress
There are so many lessons I have learnt while going through LS that I can actually write a separate blog post about those. I might do that after this one. But one of the biggest lessons and the most important one is that our idea of progress when it comes to learning a new skill is a little twisted. In our minds progress looks something like a straight curve like this:
Continuous progress like this could not be further from reality. It is actually more like this:
“Learning any new skill involves relatively brief spurts of progress, each of which is followed by a slight decline to a plateau somewhat higher in most cases than that which preceded.” — Mastery by George Leonard
I believe our simplistic idea of progress is the reason that we give up whenever we are trying to learn a new skill. As soon as we are confronted with a plateau, we get demotivated and just pack it up rather than pushing through the plateau. While learning new skills, we spend a lot of time in a plateaus. The sooner you come to term with it the better. That was the problem with me at the start. I did not like plateaus. And that didn’t help me. First few months of learning to code is really just the beginning of the journey. It’s like learning a new instrument, a sport or a game like chess. You can’t expect to know what mastery is like this early. But you may see glimmers of it whenever you hit those spurts of progress on the mastery curve. And as you continue on this journey, those glimmers become more frequent and finally become part of your skill. So you have to trust the process and put in the time. You have to chop wood and carry water.
Drinking the comparison poison
There were few times where I felt I was not going fast enough through the course. I would compare myself to other students who were going through the program faster than I was and feel anxious about it. Even though I had no idea about their backgrounds, whether they had a computer science degree, if their jobs were as exhausting as mine or what were their study habits like. It’s safe to say that my mindset about quick results had not fully transformed yet. It was a hard lesson to learn but a lesson indeed. You cannot compare your journey to someone else, even if you are both on the same path. Just put in the time consistently and try not to think too much about outcome and especially the outcome of other people. I know it’s easier said than done but just try. There are so many factors in each of our lives that are always at play. And when you take those into account, you cannot logically compare yourself to anyone else. You, my friend, are on a unique journey, cherish it. Of course, you are allowed to take inspiration and let it motivate you whenever you need it. But inspiration often turns into comparison which makes us beat ourselves up. This starts a cycle that is not helpful in moving forward. You have to learn to trust the process.
“Don’t worry about the outcome. Because the only outcome is victory on a long enough timeline.” — Tom Bilyeu
“At the top of the mountain, there is another mountain.”
It took me more than 4 years to finally get a good job offer from a good company. But I am smart enough now to realise that this is not the destination. It’s a life long journey of learning and improving. I am sure most professions are like that, but especially in software development, you will always be learning and getting better. So it is much much better to fall in love with the process early on. It serves you well in the long run. And remember to slow down so you can go fast.