From IT to Software Engineer in 3 Months
like anything else, my success was achieved by following the correct path, but also by getting a bit lucky
Last year I decided on the kind of life that I wanted to live, set out a plan to get there, and then worked my ass off until I got there. Today I want to reflect on that journey and what I took to possibly help others who are in my same position.
I don't want to sugarcoat it. It was A LOT of work and most of the time I felt like I was never going to be able to pull it off. The SWE application process is discouraging and the interviews are demanding. I also don't want to pass this off as some surefire plan for breaking into the industry – like anything else, my success was achieved by following the correct path, but also by getting a bit lucky.
Why?
Happy to just have a landing spot after college I packed up and moved to Madison, WI to start a new job as a systems engineer. This was a classic IT role, mostly tasked with the maintenance and monitoring of software rather than its creation. Very quickly, I realized I had much more fun actually writing the code.
I bided my time and jumped on any and all development projects that I could get my hands on. Before long I was known as the dev guy on my team and certainly oversold my abilities and likely overpromised on what I could develop. Scratching and clawing through larger-than-I-had-time-for projects with ill-devised specs I learned how to write software -- the hard way.
I came to an important conclusion. If I was going to do the work of a software engineer, I was going to do it in a firm where I had the time, resources, flexibility, and (last but certainly not least) the salary of a software engineer.
Soon after, a friend of mine referred me to a tech startup that was looking for software engineers. I thought this might be an easy way to break into the industry, but unfortunately, they felt that I was underqualified. Although I felt quite confident in my Software Engineering abilities, I just didn't have anything to show for it.
my smorgasbord of a CS education didn't quite have the same punch as a CS major. I had no CS degree, no official software engineer work experience, and no publicly available projects to showcase my abilities. I hadn't even committed to my GitHub account since my last coding class in college.
Here is where I launched my 3-month plan.
How?
My plan focussed on three main areas:
- Interview Prep
- Portfolio
- Networking
How I split my time.
Interview Prep
Although it is important to actually have the technical understanding to perform your day-to-day responsibilities, the interview process doesn't directly measure this ability. Somewhat controversially, tech companies tend to lean on "Leetcode" style interview questions. These questions are a poor approximation for an actual day on the job, but they can be your ticket in the door.
Many experienced software engineers despise this interview method, but in my case, it gave me a better chance. If I could knock the LeetCode questions out of the park they might take a chance on me. I couldn't teach myself years of software engineering expertise, but I could teach for this test.
As a result, I spent the majority of my time-solving Leetcode questions. By the end of my three months, I had completed 120 Leetcode problems. I focussed on consistency over the total quantity. I pushed myself to solve them every day instead of just concentrating on the work on the weekends. When I first started, even the easy ones were difficult to solve, but I soon started to learn common patterns and methods for solving these.
While I was able to learn these the hard way (often banging my head against a wall), I would recommend starting with Cracking the Coding Interview. This book is the holy grail for tech recruiting and I wish I had picked it up sooner. It eases you into data structures and then teaches you the strategies to solve these problems before you get going. If you are serious about becoming a software engineer, don't just skim through this book. You MUST read this book cover to cover and DO every single problem.
The ability to solve these problems while you are relaxed and on your own time is one thing. It is a whole different ball game when you are on the clock and several people are watching you. Further, you don't always get to do these in an IDE. Virtually, you will be writing this code with little to no compiler/syntactical support. In person, you will write on a whiteboard. As such, I would recommend that you solve every single problem by hand, and then type the answers into an IDE to see what errors you made.
Recreating the interview as closely as responsible and as often as possible is the best way to practice. Pramp was also invaluable to me; it arranges practice technical interviews with other software engineers in the same process. You each take a turn solving a problem, and surprisingly, I found that role-playing as the interviewer was just as valuable.
Key Takeaways:
- Practice, and practice regularly
- Cracking the Coding Interview is a must
- Learn data structures like the back of your hand
- Learn each algorithm and then solve as many questions of that style that you can tolerate
- Practice random questions
- Once the skills are there, recreate the interview experience
- Leetcode is always the same – make it new by changing your scenery – coffee shops, parks, heck even bars
Portfolio
An important key to even getting a first-round interview is to have a portfolio. A portfolio will help you stand out at every step of the interview process. It should showcase consistent work and extracurricular projects. This not only shows off your skills better than any interview ever could but also suggests a passion for this type of job.
The first thing I started adding to was my GitHub. Everything I was doing went into my GitHub. This helped show that I was actively working every day. I created the following projects to track the various work I was doing:
To be honest, I don't think it really mattered too much what I put into these repos. What did matter is that I WAS coding. You don't need to be making groundbreaking technical projects to show that you are a talented programmer.
If you do want to add more substantive work, I would recommend joining Hackathons – ideally with a group of friends to keep you motivated. Not only can you win money and job interviews just for performing well, but they are also a great way to learn and show off your talents. We had grandiose plans to vie for the Twitter Chirp hackathon, but unfortunately, conflicting summer schedules prevented our work from materializing.
Also, you are going to link your GitHub profile to your applications, so you may as well make it stand out. I used GitHub Profile ReadMe Maker to generate a fun and unique landing page for my profile. All you have to do is paste that ReadMe into your special profile repository.
Finally, I started a website – likely the same website that you are reading this on now. Many people in this industry plan on making one but never do. So let this be your motivation to go out and make one now. If you are an experienced front-end programmer and know how to host one with a cloud service or host it on a Raspberry Pi in your basement knock yourself out. Honestly, I don't think it's worth the bother. It is WAY less work to make a website look fantastic with a provider like Ghost or SquareSpace.
Key Takeaways:
- If you are struggling to get first-round interviews, this is likely where you need to focus your work
- Put everything in your GitHub
- Make yourself stand out
- Start a website now, just do it
Networking
The classic anecdote goes, "it's not what you know, it's who you know." While I don't totally agree with this, I will say knowing the right people can't hurt. I separated my networking into three main buckets: friends (smart computer-y ones), foot-in-the-door acquaintances, and recruiters.
I took this opportunity to reach out to fellow CS and SWE friends also looking for a job and offered to help them practice their technical interviews. Not only did they all return the favor, but they also served as helpful connections across the industry. They helped me out by reviewing my portfolio and giving honest opinions, brainstorming new foot-in-the-door acquaintances (we will get there next), and helping practice mock interviews.
Foot-in-the-door acquaintances were people that either my friends referred me to, or that I connected with directly on Linkedin. They helped me out by advising me on how the interview process at their company worked and sometimes even referring me to an open position. If you can, try to talk to at least one connection at a company before applying.
Finally, recruiters. I would not underestimate the value that recruiters can bring to you. During the interview process they are often your biggest advocate; so get in on their good side and try to find a way to build a relationship with them that makes you stand out. Something as simple as a common Netflix show you are both watching will make them remember you. Further, this relationship doesn't end if you don't get the job. If you got along well with them, follow up to thank them for their consideration and - IMPORTANTLY - ask if they can provide any feedback as to why they felt you were not a fit for the position. This feedback is critical to steering your efforts to what needs the most focus. Finally, keep track of these recruiters' contact information so you can reach out next time you are searching for a job.
Key Takeaways:
- The more connections the better
- Value these relationships and give genuine appreciation for any way they may have helped you -- write them a thank you letter if they went out of their way to help you
- Always try to have one connection to a company or specific office location you are applying to
- Do NOT underestimate recruiters
If I had to do it again...
I worked my ragged, spending every minute of my free time working to get this job. I knew it would pay off, so I was willing to put in the hard work to achieve this goal. If I had to do it again here are some things I would change:
- I would, and I cannot stress this enough, start by reading Cracking the Coding Interview
- I would slow down my pace and do this process over a longer period of time
- I would build in specific rest days to do nothing to recover from mental and physical fatigue
- I would apply with more connections rather than cold applying
What's Next?
This process not only taught me a lot about computer science but also taught me about myself and what I can achieve. Setting very specific goals and building habits proved to be incredibly powerful. I also learned that if I put a set deadline for my goals, I was more able to push myself past my limits.
I plan to use my determination to keep advancing in the industry, but for now, it is time for me to reap my rewards and take some much-earned rest.