Yesterday I had my (hopefully first rather than last) technical interview with Google UK.

Short story: That stuff is fun! Longer story follows.

Google London HQ

Google London HQ

Sometime in January one of Google’s recruiters sent me an email; whether I’d be interested in talking with him. That my online profile looked interesting and so on … at first I almost dismissed it as spam – surely they send these out by the hundreds every day?

But hey, nothing to lose if I reply, right?

After I changed the agreed date of our video chat a couple of times – even forgot to respond to an email for two weeks – we finally got together. That was just your run of the mill blahblah with an HR person. What kind of stuff I like, what Google is all about, the fact they have shiny new offices in London and are looking for people to fill them with and so on.

Mind you, I don’t know whether I actually want to work for Google. They’re a huge company and working for them would fly right in the face of my principle to only work with startups! On the other hand, just being able to say I’ve worked at Google, even for a short while, would look incredibly well on my CV.

But hey, no sense worrying about this stuff until they offer me a job. Fuck it, let’s give the interviewing process a shot – looks like an interesting challenge anyway. Challenge accepted, I want to win.

They agreed to give me a call a month later, when I’d be done with exams. Yes, Google is in fact that nice. No rush, whenever you have time, you don’t want to even consider working before September? Fine with us. Please just let us talk to you kthxbai.

Yesterday was a month later.

The interview

Funny thing is, Google goes to great length to put you at ease about the whole process. They’re nice to you, send you friendly sounding email and at the same time everything looks so bureaucratized you can’t help but feel ever so slightly nervous.

There’s even detailed instructions for making sure you can be called via GTalk!

Google London HQ

Google London HQ

And the email says don’t you dare type on your laptop, the interviewer will hear you! Of course the interviewer spent the entire conversation happily clickety-clacking away at his laptop … it is in fact slightly annoying.

Andrew was a cool guy, very good with asking cool questions and letting me run amok – undoubtedly making an arse of myself several times when I climbed into a wall trying to explain a concept I introduced to the conversation and then backtracking to where I still made sense and trying to explain it differently.

The conversation had a light structure, felt like having a technical chat with a friend over some drinks:

  • describe a cool recent project, go into the technical nitty gritty
  • what’s an exception and how does it work
  • what is a memory leak and how would you go about debugging it
  • automated testing! talk, go!
  • write some code to create powersets
  • how would you look for a file containing a keyword in a deeply-ish nested directory structure

I have no idea how well I answered the questions … you know how these things are, you can explain at great detail what you think something is and how it behaves. But you might well be completely wrong.

The funniest part was after I explained a recent project (time-series analysis for predicting how much money I’ll have in two weeks) and Andrew’s response was something along the lines of “Oh that’s really cool! Do you have any plans on making it into a service? … wait, I’m interviewing you for Google …”

He seemed a bit confused.

Another interesting moment was when I was explaining memory leaks. He was looking for an answer inside the Java or C++ world (even made sure I knew them beforehand) and instead I explained that a cool way of getting memory leaks with javascript is through closures that are left hanging. I did also give the answer he was looking for, but off-handedly.

That somehow sent me into a long explanation of what closures are and how the concept is neatly related to continuations and function curling. And what those are. He generally let me wander around with my answers, probably trying to poke into what I do know and what I don’t, even if it’s beyond the scope of specific questions.

Coding under pressure

There was some coding involved – a very simple task. What is a powerset, blah, yes you got it. Now code something in your favorite language to turn a set into its powerset.

Google London HQ

Google London HQ

Not even in my worst nightmare could I imagine coding live, with somebody looking directly at my output, would be so difficult! It’s amazing, you go there and you think ah! yes, I know this! This is simple stuff!

You start … nothing.

I spent four or five attempts climbing myself into a wall and deleting all my code before finally producing a cool looking algorithm – a lovely non-recursive solution; simply because I couldn’t think of a recursive solution, just knew that the simplest solution is supposed to be a recursive algorithm.

def powerset(set):
      binaries = [bin(a) for a in range(2^len(set))]
      power = []
      for yeses in binaries:
        subset = []
	yeses = str(yeses)
	for i in range(len(yeses)):
                 if yeses[i] ==1”:
        		subset.append(set[i])
	power.append(subset)
      return power

This is whiteboard python. The syntax for calculating a power is wrong and I’m fairly certain bin isn’t an actual function in standard library. I’m also not sure converting a binary number to a string works quite as I envision it here, might need to use “%d” % blah syntax.

But the general idea is simple: take all binary numbers from zero to the powerset’s length, iterate through them and use digits as binary switches for picking elements to put into each subset.

Google 的貼牌冰箱(Google refrigerator)

Google 的貼牌冰箱(Google refrigerator) (Photo credit: Aray Chen)

It took me forever to deduce the formula for calculating the size of a powerset from first principles. Couldn’t remember it. Looked at the examples I generated in my head … “Ok, so every time you add an element, you double the size of the powerset. n^2 … no that’s not it … could it possibly be 2^n? Damn it! yes, that’s it!”

But Andrew reassured me he loved the solution even though it needed a bit of fixing; and you can obviously see that’s not the most elegant python code out there.

And now we wait

In general I think I managed to convince Andrew that even though my explanations often came with a “I haven’t looked into how this works exactly, but here’s my understanding of what should be going on” I know a fair bit about technology and if push came to shove, I could code my way out of a wet paper bag to save a life.

If he got the same impression, the next step is a full day of back-to-back technical interviews at Google’s London offices.

First though, we wait for “my” recruiter to get back to me about how the phone conversation went.

Enhanced by Zemanta

Learned something new? 💌

Join 8,400+ people becoming better Frontend Engineers!

Here's the deal: leave your email and I'll send you an Interactive ES6 Cheatsheet 📖 right away.  After that you'll get an email once a week with my writings about React, JavaScript,  and life as an engineer.


You should follow me on twitter, here.