From Zero to Google
My biggest takeaway from what has happened to me this past year-and-a-half is that LeetCode-style technical interviews are not something one can be naturally good at. Regardless of how impressive your GPA is and how many years of hobbyist coding experience you have under your belt, you’re going to need to grind at least a little bit of LeetCode and read through CTCI in order to ace that next interview. If you remember only one thing from this essay I want it to be this, that technical interviewing is its own distinct skill.
I had no idea what I was doing while applying for summer 2018 internships during the 2017-2018 academic year. My summer 2017 on-campus research and at the time eight years of hobbyist video game programming experience made me overconfident. As a result, I applied to too few places, less than ten, in fact, of which I only heard back from two: Exact Sciences and Amazon. I did just fine in the Exact Science non-technical phone interview, but overconfidence overcame me yet again; I sent the usual thank you email right after the phone interview was over, but I never emailed them back asking for an update because I decided to take my chances and wait until after my phone interview with Amazon which was set to take place the following month. And what did I do to prepare for my Amazon technical phone interview? Nothing more than skim through CTCI just days before the call.
At the end of the interview my interviewer asked if I had any questions. I asked something along the lines of what are some good ways for undergrad students like me to prepare for internships at these big companies. He said that I should gain some experience by doing coding projects outside the classroom. I was self-taught from 5th to 12th grade. Programming is my out-of-class hobby…
In desperation, I emailed my Exact Sciences recruiter to see if I could still move forward with them. The position had been filled. I continued to send my resume out to a few places here and there, but as May emerged over the horizon, the prospect of being “self-employed” became evermore certain.
As much as I would have liked to have an internship and as crushing as my Amazon interviewer’s comment was earlier that year, I must admit that up to that point those summer months of 2018 were some of the best of my life. I had three full months all to myself. I could read whatever books I wanted and work on whatever projects I wanted. I confess to not having had the greatest discipline, I wasn’t clocking in full 40+ hours of coding per week until August, but as the title of this essay gives away, that was just enough for me to make the grade.
I had the crucial choice at the beginning of my summer to either expand the breadth or depth of my skill set. I could either learn new technologies like ReactJS, Node.js, Unity Game Engine, etc., or I could dive deeper into C, C++, OOP, and scripting. I ended up choosing the latter because I figured that would give me the best chance of creating an impressive, resume-worthy project by the end of the summer since I already knew a fair amount about those topics. This ended up being the best decision I have ever made since I was able to create the EzAF suite of projects that went on to impress my Google and Synopsys interviewers. Of all the programming books I read over that summer, the one I owe the most to is API Design for C++ by Martin Reddy. Read through that book and my code for EzGL and you’ll see the correlation!
In preparing for my full-time 2019 applications, I have r/cscareerquestions to thank. Although reading too much of that subreddit leads one to self-doubt, what I did learn was worth it at the end. The weekly resume threads were especially helpful. It was very enlightening seeing how others similar or more advanced than me were writing their resumes, and to my surprise, when I posted my own resume drafts, I got a good amount of constructive feedback. This is where I was introduced to the Deedy Resume, a resume template tailored to undergraduate computer science majors. Also in this subreddit was where I was introduced to the infamous “LeetCode grind”. While I never did anymore than about fifty-or-so problems over the course of a couple months, I felt like I did do enough such that I got a handle on the most common “idioms” as I like to call them, that is, categories of solution such as sliding window, tree traversal, 1D dynamic programming, 2D dynamic programming, sorting, etc. The way I see it, the less LeetCode or other interview practice you do, the more you are relying on chance to get an interview question that you are comfortable with. The more interview practice you do, the wider of a range of questions you will be more comfortable with and thus be more likely to ace whatever the interviewer throws at you. I must also say that doing mock whiteboard interview practices with another person is invaluable. Getting to test your code on LeetCode is one thing, but having to write syntactically correct, error-free C++ code on a whiteboard is a whole other game. For this, I would recommend asking a CS friend or professor to pretend to be your interviewer giving you LeetCode-style questions.
Now more knowledgeable and better prepared than last year, it was time for me to solicit my resume. I applied to about twenty companies across a wider range of fields and locations than last year. Yes, I should have applied to more, but I received responses from a few companies relatively quickly and was busying myself preparing for their interviews rather than applying to even more places. I heard back from ten of them, five of which said no to my resume (including Booz Allen and King Digital Entertainment), the other five of which moved me forward through the application process. Of those five, I didn’t pass two of their technical phone interviews and/or online coding tests (Stevens Capital Management and Amazon), and the remaining three I went on to do on-site interviews and receive offers (Epic Systems, Google, and Synopsys).
This essay is not a guide on how to get into Google. Do neither as I say nor as I do. There are definitely better and less risky paths towards receiving an offer from a Big-N than what I have taken. This is just my account of how I miraculously went from having zero internships to a full-time job offer from Google.
Lastly, don’t forget what I told you at the top of this essay: technical interviewing is its own distinct skill.