My Google Interview and Lessons Learned
Two months ago I wrote about some of the struggles I faced looking for a job in tech as a coding bootcamp graduate. I was amazed by some of the responses. Some found it reassuring and inspiring. Others… well, let’s just say that some others were less than encouraging, to put it mildly.
In response to my statement that I was recruited by Google, one software engineer commented that Google must have spammed my inbox, and that there was no way that I would be invited to interview there in person. Even if I was, he argued, I wouldn’t have the first clue about how to solve the interview questions.
Anyone who knows me knows that I like a good challenge. So I contacted the recruiter from Google and scheduled a date to interview. They were willing to let me skip the technical phone interview and invited me to interview onsite in New York City at a date of my choice. Me, a bootcamp grad. Game on.
One of the criticisms of coding bootcamps is that they don’t place a strong emphasis on learning algorithms and data structures. This is where I must admit that, alas, my bootcamp education did not prepare me to solve graphing equations or to balance binary trees. What it did do was foster a love for coding and building projects. If you ask me to spin up a responsive website or mobile app, I can do it fairly well. But as for solving these types of problems, I was very inexperienced.
I set out to tackle this challenge head on. I compiled a list of books that would help me learn algorithms and coding interview questions — primarily Cracking the Coding Interview by Gayle Laakmann McDowell and Algorithms by Robert Sedgewick. However, all of the resources I found were written in Java, a programming language I did not use day-to-day and had not formally studied.
I could have decided to learn Java, or to learn the algorithms in another back-end language, such as Python or Ruby. Instead, I decided that I would learn the classic algorithms in modern JavaScript, or ES6.
There were a couple of reasons for me to decide this. First, I was not overly concerned with getting an offer from Google, since I am more than happy at my current company, Agolo (this enabled me to take more risk). Secondly, if I was going to be spending all of my commuting time and free-time learning algorithms, it had better help me in my day-to-day work, which is full-stack JavaScript. Finally, I thought that the process would give me a good chance to become acquainted with NodeJS for file-system operations and use-cases other than web development.
As I studied each algorithm and data structure, I designed an implementation in JavaScript and compiled my code through NodeJS. I even built a command line app to help me test myself on questions from Cracking the Coding Interview. I was enjoying stretching my understanding of how I could use JavaScript, and found it to be surprisingly fast (at least compared to Ruby).
Finally, the day of the interview arrived. I felt good about the progress I had made, but still nervous. At Google’s Chelsea office I was greeted by my recruiter and escorted to a small room where the interviews would take place. In total, I was interviewed by five Google employees. In each one, I was given a technical problem and asked to whiteboard my solution. If I reached a satisfactory answer, I was often asked to improve the efficiency of my solution. Each interview was around 45 minutes long, with a few minutes at the end of each one to ask questions of the interviewer.
How did I do? Some of the interviews felt like a breeze, while others were a struggle. I was able to find a solution for all of the problems I was given, though some weren’t the most optimal. I also found that some interviewers made me feel relaxed while others had a more critical approach that made me close up a bit.
Was it a success? Well, if you’re wondering if I was offered a job, the answer is no. I received the news a week and a half later from my recruiter. After the usual explanation that it was a “close call”, I asked what I could have done better and was told that I needed to be more consistent.
Despite the final rejection, I still feel good about the progress I made and in my performance, given the short amount of training time. If I was able to do this well after a month or so of learning algorithms, think about how much more confident I will be after a year!
I also feel good about the impact of this experiment on my day-to-day work. I am able to reason more easily about runtime efficiency for both client-side and server-side code, and I am certain it has had a positive effect on my work. I am also able to feel more at home in team discussions focusing on our back-end services.
All in all, interviewing at Google was a great experience and an eye-opener. It showed me where I need to grow and what I’ve already achieved in this past year. And honestly, even if Google had extended an offer I’m not sure I would have accepted, since I work at an amazing company where every day is exciting.
I’ve also decided to take these lessons learned and to write a book about learning algorithms and preparing for coding interviews — in JavaScript. If I can use this experience to pay it forward and level the playing field — even better.
Follow @tomgoldenberg on Twitter.
Co-founder of Commandiv, a stock-trading platform with zero commissions and personalized investment advice.
#StudentVoices