Here’s the Study Plan a Self-Taught Software Engineer Used to Get Two FAANG Offers
In Fall of 2020, I received job offers from Facebook and Microsoft (both entry level positions) and made it to the final round with Amazon (a mid level position). I don’t have a degree in computer science (C.S.), as I’ve previously written, and so I relied on widely available resources to get the training required to succeed. While it’s widely known that a C.S. degree is not required to get into I.T., all engineering candidates hoping to break into big tech must prove that they have a solid grasp of C.S. fundamentals. Here I share my plan on how I tackled learning those concepts and prepping for my 2020 round of job applications.

Technical Interviews
Following thousands of programmers before me, I jumped straight into LeetCode and Cracking the Coding Interview by Gayle Laakmann McDowell. Let’s start with Cracking.
Cracking the Coding Interview

I highly recommend reading the introduction. In it, McDowell breaks down the daunting concept of wading through the nebulous storm of job interviews. She highlights the core concepts and basic knowledge you’ll need to succeed in interviews. The basic recommendations were to know:
Data Structures:
- Queue
- Stack
- Linked list
- Map (or Dictionary)
- Binary tree
- Graph
Algorithms:
- binary search
- depth first search (DFS)
- breadth first search (BFS)
- quick sort
- merge sort
McDowell stated that job applicants should also be able to describe the runtime and memory performance of these concepts in terms of Big O notation.
If you aren’t completely comfortable with any of these concepts, McDowell recommended implementing them on your own, which I did. I shared my code on GitHub, but I wouldn’t advise reading any solutions until trying them out on your own first. I also suggest reading the Wikipedia pages on any of these areas of knowledge.
LeetCode

While implementing the basic algorithms and data structures, I concurrently tackled problems on LeetCode. I primarily focused on the Top Interview Questions section, attempting first only easy problems, then eventually some medium and hard problems. (The exact problems I tried are visible here, but please withhold judgment while you discover I’m no genius programmer.)
A lot of people have negative connotations with LeetCode, and I admit I approached studying on that website in an unsustainable and unhelpful way the first few times I set my mind to it. The wrong thing to do is rush through the problems in an attempt to “solve them all.” There are three major reasons in my opinion why this is a flawed approach:
- There are thousands of problems on that website, and attempting to solve them all would, quite frankly, be a huge waste of time. The top recommended questions for job interviews will have all of the fundamentals you’ll need to do well in technical interviews, even if the problem statements vary.
- Furthermore, the quickest solution is hardly ever the correct solution. When job interviewers ask you to reverse a list in python, they won’t be impressed if you write `my_list[::-1]`. No, they’ll make you implement everything from scratch. So, forget about using most class methods. When solving LeetCode problems, take your time, and write out what logically needs to happen from a low level to reverse an array, etc.
- Finally, it’s recommended that you spend about 10-15 minutes for easy problems, 15–20 minutes on medium problems, and 20–30 minutes on hard problems. Start timing yourself as you solve these problems. If you finish way ahead of time — don’t stop. Go back over your work. Check for bugs. Could you make any optimizations? If you’re taking too long at first, then don’t worry — you’ll get there. Just keep practicing until you’re consistently landing solutions within the suggested, allotted time.
Don’t overload yourself. My personal recommendation is to either solve only one or two LeetCode question per day, loop back to your data structures, or focus on the other half of interviewing: behavioral and systems design questions.
Behavioral and Systems Design Interviews

For most major tech companies, there are not only the technical components of an interview, but the systems design and behavioral ones, too.
YouTube
I’m an extremely visual learner, and I studied systems design interview questions almost exclusively on YouTube. I highly recommend this mock interview performed by two ex-Google employees. Uber engineer and YouTuber Guarav Sen also has a fantastic selection of systems design videos, many of which I watched before my final round of interviews.
STAR Method
And finally, to practice for behavioral interviews, I prepared six examples of workplace successes and learning experiences using the STAR method:
- Situation
- Task
- Action
- Result
There are countless resources out there for preparing responses to behavioral interview questions in the STAR format. I recommend rehearsing each example at least three times to trim the fat and sharpen the areas where you shine. While it may come unnaturally, don’t forget to emphasize your personal contributions, choosing “I” statements over “we.”
In Summary

That’s it! I spent two stressful months prepping before the last of my interviews, but I wish I would’ve taken it more slowly and spent three or four months in total. Thanks for reading, and please feel free to reach out to me via Twitter or email if you have any questions. I’d love to know if you found this useful!
Twitter: databae_
Email: [email protected]
If you’re interested in reading more about my journey, check out my blog post titled, “How I became a software engineer for under $200.”
