Slow is smooth, smooth is fast
Oct 2020
First, huge thank you, Leetcode. Second, I hope this post helps someone.
TLDR
Mechanical engineer -> online CS classes -> Leetcode -> offers from Amazon (Seattle) and Goldman Sachs (Salt Lake City)
Back story
I was working as a mechanical engineer at a small company (under H1B visa). There were some manual processes for performance calculations which I had to repeat over and over again. I always liked programming during my academic years so I wrote a simple program to automate a few things. Soon other people started using the program and I kind of shifted towards writing more of these tools for my team. The most sophisticated thing I knew at that time in terms of data structures and algorithms was bubble sort and two dimensional arrays. So I decided to take online CS course for myself to cover fundamentals. After some time I discovered that my current company does not want to file for green card. I knew that big tech companies are usually more prompt to help their employees with documents in that regard so I decided to try to get into one of those. Well, the gap between googling "How to get a job at Google (or Amazon)" and ending up leetcoding every day closes really fast, so here I was.
Online classes
What a treasure these classes are(all free)! I eventually took four online classes of which three I was very thorough with and one I just skimmed through. I personally believe that after just taking these courses you can find a job at a non-leetcode-type-interview company with a good salary, of which there are plenty. It was not an option for me because I needed a big tech company.
Courses:
Leetcode preparation
Total time of heavy coding would be approximately from September 2019 to February 2020. I did about 300+ problems, mostly medium. There has been tons of posts written that kept my spirits up in this very emotionally draining endeavor. The following posts were on point with what you need to learn in a structured way and helped me tremendously:
- Topics I found extremely useful
- Generic tips
- Good easy-medium problems
- Extremely good write-up on preparation and success
My only addition to this would be highlighting the importance of weekly contests. I started out with being able to solve only easy problem, then easy + medium, then easy + 2 mediums. I never got all four. I think once you are at the level of "easy + 1 medium + almost another I just needed 5 more minutes medium" you are ready for interviews.
System design
System design primer, this short course and Lecture 9 by David Malan on scalability (Lecture 0 and 1 are helpful too). I did not buy "Grokking the system design" course. Of course, I also watched a bunch of Youtube videos on system design. I found mock interviews by algoexpert guy (Clement) to be very insightful.
Other resources
- Triplebyte - this is a very good resource to test yourself and use it as a roadmap for what you need to know in general. Plus it is kind of refreshing and different from leetcoding all day
- Interviewing.io - I did 3 mock interview here. Extremely useful and high quality interviews.
- Pramp - did not find this useful at all
- Youtube guys - Vivekanand Khyade and Abdul Bari - a lot of problems explained very well
Amazon
LinkedIn message from recruiter -> quick intro phone call -> online assessment (2 problems 90 minutes) -> onsite interview (2 algorithmic problems, 1 object-oriented design, 1 system design) -> offer. I bought leetcode premium a month before onsite and solved all the problems under Amazon tag. I allocated about 2 weeks for leadership princples and watched all Dan Croiter's videos on Youtube. I wrote down about 15 short word documents with different stories. And practiced telling these stories them outloud. With a friend. I think that is important. Like everyone else says, do not disregard Amazon LPs as a blah-blah exercise. Get your stories together and practice.
Goldman Sachs
6 different interviews with final one being for about 6 hours. Extremely lengthy process. During the course of these interviews everything was asked: algo problems, OOD problems, fundamentals (tell me about hashmaps), system design, etc. Initially was contacted by recruiter partner on LinkedIn.
General tips that helped me
- Limit your phone usage. Clear mind means a lot. I didn't even listen to music in my car during the preparation phase.
- Do NOT hang out on Reddit CS, Blind or other sources. These portals suck more energy than they provide. Also you might feel productive hanging out there but in reality they are a distraction.
- I read 'Deep work' and 'Digital minimalism' by Cal Newport which I believe contribued a great deal to my being able to prepare and focus.
- Lower your expectations. This whole leetcoding thing is extremely stressful and very taxing on your confidence as is. I've had very low expectations and thought that I'd have to go through 10-15 failed interviews before getting somewhere. Amazon was my first software engineering interview ever, and Goldman was the second. I was going to both with a thought of "learning" for the future.
- Buy a whiteboard.
- Create a groundhog day for yourself and stick to a routine, if possible. I was waking up every day to code for about 3 hours before my job started, and 2 hours after.
- Clean up your LinkedIn profile.
- When you get discouraged, keep this in mind: this is not supposed to be easy.
Good luck!