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
  • http://smotko.si/ Smotko

    Was the correct answer for the deeply nested directory question iterative deepening depth-first search?

    Also good job! 

  • http://swizec.com Swizec

    The correct answer, for me, was using “grep *, then */* etc.”
    He suggested there’s probably a -R option for grep, but that I am correct when I say I’d probably need some sort of recursive call thing, when I claimed I know in principle, but don’t know enough bash to make it.

  • http://www.facebook.com/dabiglogikholeconsumingchaosandunderstanding Slavko Glamocanin

    grep -r [keyword] .

    Interesting topic span:)

    good luck!

  • http://smotko.si/ Smotko

    Oh, it didn’t even occur to me that he wanted a bash command for it. I thought the question was more like how would I implement an algorithm that does it efficiently :)

  • http://twitter.com/Tech_Thread Brett Martin

    Good luck!  Power sets are always fun, but I don’t know how I would have done under pressure!

  • http://swizec.com Swizec

    I think he just wanted to know if I understand the concept of recursion.

  • http://swizec.com Swizec

    You have simplified my life greatly! Thanks :)

  • http://swizec.com Swizec

    It’s amazing how big a difference it makes. Because somebody is there, looking at you, it feels like you’re not allowed to take a couple of minutes to just think about it.

  • http://twitter.com/zidarsk8 Miha Zidar

     I always forget about the grep -r … and end up doing find . -exec grep word ;

  • http://smotko.si/ Smotko

    Hehe I usually do it like this: find . | xargs grep term

  • Primoz Verdnik

    Very interesting read, I had no idea what powersets are. Good luck!