My interview experience with Google

(See also part 2 of this article).

A few months ago I received an e-mail from a recruiter at Google asking for an opportunity to talk to me about available development positions. Needless to say, I was pretty excited. I’m fairly happy in my current job, but–it’s GOOGLE. You don’t say no to an interview opportunity at Google.

Like this article? Check out my latest book, Writing High-Performance .NET Code.

I’m writing this account in order to contribute to the meager resources available on the Internet about the Google interview experience. I signed an NDA, so I’m not going to say what the specific questions were, but I think I can give a pretty good idea of my experience. I apologize right now for the length.

I traded a few e-mails with a recruiter in Mountain View. I had a phone conversation with him, wherein he asked me general questions about my skills, desired work locations (giving me a choice of Santa Monica, Mountain View, and Boston). I have no desire to live in California, so I chose Boston. I was then passed to another recruiter, who setup a phone interview with an engineer in Mountain View. There was a false start, when they couldn’t do the interview at the original time, so we postponed.

The phone interview went very quickly. He was very nice and asked about my specific talents, things I enjoy doing, and projects I’d worked on–especially those I listed on my resume. He asked about the ray tracer I wrote in college, since he had an interest in that. He also asked some general questions about the stuff I do for work. Then he got into the technical question. It was an interesting problem, and I asked follow-up questions, talked out loud, wrote things down in front of me (and told him what I was writing and why). I immediately thought of the naive solution–always a good place to start. He was interested in the asymptotic complexity. I knew there were better ways of doing it, so I started thinking of optimizations to the algorithm, trying to come up with ways of caching information, reusing previously-computed values, etc. He gave me some gentle prodding, and I think I understood immediately where he was going. I answered the question fairly well, I though.

And that was it–just a single question. I was surprised. The entire thing lasted less than 30 minutes. I was almost disappointed, and thought–“well, that’s that–I won’t hear back.” I really wasn’t expecting any follow-up.

The next week, I got an e-mail from my recruiter who said I had impressed and was going to get the opportunity for an in-person interview in Boston! They hooked me up to a travel coordinator, as well as the recruiter in Boston.

Very exciting. I had a convenient time to go, so I set that up, took time off from work and went up to Boston, staying in the Cambridge Marriott. Very nice hotel. 40″ flat screen TV in the room ( which I never turned on). All expenses paid for, of course. πŸ™‚ I did have to pay for hotel and food up front, and save the receipts. (And yes, I promptly received a reimbursement check from them a few weeks after I sent them in.)

I arrived on Monday afternoon, figured out Logan International (a very confusing airport, I thought), and got myself to Cambridge, in the heart of MIT, an hour or so later. I checked in, then went walking. I found the building Google is in on the very next block from the hotel. They have a floor in a building that MIT leases to startups, tech incubators, and the like. There are plenty of news articles about the Google Boston office–just…you know, Google for them.

I walked past the ultimate geek bookstore–

Quantum Books. Discount tech books. COOL. I would definitely have to stop there later. Then I got some cheap, awful Chinese food at the food court

right under the hotel. Why? When I could go out on Google’s dime? I think I was just tired and wanted to get back to the hotel soon and start studying.

I ate dinner in the room, took pictures of the wonderful view of the Boston skyline.

Boston Skyline (Day)

Boston Skyline (night)

Studying

What did I study? I brought two books with me: Robert Sedgewick’s Algorithms in C++, and a C++ reference manual. I went over advanced C++ topics, STL, simple sorting and searching algorithms, properties of graphs, big-O, and anything else that popped into my head.

By far the most valuable thing I did was write out algorithms before-hand. I picked something and wrote it out by hand in a notebook. It was hard going at first, but I knew it was the best thing I could do to prepare. I did selection and insertion sort in both array and list form. I did string reversal, bit reversal, bit counting, and binary search. All by hand, without looking in a book at all. As well you might know those simple algorithms, it’s harder than it sounds.

I went to bed relatively early–9:30, and woke up the next morning at about 6. I went to breakfast in the hotel restaurant, got a rather large meal, and then headed to my room to study more. I wrote more algorithms and redid some I had done the previous night.

