A year ago, I interviewed with Google. Google has been my ideal employer for a while, and I greatly appreciated the opportunity and enjoyed the experience.
Unfortunately, my algorithm skills were not quite up to par. I was
told to work on them and interview again in a year. Based on my own
analysis of how well I did with the questions, I walked away from the
experience with the impression that I was very close to getting the
job, but not quite up to snuff.
When I had applied to Google in the first place, my attitude was
that I probably wasn't good enough for Google and I would send my
resume along just to "see what happens." After coming within inches of
the job, I realized that I actually was good enough for Google (or at least, almost good enough). Discovering I was almost good enough for my dream job gave me a great deal of motivation to improve and try again.
The year following this experience was All About Google. I left my job to take a new job that I felt would help make me a better candidate at Google. I began doing TopCoder
sessions in my spare time. I took on some extra projects. I purchased
and read a number of books to help me become a better engineer, and I
focused specifically on books about algorithms.
The past year has kept me focused, laser-sighted, on a second
interview with Google. The plan was to be so well-prepared for the
second interview that I'd obliterate it and speed right through to my
new desk at Google.
One year and seven months after my first interview, in July of 2008,
I sent my resume along. I talked with a recruiter, who told me my
resume looked good and she'd submit it for me.
A few days later, what happened? I got my first phone screen
interview? I nailed the phone screen and went to the in-person
interview? I got the job?
No. I was denied by the pre-screener. I didn't even get a phone interview.
A year ago, I made it through the pre-screening, the first phone
interview, and the second phone interview. I did well in the all-day
in-person interview, but not quite well enough. Since that time I've
only improved my skills, gained more experience, and bettered myself as
a programmer and a job candidate. Yet, my efforts didn't even result in
a single interview.
What happened?
I've been mulling over this, trying to determine what resulted in such a dramatic change between my experiences. Considering that my resume was the only thing the pre-screener looked at, it seemed the likely culprit.
The main difference between my resume a year ago and my resume today
was that I had an extra job on it. The only thing I can imagine hurting
me was the fact that I have been doing Ruby on Rails professionally at
my current job, and Google uses mostly Java.
The only thing other than my resume that could have possibly changed
between last year and this year is Google itself. I did some research,
and discovered a lot of internet buzz about a 'hiring freeze'. Google still has job postings all over the place, so it seems weird to me that they'd be in an actual freeze, but my buddy Jake suggests that maybe they've entered into "genius only mode".
My best guess is that it's a combination of these two factors. Google
is being far more discerning about candidates than they were a year
ago, and I wasn't as great a fit because I haven't done Java in a year.
I'm still trying to decide if I want to try again in a year. Part of
me still considers a job with Google to be my dream job, but what I
realized was that planning my life around Google for a year led to
crushing disappointment. At this point, I'm not even thinking about
applying again.
Devoting the last year to the narrow focus of Google employment was
a tremendous mistake. This is not to say that all of the training
itself was worthless. I am a far better programmer today than I was a year ago.
I can solve more complex problems with greater ease, and I have an
improved grasp on engineering topics. TopCoder has been fun, and I
believe I will continue doing it even though it didn't help me land the
Google job. All of the books I've read are highly recommended. Looking
back, I wish I had done those things for me instead of for Google,
which is why I won't make the same mistake again.
Moving forward, I will continue to improve my skills, but I will do so for myself,
the way I used to before I got caught up in all of this Google
business. I'm removing 'Get a job at Google' from my life goal list on
43things, not because I don't still want to work there, but because I
don't still want to let that goal consume my life. If I decide to apply
to Google again, it will be on a whim, rather than some kind of
carefully planned training program.
We'll see what happens.
Original story
This a follow-up to my previous post
about my interview process with Google. Once a post gets as long as
that one did, I’m sure to forget to say some things. Rather than
updating that post, I thought I had enough new to say to warrant a new
post.
First is the picture I got of their development process. There are plenty of other places
on the Internet about their development process, so I won’t go into
detail about what they told me–it pretty much matches up with the
available information. It really sounds like they try to match the
amount of process required to the specific project at hand. Projects
with a huge public impact have lots of process (Google’s front page,
indexing, etc.), while those that are newer and much lower impact
(stuff in the Labs section, and
even graduates of the Labs) have a much more flexible, agile process,
designed to get improvements out the door very quickly. I like that–no
mandatory bureaucracy where it doesn’t make sense.
Aside from
process, however, it seems that they are very intent on giving
developers an environment designed to help them succeed. From what I
understood, the company actively tries to remove stupid barriers to
productivity (needless paperwork, poor IT, bad workstations) and give
you whatever you need to do your job how you think best. Obviously,
there are rules and standards, but it just sounded more
flexible. It really sounded like an ideal development environment:
Obstacles removed, needs granted. Now, how much of that is the official
“show” they put on for all interviews, who knows, but Google is
obviously doing something right.
Bottom-line is that Google is a
company of engineers for engineers. They’re the ones in charge of what
the company does. That is a very nice place to be if you love coding.
Also,
I should mention that the Google Boston office is MUCH smaller than
their Mountain View headquarters. The way things are done, while it
will still be “Googly”, will most likely have a different feel and pace
than at headquarters. I had read many reports on the web about how
people worked late hours, on weekends, and basically sacrificed their
lives for the company. I did NOT get that impression in Boston. They
were definitely smart and very hard working, but it sounded more like
the company was flexible and if you got your work done, who cares?
(That’s the way things ought to be done for sufficiently self-motivated
employees). I did ask about inordinate over-time (mistake on my part?)
and work-life balance and I came away with a satisfactory impression.
Whether this means Boston is special, or the accounts I read on the
Internet were not representative, I don’t know. Probably a lot of the
latter, for sure.
I also wanted to address my final link in my
last post. I know it can be a little disappointing to read that kind of
post and realize it’s not talking about you, because you’re
interviewing for jobs. I wouldn’t take it too literally.
Maybe my link text is a little black and white. I think the principle
is definitely valid, though. The better you are, the more freedom you
have to choose where you work and what you work on and the less chance
your going to fall into a company’s hiring process. It’s really more
about statistics from a company’s point of view of finding the best,
not necessarily for individuals.
Hopefully, that’s all I have to
say on the subject, but if you have questions, just leave them in the
comments and I’ll try to answer them!
Original story
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.
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.
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 ... google.
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
Having your own web-site is a no-brainer. Do it. Update and maintain it.
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.
Know what you’re talking about it. Don’t show off–just display your knowledge as it applies to what they asked you.
Use an interview with them as a learning opportunity and ensure you have a good experience regardless of the outcome.
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.
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 <>
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.
Be able to explain your background (90% technical / 10% personal) in a few words. At some point you’ll be asked.
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.
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.
Don’t ignore obvious, simple solutions. Sometimes a table lookup is better than an O(n) algorithm.
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.
Original story