Ep. 18 - Why I studied full time for 8 months for a Google interview

Published: Feb. 18, 2018, 6:03 p.m.

It\u2019s true. John spent thousands of hours reading books, writing code, and watching computer science lectures, all to prepare for his dream job interview at Google. When things didn't go his way, he shifted gears. Here's his story.

Written by John Washam: https://twitter.com/startupnextdoor

Read by Quincy Larson: https://twitter.com/ossia

Original article:\xa0https://fcc.im/2ERJpuC

Learn to code for free at:\xa0https://www.freecodecamp.org

Intro music by Vangough:\xa0https://fcc.im/2APOG02

Transcript:\xa0

It\u2019s true. I\u2019ve spent thousands of hours reading books, writing code, and watching computer science lectures, all to prepare for the Google software engineer interview.

How I Got Here

I started programming in middle school, but when it came time for college I pursued a degree in Economics. My rationale was that there would be too many programmers looking for jobs by the time I graduated. Boy, I was wrong.

Later, I joined the Army to become a programmer, but the recruiter talked me into a military intelligence position, and I spent the next two years studying the Korean language. I served in South Korea for 2 years afterward.

Before I left the Army, I attempted to get back into programming and was surprised at the difficulty. I had learned BASIC in middle school and kept programming it through high school. But I restarted my programming studies with C++, and the leap was too large. I just couldn\u2019t grasp it.

I did enjoy making websites, however, but I used software with a Word-like interface that I used to publish my websites. I didn\u2019t know how to make websites from scratch.

After the Army, I decided to stay in Korea for a year and teach English. I used my nights and weekends to study web programming, using Perl, HTML, CSS (which was new at the time), JavaScript, and SQL.

After a year of intense study, I landed a job in the Seattle area, and I\u2019ve been here ever since.

I\u2019ve been a web developer now for 15 years. I\u2019ve started 3 companies, 2 of which are still running and generating revenue. I\u2019ve worked at large and small companies, helped startups launch and grow, and recruited and managed teams. I\u2019ve been a product manager, a CEO, a designer, and a marketer.

I\u2019ve had a successful career and learned a lot along the way. But I\u2019m not done yet.

Seeking a Career Change

Remember the part where I didn\u2019t get a computer science degree? It has made a difference.

A few years ago, I thought I could get hired anywhere. I thought I was hot stuff: the elusive full-stack web developer. But during my job search in 2013, I realized my skills were lacking. I had spent so much time chasing dollars by running startups in my spare time, that I had let my skills atrophy. I hadn\u2019t kept up with technology.

For years, I had learned just enough to get by. I had a wide skill set but wasn\u2019t an expert in anything.

Don\u2019t get me wrong, I could still get hired, but not in the technologies or areas I wanted to work in. I could get hired for areas where the tech stack was somewhat outdated, like me. There\u2019s big money in there, but I didn\u2019t see exciting prospects.

The realization reached its peak last year at a career fair. I was interested in perhaps working for one of the local companies that were startup labs run by venture capital firms. However, the fact that I lacked a computer science degree, and the skills and knowledge that accompany such a degree, meant I didn\u2019t have a chance.

I was working full-time on my businesses at the time, and still am today.

At the beginning of 2016, I decided it was time to make a career change from web developer to software engineer. I would need to study hard and practice in order to compress a computer science degree into a few months, but once I did, I could start a new career.

You may not see web development and software engineering as different positions. Both involve programming and craftsmanship, but software engineering adds to it knowledge of data structures and algorithms, compiled languages, memory considerations, and understanding the impact of coding and architecture decisions on the machines where they reside.

Large companies that hire for software engineering positions expect candidates to have this knowledge.

I reached out to an acquaintance who works at Google and asked him questions about his experience at the company. I had been reading How Google Works and was pretty familiar with Google already.

Through another contact, I received a copy of Google\u2019s coaching notes that are provided to interview candidates. This became the basis of my study plan.

Google is a pretty awesome place to work, but before I even knew that, Google was my goal.

Why Google?

Google sets a very high bar for hiring. They want to hire only the best. So if I set my sights high (getting hired at Google), I\u2019ll still be quite hireable elsewhere even if I\u2019m not selected.

The more I learn about Google, the more I want to work there.

In brief, Google is a company that hires smart, creative people, and treats them well. Google rewards merit, encourages big ideas, and gives employees the freedom to make good decisions for the user.