Oh, I also wrote down in my notebook (beginning on the plane ride up) questions for Google, as well as answers to questions they could ask me (standard interview fare–projects, favorite project, languages, strengths, passions, getting along with people).

My interview was scheduled for 10 am–I checked out at 9:30 and left with my bag (I had everything in a single bag I could carry–it was very heavy) and sat in a little square for a few minutes. At about 9:50, I went in, took the elevator, and was greeted with:

.

. (ready for it?)

.

The Google

Dr. Seuss land! Yes, that was my first thought. I think the door was green, the reception area was very colorful. The receptionist was very nice and asked me to sign in on a computer, which printed a name badge for me. They had some research papers by Google employees on a wall, so I grabbed a couple (their hard drive failure study, and map/reduce). After a few minutes, my Boston recruiter came out and greeted me, offered me a drink from their free fridge, and took me to a small conference room, furnished, it appears, from Ikea. It was simple, clean, and very nice. There was a white board. I would get to know that whiteboard very well.

My first interviewer came in and we got started. I talked about my projects for a bit, they answered my questions, and then we got to the problem. Each interviewer asked me to solve a single problem (could be some sub-problems involved), and I had to do it on paper or on the board. I wrote C/C++ code. They take note of what you write and ask you further questions, especially if your first solution isn’t optimal.

I tried to take extra care with my code and not let stupid mistakes creep through. I used good variable/function names, made sure my braces matched, and I ran through the algorithm on the board once I had written it.

The first interview was one of the toughest. I was more nervous. I think I made more mistakes–I didn’t see things as quickly as I did later.

I had three interviews before lunch. They then handed me off to someone else who would not be evaluating me, but would just be an escort for lunch. The Google cafeterias in Mountain View are legendary, but the Boston office is far too small to warrant such lavishness. Instead, they have a catered lunch every day. It was wonderful. They also have all the free drinks and candy you could want, available all the time. I spent much of the time asking my escort questions about Google, what he was working on (couldn’t tell me), the area, the office, the commute. We were also joined by the head of the office, who didn’t realize I was an interviewee, and we had a nice conversation as well.

Lunch was an hour, and then I was back in the conference room. I had two more interviews. Then the recruiter came back in at about 3:15 or so and debriefed me–asked me my impressions, how I felt. I reiterated what I had told him on the phone previously, and that morning before we started: that I was trying to take this as easy and nonchalantly as possible, to have fun, and learn, and let it be a good experience. I had a job that I enjoyed, and didn’t NEED this one, but I think I would do well there and enjoy it very much. They came to me, after all.

I think by the end of the day, I was really pulling that off well. Once I got over my nervousness in the first interview, I really did have fun and enjoy it.

General Notes

They didn’t ask me any stupid questions. None of this “what’s your biggest weakness?” garbage. Not even the recruiter asked me anything like that. Nothing silly at all. They also didn’t ask me easy technical questions. They got right into the problems and the code. I had to describe an algorithm for something and write code for it. It was serious, they were all nice–I met people with serious reputations online. I felt like they were respecting me as a fellow programmer–almost. I wasn’t one of them, but they really wanted to see if I could become one of them.

I did receive prompts to get through certain problems, but not overly so. I answered every question they asked. Some I answered better than others, but the ones I didn’t get right away, I had alternate solutions, and I understood where they were going as soon as they started talking about it.

Why I didn’t get the job

Well, companies these days won’t tell you why. I think they fear it opens them up to lawsuits. I think that’s silly. It prevents those of who really do want to learn and improve from knowing what we’re deficient in. Oh well. They told me that they thought I would do well at Google, but that it wasn’t a good fit at the time, and I should apply again in the future. (Of course, I didn’t apply in the first place.)

My suspicions, however, are that I lean too much towards Microsoft technologies. I do a lot of work in .Net. That’s where more and more of my experience is. I do consider myself very good in C++, but I’m doing more and more C# work. I’ve always been a Microsoft Windows developer.

I also am not really interested in web-centric technologies, and I told them so. I’m more interested in client apps on the desktop, and server apps.

Of course, it’s very possible I just didn’t answer the questions to their satisfaction–that I needed more prompting than I should have. Oh well.

