My Journey On Grinding Leetcode As A Bootcamp Grad
Hello there! You found this article and read the title. You may feel unmotivated grinding Leetcode, that’s why you clicked into this article. So here it is. To my new readers, I want to start with my background to give you a better sense on why I am writing this article today.
Table of Content
- My Background
- Why I Started Grinding Leetcode
- How Do I Even Start?
- High-Level Steps On Learning and Practicing DSA
- Resources I Use And Why I Chose These Resources
- Resources I’ve Used In the Past but Didn’t Work For Me [As A Beginner]
- How I Keep Myself Productive
- Wrap Up
- Undergrad in non-STEM major (shout out to sociology 🎉)
- Bootcamp grad in 2020 (Flatiron, anyone??)
- Already worked in the industry for almost a year (but that doesn’t eliminate the fact that I still sucked at Leetcode when I got my first job)
- Most importantly, I am not grinding Leetcode for the sake of joining a FAANG company.
- It took me 2 years to finally learn ways to effectively practice Leetcode without feeling discouraged.
Why I Started Grinding Leetcode
I. Mass Layoffs Happened
Let’s step back a little bit before I start the “why” part. I was part of the first wave of mass layoff back in July 2022 and had been job searching ever since. Before the FAANG layoffs starting from November, I heard back from at least 2–3 companies each month out of every 25 applications I sent [Recruiters reached out to me when I first got laid off, but then those didn’t work out, so I started applying online in Month 2.]
The mass layoff kinda happened unexpectedly, so I wasn’t prepared for any kinds of interviews. My previous role had nothing to do with full stack, but here I am, applying for full stack roles. My interview skills were off the chart. I bombed almost all technical interviews. I couldn’t do Leetcode Medium questions by myself, or if I did, it’d take me more than an hour. If I hear anyone talking about trees and graphs, I was legitimately scared, but deep down I know, as much as I fear grinding Leetcode, I understand it’s one of the few ways to get an entry level job. [Another way is that if you’re super proficient in one or few of the mainstream libraries, say ReactJS.]
II. Having CRUD Projects Is No Longer Enough
I mean it is always not enough. As more and more bootcamp grads graduated from their bootcamps over time, the job market is filled with job seekers who share the same set of skills along with self-taught devs and recent CS grads. How are people going to make themselves stand out based on a piece of paper [or PDF lol]?
In order to make yourself stand out, first and foremost, you’ll need to rely on networking [Duh]. Or if you’re like super motivated, feel free to take an extra step to advance your skills [For instance, if you know how to do Custom/Ref React Hook as a recent bootcamp grad, seriously kudos to you] and then build a super cool project with this new knowledge you obtain [not Weather App, or Blog App]. But as someone who is eager to look for a SWE job ASAP [honestly, a lot of these stuff can be learned at your new job], it is a lot of pressure to learn something completely new and then expect yourself to be able to explain what the heck is happening at a job interview.
If DSA is not part of the technical interviews, then you have to be sure to be able to explain some of the core Web Dev concepts. Like:
- How does the server communicate with the client? [Hint: request/response cycle]
- How do you add multiple users into a database?
- When you have multiple users in the database, how do you make sure the client side is requesting the right user? And how do you prevent the client being able to see other users’ information?
[Just brainstorming some questions I’ve gotten in interviews and the concepts I need to understand before going into these interviews]
However, I am sorry not sorry that I am not someone who can consume so much dry theory at once. Therefore, the other alternative I can think of is grinding Leetcode.
Question *Dwight’s voice*: How Do I Even Start??
For someone who knew absolutely almost nothing about trees and graphs, anything other than arrays and dictionaries/objects/hashmaps, it was an extremely daunting experience going into this rabbit hole. I’d be lying if I said I did not feel discouraged and unmotivated right away. It takes at least one semester for a CS student to learn the fundamentals of DSA, on top of that, they have to diligently practice Leetcode to be interview-ready. We’re talking about at least 6 months — 1 year. I remembered feeling super discouraged when I was doing a timeline calculation.
So for my bootcamp grads/self taught devs out there, you may have come across a lot of articles on “Tips on prepping for FAANG in 3 months”. Those articles are targeted to people who have prior knowledge and/or background in computer science. Knowing how to traverse a binary tree, inserting into/removing a node from a binary search tree is like DSA 101 in college curriculum. So if you don’t know, that’s alright.
I started grinding Leetcode back in late November — December (it was such good timing due to the holidays), and more intense grinding starting from early Jan this year, so it’s been 4 months since the beginning of the journey.
High-Level Steps On Learning and Practicing DSA
Here are the high-level steps:
- Learn fundamentals (Array, Strings, Stack, Queues, Hashmap, Linked List, Binary Tree/Binary Search Tree, Graphs) and Understand Big-O Complexity.
- After understanding one specific topic [Structy — see below why I love Structy], feel free to get started with easy level questions, so you get a sense of how to apply those concepts into a question. If stuck, use both the discussion and solution board to at least help you get started. Revisit the questions a few days later if needed.
- Once you understand fundamentals and **somewhat** able to do easy questions, start attempting medium questions and start recognizing patterns between questions [Make use of the Similar Question tab on Leetcode] and understand which data structures you can apply to each question.
- Following point 3, start using other resources to recognize patterns, which by the way Structy (see below) is already helping you if you haven’t noticed.
- When you get to this point, give mock interviews a try. It helps practice your communication skills among other things.
- And repeat the steps.
Please be patient that the whole process will take around at least 3–6 months. In order to get really really good at it, it’ll probably take more than 6 months — 1 year. But the point is not about getting really good at Leetcoding, it’s about how you approach and solve a problem and whether you understand the core concepts of data structures and algorithms.
In the next section, I will share the resources I’ve used in chronological order to help me get started with my journey.
Resources I Use And Why I Chose These Resources
✨ Again, in chronological order✨
- This blind post 📝: Giving back — How to succeed in FAANG coding interviews? (for non-CS holders) [As of Mar 2, 2023, this post is no longer available, but I want to keep the link here regardless.]
Back in November-ish 2022, I was in desperate need of help. I found this post via Google search and it gave me the first motivation and realization that I can grind Leetcode without frustration [given the job market is not great + FAANGs mass layoffs + I wasn’t getting interviews anyway at that time. I knew I had all the time that I needed to prepare for this]. Although it is somewhat catered to SWEs applying for FAANGs, since FAANGs have higher and harder standard, I think this is a good guideline on how to find the right resources and how to plan out an effective plan to grind Leetcode. I recommend skimming through before moving on from here.
- Book 1 📚: Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People Aditya Bhargava
I feel like this book is in every SWE’s bookshelf or computer (if you are reading electronically). It’s one of the most fun books I’ve ever read. It doesn’t get too in-depth into one concept but enough for you to understand what’s going on. I usually use this to review or after when I finish learning a data structure, I will read this book to help visualize the concepts. This book introduced me to algorithms like DFS and BFS.
- Book 2: A Common-Sense Guide to Data Structures and Algorithms, Second Edition: Level Up Your Core Programming Skills
I. Absolutely. Love. Structy. I have recommended this site to many friends who are looking to learn graphs and trees + boost their DSA skills. 100% positive reviews from my friends. If you want to have a good introduction to more difficult concepts (specifically graphs, trees and DP) and learning how to recognize patterns in general, this is the place. Alvin, the instructor who used to teach at App Academy (for those who don’t know, it is one of the top bootcamps), is really good at breaking down concepts and explain what patterns to use. (I don’t want to confuse readers who don’t know what patterns are. We are talking about Two Pointers, Sliding Windows, etc.) Like you would wish he is your Math professor because he would make Math so easy for you to understand and he is that kind of teacher. Structy provides Approach, Walkthrough, Code Implementation videos in each question. All of these videos are around 10–15 min each. Very easy to watch and follow. In case no one has told you, you could watch in 1.25x/1.5x speed. The Prompt + IDE layout is super fun and unique to look at, which separates itself from other DSA practice sites.
One of my favorite parts about Structy is that the questions are intentionally designed to be in the specific order on the list. This is something Alvin has mentioned in the intro video: try not to skip questions because the pattern you learn from this one specific question will help you work on the next one with some modifications and variations.
If you know Blind 75, you probably already know this. Neetcode said it himself that he created Neetcode 150 to be more beginner-friendly and help whoever using this list to practice to recognize patterns. If you ever grind Leetcode and need tutorials, Neetcode is pretty much like everyone’s go-to Youtube channel/person. Even my friends who are super advanced in their Leetcode skills will use Neetcode as a point of reference to improve their code and write cleaner code. I would also credit Neetcode for teaching me to write cleaner and better code. When I am looking for Leetcode questions to practice, this is the list I would look into.
- Free Online College Course: GTx’s [Georgia Tech on Edx] CS1332x Data Structure & Algorithm
This course is equivalent to one college semester of fundamental of data structures and algorithms course. There are many, many top colleges which provides free DSA online courses. But this one is personally my favorite because the course is not super Math-y. It is stated in the course that they expect their pupils to spend 200 hours in this course, in other words, at least 10 hours per week. I do recommend dedicate as much as time as you can in this course, use their interactive tools and work on the assignments to understand the concepts better. If you decided to enroll the course for the professional certificate [which is not free], Java knowledge is required, so I would also recommend to learn some Java syntax before joining this course.
Resources I’ve Used In the Past But Didn’t Work For Me [At First]
✨ I want to use this section to emphasize that sometimes even though it’s a lot of people’s recommendations but doesn’t mean it works for you✨
Educative.io has a lot of amazing courses. Not just one, but a few people recommended this when I first started learning DSA. As an absolute beginner at that time, this was so overwhelming.
Just a disclaimer that now I have grinded Leetcode for a couple months and have exposed myself to different types of data structures and questions, I think I am a lot more comfortable to take this course to help practice recognizing patterns. But I do not recommend this for beginners at all.
How I Keep Myself Productive
Like I indicated in the title, this is a journey. Some people can pick up DSA really fast and learn the basics within 3 months. But for me, even with a little bit prior knowledge of DSA, it took me around 2 months to slowly be able to recognize what data structures and patterns I should apply to different question. I still have a lot to improve and learn. At the same time, since I have made a decision not to work on any new projects or learn new framework, I have dedicated at least 7–8 hours per day [strictly on weekdays] to focus on learning new data structure, in the meantime, I would do my best to do at least 2 Leetcode Medium level questions per day with a mix of 1–2 Easy level questions. I’ll spend maybe 45min — 1hour on one medium level question and 15–30 min on an easy level question. [As of Mar 2, 2023: Currently working on an article discussing strategies for effective studying. Follow me to get an email notification when I post the article!]
Note 1: The 7–8 hours include the time I spend on the 2 online courses that I am taking simultaneously — the two that I stated above.
Note 2: I’d like to acknowledge the privilege that I have without having to worry about any major responsibilities, and I understand not everyone can afford spending so much time dedicating so much time per day to study. This depends on your learning style as well.
Tip 1: Set Up a To Do List For The Week
To aid and help organize my study, I use a productivity tool, called Todoist that I found a month ago to help organize my learning materials.
Here’s a screenshot of my typical week:
What I love about this tool is that you’re able to visualize what you have to finish in the week and they have this very satisfying sound when you ✅ the finished task.
Tip 2: Pomodoro Timer
I recently found this amazing pomodoro timer on Youtube, if you’re a cat person, this timer is for you.
Tip 3: Make Use Of Spreadsheet
I got this advice from a few friends in separate time periods. It’s like words of MANY mouths. So I’m like, “Alright, I guess I’ll start mine too”. And it works like wonder.
I copied and pasted all the questions from Neetcode 150 on the spreadsheet. Once I finish the questions, I would write down how I solve the questions, regardless if I did it myself, with some help from the discussion section, or had to rely on reading the solution to help me understand. I also have a revisit tab, so I know which question I want to revisit in the near future.
Tip 4: Don’t forget to take care of your body
There’s a saying that your body is your temple. To prevent getting burned out, aside making use of the to do list and the pomodoro timer, I ensure to spend at least 2 hours after work hours to exercise and go out for a walk [even better if you have set up a goal — for instance, 8000 steps or 4 miles per walk].
At the end of the day, this is all about consistency and learn how to balance between learning new and revisiting old concepts. But the question is always on how do you even start? What works for me is that I found a website (i.e. Structy) that teaches me the easiest way to understand a concept and use the concept and recognize patterns within questions. From there, I slowly figured out what other resources that aid my study and learning + being consistent and constantly revisiting concepts help me loads. As I’ve mentioned, I still have a long way to go and I still struggle here and there. However, I found a way to effectively study and practice DSA. This is why I am sharing my journey here in this article.
For those who feel unmotivated to grind Leetcode, I truly hope this article at least gives you slight hope that it is possible to get better at Leetcode. I would like to offer a hand if you want more advice. I have asked for help countless times and I couldn’t be more grateful for my friends who have offered their piece of advice. And now I want to do the same for the community. Please feel free to connect me via Linkedin, and attach a personalized message letting me know that you come from this article.
Last but not least, happy coding!