The hiring process is calibrated to bring in smart, passionate people. Google has honed the recruitment and interview process over the years. The brain teaser questions are long gone. Nowadays candidates are chosen based on coding ability, technical knowledge, and Googleyness. There\u2019s a lot going on in that one word.

Management is different. Managers don\u2019t micro-manage. They trust engineers to make the right decisions. Trusting employees changes the role of managers at Google from what most folks envision when they think of management. In addition, managers can\u2019t unilaterally, hire, fire, or promote. Many of the important management decisions that could be perceived as office politics are handled by a committee to remove that danger.

Google\u2019s people operations (HR) has learned what works over time, and they use data and employee feedback to improve evaluation systems, the hiring process, promotions, compensation, benefits, and more. Read Work Rules! by Laszlo Bock (SVP, People Operations) for more.

Yes, the benefits are amazing. I went on a tour of the Google office in Kirkland, WA, and it surpassed my expectations. And my expectations were already high.

Google Interview University

Remember the coaching notes I received telling me what to study? The list of topics seemed manageable, even though I didn\u2019t know anything on the list.

I turned the topics on the notes into an outline and started filling in the topics with YouTube videos of lectures from MIT and UC Berkeley. A video on linked lists in one place, a video about queues in another. The list started to grow.

I published the list on Github because my Github account was pretty empty. Since all the code I wrote for my businesses and work was private, my Github account made it look like I didn\u2019t code at all. I needed to build up a portfolio. I originally called the project \u201cProject 9894\u201d. Google launched on Sept 4, 1998. Hence the name. I later renamed it to \u201cGoogle Interview University\u201d.

Over time I added some optional topics that I discovered along the way.

I was pretty amazed I had gotten so far in my career without even knowing how a CPU processed a program, how memory worked, or any of it. I had known \u201cjust enough\u201d to be a success.

My little Github project started getting a few stars, and I published a blog post celebrating 20 stars.

One morning, I awoke to find it had grown to 120 stars. Someone famous had tweeted about it during the night, and that led to it ending up on the Github daily trending report. I was #1 trending on Github for a few days.

Many kind people reached out to thank and encourage me. It turns out there are thousands of people who want to not only work at Google but want to work as a software engineer, and this list was just the to-do list they needed.

It\u2019s now at over 21,000 stars.

I still can\u2019t believe it.

What If I Don\u2019t Get the Job?

It won\u2019t be the end of the world.

I\u2019ve put the time and dedication into my studies for the goal of getting hired as a Google software engineer, but even if I fail, I\u2019ll still be armed with the skills and knowledge required to work as a software engineer at any company.

Wherever I end up, I\u2019m going in as an entry-level software engineer. I\u2019m not going in with 15 years of software engineering experience because I simply don\u2019t have it. When it comes to this stuff, I\u2019m the equivalent of a fresh CS grad.

But I have the enthusiasm of a new grad, too. This is a new world for me. I\u2019m just getting started. I\u2019m not afraid to make mistakes. I know I will. I also want to learn everything I can and be an excellent addition to any team.

Don\u2019t Study As Much As I Did

Yes, I took 8 months. But I could have abbreviated the process. Like any startup with a big goal, you make mistakes and do things that waste time. There are many things I wish I go back and do differently.

I studied topics I didn\u2019t need to, some because I thought I would need them for the interview, and some because I wanted to have the knowledge on hand for when I started working. I didn\u2019t want to be a burden on the team I\u2019m assigned to. It turns out I simply over-prepared.

I spent 3 weeks reading a 1,000-page book on C++. I don\u2019t remember 1,000 pages worth, but I know a good bit about C++ now. As it turns out, I\u2019m using Python for the interview, not C++. I had assumed I needed C++, C, or Java, but I was wrong. It\u2019s good to ask, not assume.

I read way more books than I needed to. There are only 3 or 4 books I should have read.

I have a code catalog of dozens of algorithms that I review, most of which I wouldn\u2019t expect in an interview. You don\u2019t need to do that.

I watched many hours of YouTube videos but could have watched far less, and spread out topics over time.

I should have stopped reading books and watching videos earlier and started on coding problems sooner. I would have been able to spend more time applying the topics I learned.

Spaced repetition is the key to memorization. Once you learn something, review it again later, and again even later. At each repetition, you reinforce your learning. Spending hours and hours at one time on priority queues won\u2019t make you an expert. You become an expert by revisiting and reviewing over time. If you do so, you\u2019ll get to the point where can\u2019t forget details.