It could also be that my GPA wasn’t what they wanted. I goofed off my freshman year of undergraduate work. I really hurt my grades. I came back, though, and got straight A’s for my last few years where I took the hard CS classes. I also got straight A’s in my Master’s program while I was working full time. I don’t think this was the issue, but it’s possible.

Lessons

  1. Having your own web-site is a no-brainer. Do it. Update and maintain it.
  2. Do personal projects. You must be passionate, you must love programming. You must be good at it. Not average. You must aspire to excellence and be working towards that.
  3. Know what you’re talking about it. Don’t show off–just display your knowledge as it applies to what they asked you.
  4. Use an interview with them as a learning opportunity and ensure you have a good experience regardless of the outcome.
  5. Don’t take the interview too seriously. Make sure that not everything rides on the outcome. You must be comfortable, confident. You must try for success in every possible way, but yet be completely prepared to fail–and have that be ok. This is a hard balance to achieve, but I think it can really make you have a healthy outlook and have a good time while still showing your best self.
  6. If you don’t get an offer, realize that even being selected for an on-site interview by Google puts you above the ranks of the average-good programmers. Google gets 1,500 resumes a day. You’re already in the < 1% percentile.
  7. Practice writing code by hand in a notebook. This helped more than I can express. Do stuff that’s hard that you don’t know how to do immediately. Time yourself. Make the problem more challenging. If you can’t stretch yourself, they will and you’ll probably break. They did not ask me to do any of the specific questions I had practiced–but the experience writing out and the THINKING is what helped.
  8. Be able to explain your background (90% technical / 10% personal) in a few words. At some point you’ll be asked.
  9. Have a lot of questions for people. You’re interviewing them too. Make sure they’re good questions. Asking about salary is not a good question before you’ve been made an offer.
  10. I let the interview build my own self-confidence. I have no doubt that I could walk into an interview anywhere else and it would be laughably easy.
  11. Don’t ignore obvious, simple solutions. Sometimes a table lookup is better than an O(n) algorithm.
  12. Bring a good, FUN book for the plane ride back. On the way, I focused on the interview, but on the way home I wanted to do anything but, so I had my current novel (Dickens’ Bleak House–very good book, by the way).

If you do all of those steps, it actually doesn’t really matter if you apply to Google or any other great/famous company–you’ll probably get the job you want for the pay you want anyway. Somebody, sooner or later, will come across you and give you the opportunity.

Great programmers will rarely, if ever, need to look for jobs.

I hope this long, rambling essay is helpful to some. I make no claim that my experience is typical or that I’m being completely objective. In other words, YMMV.

Read part 2 of this article

