Or, how you don’t need a formal education to “make it”
I had always thought that I’d have a hard time finding a job as a programmer. When starting out, everything seemed daunting and I was easily stifled by various problems. Thoughts that this was not the right thing for me were more than frequent.
Graduating from high school, I decided to ditch university in favor of a coding bootcamp. This was just at a time when they were gaining popularity here in Bulgaria and they gave me hope I would be able to land a job quicker than going through the 4 years of university.
I had a couple of key reasons for preferring an alternative to university:
- I did not want to waste 4 years to attain something (a job) that could take less. Yes, of course those 4 years are not ‘wasted’ per se and everything learnt there sooner or later pays off in a direct or indirect (as the case with math) way, but I did not see a compelling enough reason to go through with it.
- I did not want to be a financial burden on my parents for 4 more years. I knew that I could not sufficiently learn if I had to work on the side simultaneously, so getting a job was out of the question.
- I was unsure if this was the right thing for me. I was scared of committing and studying for years just to figure out I didn’t like it once I got a taste of the professional world.
So I started venturing out into the world of coding lessons, at first online, learning the very basics of programming. For this part, I want to give a shout out to Software University. Their introductory courses proved to be invaluable for a beginner like me. Two hours for a lecture on Arrays, live coding and numerous challenges n the material might seem like overkill now, but they turned out to be immensely useful at the time. SoftUni has world-class introductory programming lessons in my opinion and it’s a real shame there are no lectures in english, as I know countless people will benefit from them.
Regardless, a couple of introductory courses are simply not enough. I quickly realized that one bootcamp was not going to cut it and at first decided that building up a portfolio to go alongside those certifications was the best thing to do.
I started simple, building an RPG console game in Python. Of course, this was a dead-simple application but it did grow to around 5k lines of code, which, at the time, were a lot for me.
I still felt I was not progressing as fast as I wanted to, so I started venturing out to other courses (some online, some in-person) My workload quickly grew and I found myself consistently having to spend 10+ hours in order to stay on top of everything. It felt rewarding though, as I could actually see the progress every day.
We were now close to the new year and I had a team project to do for a course. Working with a team was not easy, it was especially hard to divide the work, as we all had various experience (some more, some less). Knowing me, I tried to do most of the work just because I wanted to and I knew that you learn by doing. We created a really silly Facebook clone for pets.
At this point, I felt reasonably confident in my skills and thought that landing an internship sometime in the new year was the next best step to take. It was time to surround myself with professionals and get a taste of the real world if I wanted to continue growing. No offense, but most people in coding bootcamps are not motivated and in turn - not good. You can’t blame the bootcamp though, it’s just that this format attracts people who want an ‘easy and fast’ way to get into an industry with high salaries.
I decided that in order to land a job at a good company, I’d need to know a fair amount of Data Structures and Algorithms. No problem, I thought, there were plenty of resources on the topic.
Well, this material turned out to be the toughest yet. Suddenly, I was back to feeling that maybe I’m not cut out for this, which was quite the drop from feeling like a god because you created a simple CRUD app and are surrounded by people who couldn’t even do that. This all culminated when it took me three days to implement a Red-Black tree (the classical kind, not the easier left-leaning variant). This was around Christmas and as such I feel that an obligatory xkcd is in place here:
On the upside, finally grasping a structure/algorithm was rewarding enough to keep me going.
Very quickly, me and a friend got addicted to the direct problem solving aspect of algorithms and started participating in online programming competitions. Obviously, we did not score that well, but it was fun and it incentivized further learning. I felt I made significant progress in my algorithmic thinking here and I encourage everybody to give competitive programming a try.
For the following months (December-March) I spent a fair amount of time solving problems, writing out data structures and learning algorithms.
In retrospect, I’m very glad I spent some time on those topics as they helped me build fundamental knowledge, logical thinking and confidence in my skills. I actually continue to take online courses on algorithms (I recommend this one) and I plan on getting back into competitive programming soon.
In that time, inspired by the platform for algorithmic problems Hackerrank, I started a third project — Deadline. This was initially planned as a hackathon project and while it did win us tickets to the 2017 WebIt festival in Sofia, both me and my partner knew we would continue to develop this. (and we still do, actually, contributors are welcome!)
Time to Work
We were now around April and it was about time to find that internship I was getting ready for. I felt confident I could land any job, as I thought the main thing companies look for in an intern is their potential and motivation, something I believe I had in spades.
From December I had secretly wanted to take a shot at Uber even though it seemed infeasible. A year of bootcamps/courses and getting to work at a top tech company where some of the world’s most elite engineers? Yeah, right.
Well, against all odds, I did get an invite to an interview. I was ecstatic and had fun throughout the process. After it, I thought I had a fair chance of getting in, as I did my best to show my motivation and ambitions. The technical questions were not hard at all but I did screw up one easy question.
I did not get chosen. Not a big surprise, albeit disappointing nonetheless.
As the things with Uber were over, it was now time to continue my search. I wanted to get in a company where the problems were interesting and challenging, just like the ones in the programming competitions. My next choice was VMware, but their recruitment process was insanely slow and I decided I had enough of waiting. In the end I landed a position as a Junior Ruby Developer at SumUp. I had no previous experience with Ruby, but I made sure to quickly learn the basics and and this point I feel more than comfortable writing it. It’s just another language in the end of the day.
Here we develop our own product and that is something I value in a company. I did not want to work in an outsourcing company. I love my current job, the colleagues are great and even though I did not get to work at the place I initially wanted, I’m glad things turned out this way.
I look forward to a long career now.
In the end, I am glad I skipped university.
An important change in mindset happened: I can now afford to enroll in uni due to desire and curiosity in the field, not out of seeming necessity. My motivation is now fueled by wanting to know more about the theory. If I do enroll, I will also have a clearer vision and better appreciation for the material taught there, because I would be able to more easily see its applications.
As a moral of the story, I’d like to emphasize that you do not have to follow the beaten conventional path to become successful in any endeavor and sometimes that can turn out to be the better choice.
Know that everything is possible with sufficient determination and hard work.