To help review, I made 1,792 flashcards (digital flashcards). This is way too many. I review them on my phone or tablet whenever I get a spare moment (such as during Christmas shopping). Flash cards and spaced repetition go hand-in-hand. Once I get an answer on a flashcard right, I don\u2019t mark it as known. I keep it in the deck and once I\u2019ve seen it and answered it correctly many times, then I mark it as known.

My sense of fear (\u201cWhat if they ask me a question about red-black trees?\u201d) led me to study far more topics than I needed to.

But I didn\u2019t want to just prepare for the interview, I wanted to prepare for a career at Google, solving large-scale problems. That means knowing algorithms that will save computing resources of time, space, and I/O.

I may never need to know a maximum flow algorithm (Ford-Fulkerson), but it\u2019s nice to know I have that tool available if the situation arises (without memorizing the implementation), and can recognize its application to a problem space.

Conclusion

Early on, I wished I could skip all this learning, and just hurry up and get hired so I could instead spend my time learning the languages and tools for the team I join. But along the way, I realized how important this knowledge is, and even though most of it may not be applicable on a daily basis, I\u2019m glad I put in the effort. I have a new appreciation of the history of computing, the greats in the field, data structures and algorithms (and how they complement each other), and how computer systems work at low-level.

I\u2019ll be putting in my application soon. It\u2019s been a long journey getting to this point\u200a\u2014\u200aalmost an entire year. It began back in January, but I wasn\u2019t able to commit to full-time study until April.

I\u2019m about as prepared as I can be. I can\u2019t keep studying and putting off the application forever. At some point, I have to take the leap.

I see a bright future ahead.

First of all, thank you to everyone who cheered me on and supported me with your kind words over the last few months. I appreciate all of you so much. Your encouragement helped me get back to the whiteboard every day and practice.

Why didn\u2019t I get hired?

I don\u2019t know why.

Last week I received a rejection email from the recruiter, and at first, I thought it was a mistake, and laughed it off. I checked in with my referral and he inquired into it and lobbied on my behalf, but in the end, it didn\u2019t change the situation.

The thing that bothers me is that I didn\u2019t even get a phone screen. I didn\u2019t even talk to a recruiter over the phone. After all this work and enthusiasm, I didn\u2019t even get a chance to prove myself.

I\u2019ve done a lot of speculation about the reason why, but I won\u2019t do that here. It\u2019s all just guessing, which accomplishes nothing.

But I still like Google. However, I don\u2019t know if I\u2019ll apply again in the future. I want to get hired and stay at a company for a long time. I don\u2019t want to hop around. The company that ends up hiring me will get a loyal, hardworking, enthusiastic employee. There are a lot of places where I can strive for greatness and have that effort rewarded.

Respect your Recruiter

Recruiters look at hundreds of resumes every day, and they are highly tuned to detecting quality candidates and rejecting those who don\u2019t match up with their model. For some reason, I just didn\u2019t fit the profile. They probably are doing me a favor. It\u2019s possible that I would have been in over my head and continually dragged my team down. Google is known for having false negatives in their selection process, but if you\u2019re good enough for Google, you\u2019ll eventually get in.

Recruiters know what works, and what doesn\u2019t. So respect their decision and be polite. I\u2019ll bet they deal with irate rejected candidates on a daily basis, so don\u2019t be like that. Just get more experience and knowledge and try again later.

As you may know, the last 11 months have been very difficult for me. As a self-taught web developer of 15 years, my computer science study plan took me months to get through, and the main motivator was to start a new career as a software engineer, tackling large problems at a large tech company.

Google was the company I had audaciously set my sights on, but in the end that turned into disappointment. If you haven\u2019t read about my story, you\u2019re missing out. Go ahead and read it first.

Well, I reached out to my network, and made a lot of new friends. I got connected with every tech giant in the Pacific northwest. Of all of them, Amazon had always stood out\u200a\u2014\u200aeven more than Google\u200a\u2014\u200aas the most innovative company over the last 10 years. I applied via a referral, whom I had met at a startup event in 2013, and got the process rolling.

After so many months of non-stop effort, sacrifice, and worry, I\u2019m pleased to announce that I finally made it!

Today I accepted an offer to be a Software Development Engineer at Amazon.com.