105 thoughts on “My interview experience with Google

  1. Pingback: Javazing.com: Blog on internet, programming, software, Java and many other things » Blog Archive » Interview at Google

  2. BillyG

    Insightful article, thanks for taking the time to write it up.

    That last link didn’t make me feel too good :-), but that’s okay.

    I had an interview yesterday (not at Google), and am going in for a performance test at another local company in 45 mins.

    When it rains…

    G/L

  3. vin

    I just got a Google recruiter call and they said you can prepare your algorithm and data structure for phone interview. Thank you for your shared experience.

  4. Pingback: Philosophical Geek » More on Google interview

  5. pepethecow Post author

    @BillyG, sorry about that last link. I can understand how you feel about that. I wouldn’t take the article too personally, though–it’s more about a company’s perspective than an individual developer’s. It’s the statistics that are important to them.

    I think the valid takeaway from that, though, is that the better you become, the more you can choose your own work. You eventually take yourself out of the market. That’s a very nice place to be, but I think it’s very difficult to achieve. And I am in no way claiming I’m in that situation. I’m relatively young and was lucky to get this opportunity, and I’m going to *work hard* to get into that situation where I can choose what I want to do.

    Good luck on your interviews!

  6. Pingback: All in a days work…

  7. Veerabahu Subramanian

    Lessons are really helpful πŸ™‚ Can you provide further details on u r first lesson.. Like wat can be there in our own web-site.. I have to start with πŸ˜‰

  8. Pingback: Carlo Vella’s Bits and Bytes » Interview experience with Google

  9. usrc

    Thanks, that was an interesting read, particularly the reflection and takeaway lessons at the end.

    I had two telephone interviews with Google last year and can honestly say they were one of the best experiences I ever had because of the amount of confidence I gained from them. Every single interview I did after that seemed like a piece of cake. I didn’t get the job, but now, exactly one year later I’m in the same position with a set of Google phone interviews coming up next week.

    Thanks again for sharing your experience.

  10. Pingback: links for 2007-08-17

  11. Pingback: Rhonda Tipton’s WebLog Weekly Link Post 3 «

  12. pepethecow Post author

    @Veerabahu,

    I think at a minimum a personal web-site/blog should have your resumΓ©/cv, and it should be kept up to date. It could also have a short biography, but I would be careful about it. I need to review mine to make sure there isn’t information that could be used in an identity theft situation.

    Other than that, I would talk about your passions–especially coding. Put up code, think about software issues, and then write about it. It doesn’t matter if you’re “right”–it matters that you think about it.

  13. Sunny

    Hey philosophicalgeek,

    How mmany days it took for HR to notify you of non-acceptance after your onsite interview ?

  14. gregbo

    Nice writeup. I’ve had several phone interviews with google, but
    nothing on-site yet.

    I guess I come from a time when memorizing algorithms just wasn’t
    done. Even if I tried writing algorithms out, I couldn’t memorize
    them because my mind just doesn’t “go there”. Even more so, I
    couldn’t memorize ALL of them. (I remember having a conversation with
    my graduate advisor once about this.) Perhaps I could memorize some
    basic ones, but because they are basic, they wouldn’t really help me
    with the logic/problem solving aspect of analyzing them, or coming up
    with new ones (and proving them correct).

    I’m not particularly interested in web-centric projects either. I’m
    actually interested in developing IETF protocols and algorithms. I’m
    most interested in congestion avoidance, although I’ve only had
    opportunity to work in that area for a couple of years. I’ve worked
    on other projects, such as firewalls, mobile hosts, and distributed
    filesystems, but would really jump at the chance to do congestion
    avoidance. On one phone interview, when asked what my favorite
    project was, I answered (truthfully) that it was a project where I
    developed two CA algorithms (random drop and stochastic fairness
    queueing) in a Cisco router. The interviewer seemed disappointed, as
    if he’d expected some kind of “cool” web app.

  15. pepethecow Post author

    gregbo, thanks for the comment.

    I don’t think they really expected me to memorize the algorithms, and I certainly didn’t have memorized all that many except for very basic ones (elementary sorting). I think I mentioned that the value in writing out code by hand wasn’t entirely the memorization–it was more the mechanics of being able to clearly write/explain something (anything) under pressure on a white board. Even writing in a notebook was enough of a change in environment that it forced my mind to think more clearly and deliberately about what I was writing. Whether or not writing code on a white board is a good test in the first place, though, is another question entirely.

    I think your comments hits upon the value. Practicing algorithm recall yourself before the interview will help you develop the algorithm “live” for them when it counts. They certainly don’t ask you to regurgitate algorithms “you should know”–they ask you to develop an algorithm from scratch in front of them. I’m sorry if this wasn’t clear from my post.

  16. gregbo

    OK, fair enough. But what are the best algorithms to work out by oneself so that if asked, one can write them out? It’s not exactly memorization, but it’s not obvious that this activity is inherently valuable, because these algorithms (and many of their implementations) are in books, on websites, etc.

    I think there is more value in learning to analyze algorithms, or explain why they are correct. But I’m biased — in my algorithms classes, we weren’t expected to reproduce algorithms from textbooks, class notes, etc. And it was never the case that we were asked to implement running code on an exam in an algorithms class — pseudocode was sufficient. And you could bring a crib sheet so you could make notes of the allowed statements of the pseudocode language, for example.

    At the root of my complaints about the entire interview process is that it’s impossible to know how to improve oneself. There is no meaningful standard against which to measure oneself. You made a good point about that in your post. I see you read Joel on Software, so you’re familiar with the “better to reject a good candidate than be stuck with a bad one” philosophy. In light of the claim that several companies (including Google) have made about not being able to find qualified candidates in the US, I think the JoS hire/no hire philosophy contributes to the problem. If instead the interviews tested for qualification, instead of (misguidedly) identifying bad hires, we might be able to have a reasonable discussion with the US Congress about the availability of qualified candidates.

  17. Siarhei Barysiuk

    Hi! Great article. You reproduced a environment and feelings very good in the post. Yea… It’s GOOGLE.

  18. Greg

    Congratulations – great experience and honor. I always enjoy reading your blogs. I’m glad you are not too interetested in web-centric programming. I’m sure your GPA was not an issue. I’m pleased for Google’s loss however. Great post, good lessons and exciting self improvement plan. πŸ™‚

  19. Pingback: My Ghillie » Philosophical Geek " My interview experience with Google

  20. novicePrgrmr

    Nice detailed write-up and good self analysis…It was nice that you didn’t put your qns as you signed the NDA, but people tried to put something similar and not the exact qns. That would be even great if you can put them here…I am not sure if the NDA says that you should not even have disclose similar qns.

    Once again, Great job!

  21. Rusty

    I am also in the process of trying to land at Google. However, it’s for a non-technical position, so it may be irrelevant to this post. The only time I did algorithms was in Junior High Math and that drove me mad!

    I applied for a position I liked around 3rd week of December and I received an email from a Recruiter asking me to fill out an “about you” form, I did that, and in about 10 days had a Phone Interview and then today, had another follow-up Phone Interview (about 30 Mins.). So far so good, and now they have invited me for an on-site interview at their Mountain View location. So one more step to go and we’ll know if I return to this site to post another success story or if I bust out.

  22. Pingback: Want to work for Google? |

  23. David

    My experience interviewing with Google has been disappointing. I’ve interviewed with them twice now, in early 2007 and early 2008–in both cases they contacted me rather than me applying. In neither case did I get the job–no doubt that is part of the reason I was disappointed.

    But there were other factors. They claim to be interested in people who have a strong entrepreneurial spirit. And I have that spirit, having worked for a number of start-ups and having presented business plans at meetings of VC’s and angel investors. Yet Google seemed to have almost zero interest in hearing about any of that background when they interviewed me. All they seemed to want to ask me about was low-level Java programming questions.

    After the process–both times–they decided not to hire me because I was deemed not to have what it takes to be a ‘code monkey’ at Google. (In my case, at least, they did in fact tell me why they didn’t hire me.) However, I was quite disappointed to hear that they seemed interested only in ‘code monkey’ skills–I bring a lot more to the table than that and they claim to be interested in such skills–but in practice they only seem to want code monkeys. Even networking with people I know who work at Google wasn’t fruitful in determining how to market my skills better to Google.

    The most telling factor, though, was that I had lunch at my interview with someone I know who works at Google. This person–I won’t name him of course–seems extraordinarily unhappy at Google. His sharing of his negative impressions of Google probably bordered on unprofessional given that he was, presumably, supposed to be selling me on the company at lunch. But it also says something not very positive about Google when one of their long term employees is representing the company in such a negative way.

    I suppose it is an honor to be invited to interview at Google, but the interview process itself left me feeling uninspired and unexcited about the prospect of working there. I would not have contacted them again this year based on last year’s experience. They contacted me, however, aware of last year’s process and its outcome–and repeated the same unfruitful process this year.

    The only way I’d consider trying to work there again in the future would be if I develop my entrepreneurial ideas into a company that I’m ready to sell and Google were to hire me as part of the process of buying the company. Otherwise I have simply wasted too much time with these guys.

  24. Pingback: Google interview

  25. 1

    good writeup.
    but dude seriously ..”laughably easier?” looks like u havent atteneded interview at similar palces though. all places like yahoo,MS,amazon have the more or less standards.i found intereviews in yahoo and nvidia much harder.

  26. pepethecow Post author

    @1: MS, Amazon, Yahoo, Google, and NVidia are all in the elite category–those elite companies are 1% of 1% of companies that need programmers.

  27. Pingback: ????? ??? ???????? » ??? ??? Google

  28. Pingback: My Interview Experience at Microsoft | Philosophical Geek

  29. Pingback: Google-like interviews « My web…side

  30. Harshad

    Nice writeup… Nice and detailed peep into the Google recruitment .. Thanks for sharing your experience. This has really helped me a lot many ways..
    Cheers.

Comments are closed.