Since everyone seems to be doing it, I figure I will throw my 2 cents into the ring...
In early 2010 I traveled to Mountain View for an onsite interview with Google for a Front End Engineer position.
Google had contacted me, no doubt based on the fact I had worked at Yahoo! for 5 years and I had done some interesting things.
The phone screen was straightforward. Typical algorithmic questions with an emphasis on performance. I am an old time engineer, and it has been a long time since I focused on Big O issues, but I did well enough, sometimes using my own performance nomenclature. He seemed pleased by how I approached each solution, but did comment that I was a little rusty on the vernacular.
The recruiter followed up with the offer to fly in to Mountain View for the full day evaluation. They had a detailed questionnaire I had to fill out, designed to reveal my technology interests and background.
I had expressed interest in a position that would demand 50% C++ and 50% Javascript. Since that had been my experience at Yahoo!, I wanted to go in with my strengths,
The interview would be most of the day, Four 1 hour segments, 2 in the morning and 2 in the afternoon.
I interviewed with an engineer from
- Google Maps
- Google Mail
- Google Chrome
- Google Docs
I was impressed with the professionalism and the directness of each engineer. There were no ridiculous questions. Everything asked of me was relevant, strait to the point and leading up to the main point
- how would you solve this problem?
- what are the performance implications of your solution
- write out the code on the whiteboard
The 1st interview was with a Mail Engineer. He asked me to write a GetElementsByClassName implementation. Straight forward enough and done with ample time to spare. I noticed that he would make occasional comments on the coding technique and ask performance related questions about it.
The 2nd interview was with a Maps Engineer. He was a C++ engineer and provided a well prepared problem about mapping, finding the most efficient way through a collection of points and so one. Ultimately (like all the questions), the problem was whittled down to a fairly straightforward algorithmic problem. After I had completed my whiteboard work, the engineer told me there was a bug in my code. I looked back and quickly saw I had forgotten to initialize a ptr. I fixed the error and he seemed satisfied.
We then broke for lunch and I was taken to one of the many free eateries on campus. Without a doubt it was one of the best lunch meals I have ever had.
My host during lunch spoke about his intention to purchase a house (after 10 years of saving). He mentioned it was costing him somewhere close to a million dollars. It wasn't lost on me that even with a great shift in salary that I was unsure of how well I would be able to navigate the inflated markets of Silicon Valley and whether it would actually be a good thing financially. However, my ego would not be denied this opportunity to test my metal.
After lunch it was on to the 3rd interview, a pleasant fellow from the Chrome Team. I was so enamored by the possibility of working on Chrome that I actually told the guy I would kill to get on that team. He smiled with understanding.
He was a C++ engineer and he asked me to solve 2 problems. I don't remember the 1st (it was medium difficulty - but felt good about my solution). The 2nd was a gift - write an AutoPtr implementation. Easy enough and I wrote it out without so much as a hesitation. I did admit that I was a bit hazy on the issues of protecting the copy constructor and that I wasn't sure if I had gotten that part correct. He seemed satisfied enough and we moved on.
Up to this point I was very pleased with my performance. All through the interviews I was keenly focused, and felt on my game. That was soon to change.
The last interview was with an Engineer from Docs. A cheerful British fellow. He prepped his problem the same as the others. The problem was a navigation issue, something about finding the nearest navigation hop (by keyboard) given a set of links on the page, some within the viewport, some beyond it.
It occurred to me that I had done something like this for Yahoo! back in 2005 when I developed the Yahoo! Music for MediaCenter application (never released). In fact it occurred to me that it was almost the exact problem I had faced years ago and had created some helper classes (Javascript) to solve them. I told the engineer that I had seen this problem before and that I had solved it. He smiled sheepishly.
I got excited. I thought I am going to get this job! All I have to do is do what I did 5 years before. No problem. Just don't screw up. Famous last words. I had let my enthusiasm overwhelm my mind. It broke my concentration, and I was in trouble.
I struggled like a schoolboy with the problem. The code I wrote was terrible (truly). It took the rest of the time I had left to get something down on the whiteboard. I restarted 2x (bad move). Ultimately I felt defeated by it and expressed my own critical view of how bad the code I wrote was.
The engineer was non-plussed and did help me out a bit here and there with key comments that were meant to stimulate my thinking. But it was too late. It was a poor performance. He knew it and I knew it.
After he had walked me out, I felt sort of relieved. It was over. I had done well in 3 of the interviews. But my intuition said the last was probably the team I was interviewing for, and that's what counted most.
It took 2 weeks for Google to get back to me. Yes some of the engineers were pleased with my performance, but some had issues, and it was not to be.
I don't know if I will every try again with Google. They had come to me this time. Would my pride allow me to go back and re-submit for evaluation? So far not yet.