How to interview at Google

·—— ···· ·· — ····· ···—— ——···

So I interviewed at Google Pittsburgh on Tuesday, and I just found out that I ... didn't make the cut! Oh, well.

Honestly, it's the right outcome. I first talked with a local recruiter a year ago, and she pointed me to two resources: Programming Interviews Exposed, and TopCoder. I bought and worked through PIE at the time, but I didn't dive into TopCoder until a few weeks ago, when I started cramming. End result: I didn't totally flop, but I didn't do great.

There's a number of failed Google interview stories on the web; I found Rod Hilton's to be the most helpful at the time. This quote in particular was a reassurance:

When I was first told by the recruiter that the questions would be algorithm-based, I was worried I’d have to reproduce quicksort or something. In fact, the questions were far, far more reasonable (though reviewing sorting algorithms WAS a good idea).

The best blog post I found, however, was from someone who passed his interviews, Steve Yegge. It's long and winding, but he gives you lots of great advice (per that post, I did bring my own fine-tip dry erase markers, which definitely helped). The basic idea is that you need two things (besides markers): knowledge of computer science, and programming chops. That is, you need to be able to talk shop about data structures and algorithms at a high level, and you need to be able to implement them in code without thinking about it.

Now, like Rod, I wasn't asked to reproduce quicksort. But my hunch is that I could have been if I'd breezed through the questions they did give me. I mean, come on. Do you really want to stare a Googler in the eye and tell them you can't reproduce quicksort? And that you are their peer? These basic data structures and algorithms are like scales and arpeggios to a musician, or saws and drills to a contractor. After this experience I can hardly call myself a programmer for lack of the ability to code the following instinctively:

That's a bare-bones list. And if (like me three weeks ago) you're trying to identify the minimum you need to know, then you're in trouble. As one of my interviewers said at the end, when I asked him for advice on preparing for these interviews, "Just do whatever it takes to become a great software engineer." You don't show up for Celtics tryouts without being able to shoot free-throws. You gotta want it, kid. If you can't code quicksort on a dime, then hie thee to the woodshed (said Chad to himself).

There are a few things that aren't mentioned in Steve's article. One of them is TopCoder, which you absolutely must compete in. Racing against Russian teenagers is way more intense than having a friend interview you, which is Steve's parallel suggestion. If you can do well on TopCoder, and you can participate comfortably in the higher-level talk about data structures and algorithms, you are on your way.

Another thing is that it's good to have worked on some interesting real-world projects. We all know that open source means there are great projects to participate in everywhere. But now, when Amazon's Elastic MapReduce makes it so easy to get in the game, I was embarrassed to have to say that I had no distributed computing experience.

A third thing that Steve doesn't address directly (but clearly has plenty of) is personality. There was an expectation on Tuesday that candidates interviewing at Google are going to be anxious and even insecure, and I got the impression that not a few interviews are tortuous for the interviewer. Be a little nervous, but don't let it paralyze you. Look your interviewer in the eye. Relate to them as a person. And don't be afraid to joke a bit. When it was time to go to the whiteboard with the first interviewer, I told him straight up that I expected to flop, and then I started singing "Hit me with your best shot." Enthusiasm won't mask incompetence (*ahem*), but it could break a tie if you are competent. And even if you don't make the cut, you and your interviewers will enjoy the experience more if you act like humans.

So in short, here's my suggestions for turning yourself from a "mere" web programmer into the sort of software engineer that Google—or any other software company—wants to hire:

Will it work? Well, the recruiter encouraged me to reapply in a year, so I'll let you know ... after a visit to the woodshed.


Hit Me With Your Best Shot - P...
·—— ···· ·· — ····· ···—— ——···
Feed back to Chad Whitacre.