People often ask me about the process of landing my first job in tech, especially as a self-taught developer.
I sometimes wonder if it's because I live in a town where software engineers are rare, but for those who are considering a career switch into the tech industry and want to hear what it's like to follow the self-teach route, I lay out my experience here.
Leading Up to the Decision
I quit my day job in December of 2019 to study full-time, just before the onset of the COVID-19 pandemic. This turned out to be just the worst timing possible, as I would find out in a few months that as I left my job out of my own volition, I would be ineligible for the CERB benefit given out by the Canadian government (despite the incessant jealousy of my friends who, for some reason, kept thinking I was a freeloader of the government).
That said, by the time I tendered my resignation letter, I had spent the better half of a year carefully considering my options and their associated opportunity costs. I also spent the year leading up to it learning programming on the side to see if I enjoyed the work. I ended up automating a good chunk of the administrative chores at my day job, but that's a story for another time.
While I had the option of going back to school for a computer science degree, a shorter diploma program, or the ever so popular bootcamp programs, after doing extensive research into the experiences of people in various routes, I was convinced that a self-teach route was the most cost-effective and perhaps efficient way.
Pros and Cons of Self-Teaching
Self-taught developers have the benefit that they can tailor their education to best fit their end goal and really target the knowledge they will need for the job. The other major plus is the ability to work on projects of your own choosing, which is essential to keeping up your motivation through some challenging course work and self-study. And the best part—lots of programming courses are free!
On the downside, the lack of a structured curriculum can be challenging for many people, especially if they struggle to be self-motivated to put in work that they are not "required" to do. It's also hard to understand what you may be doing wrong, as you won't have a mentor or a teacher to help you debug not just your code, but also your job search process.
And of course, there are many more pros and cons of each option, but these are some of the main ones I considered.
The Self-Study Period
When starting out, I pulled from two main resources to help navigate my own curriculum. Initially, I started out with going through the freeCodeCamp curriculum, which is an awesome and free resource.
On that note, one thing that freeCodeCamp advocates is the idea that you need to start building as soon as you can to help consolidate your learning more effectively.
Practice precedes theory. ~Jean Paul Sartre (just kidding)
After that, I branched out to working on my own applications that I found interesting, while also roughly following the Front-end Developer Handbook written by the Frontend Masters group. It's quite the comprehensive list, but I wanted to ensure that I am well equipped for the job I hoped to have eventually.
In hindsight, while a lot of items in that book were relevant, I would recommend others to just focus on the core skills and pick up the "relevant" skills as you need them.
The Job Hunt
After studying for roughly 6 months, I began my job search. Thanks to my curriculum, I had a series of presentable work from my freeCodeCamp days to showcase my programming skills, in addition to the custom applications I've worked on. I also had a personal portfolio website that used to help visualize my work.
After a couple of months of job hunting with a few interviews that didn't pan out into a job offer, I admit I began to feel hopeless and started doubting myself. And I'm sure many other people have and will feel the same.
I also had a couple of interviews that tested me on areas of data structures and algorithms that I was not yet comfortable with, as is the case with many self-taught developers (which I've since improved and remedied). And that also had a negative effect on me at the time.
That said, on the fourth month, I began to meet the right people and companies, and I was fortunate to secure a contract that paid more than I was expecting.
The Aftermath
Many articles discuss at length the process of acquiring your first job, but many don't discuss what happens afterwards.
The journey of a software engineer is one of lifelong learning and your road doesn't really end at your job. In fact, it's rather the start.
Reflecting back on the start of my first job, I felt a lot of different emotions: excitement, fear, a sense of inadequacy, and frustration.
It takes both breadth and depth of knowledge to be a good software engineer, and the process takes years of developing and debugging through frustration and stress. As the CS50x course at Harvard teaches you, you must become "comfortable with being uncomfortable" as you won't know how to do a lot of things, and that's OK.
Over the years, I've come to hone my discipline and never quit on learning. While I may have started off my journey as a frontend developer, I've continued to grow by expanding my skillset into backend technologies, containerization and its orchestration, data structures, algorithms, databases, and much more.
What Now?
I have my own vision of the kind of software engineer I strive to be in a few years, and the path hasn't changed much for me. In fact, starting this blog is a part of that vision.
While I can't tell you what I will be working on in a few years, I hope that I am not wrong in saying that I will continue to hone my skills in the pursuit to create meaningful applications that improve the human experience and our collective humanity.