Yesterday I had my (hopefully first rather than last) technical interview with Google UK.Short story: That stuff is fun! Longer story follows.
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.
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!
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.
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.
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.
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.
- Interview like an ace: Helpful tips (jhucareercenter.wordpress.com)
- Further clarification of an IE7 Memory Leak (stackoverflow.com)
- Google Wallet Coming to 10 More Sprint Android Phones in 2012 (gottabemobile.com)
- Image Recursion (e-clecticism.blogspot.com)
- Appending Title to Google Event Tracking Code (stackoverflow.com)
- Semantic Tech Conference quick report (zemanta.com)
Learned something new?
Read more Software Engineering Lessons from Production
I write articles with real insight into the career and skills of a modern software engineer. "Raw and honest from the heart!" as one reader described them. Fueled by lessons learned over 20 years of building production code for side-projects, small businesses, and hyper growth startups. Both successful and not.
Subscribe below 👇
Software Engineering Lessons from Production
Join Swizec's Newsletter and get insightful emails 💌 on mindsets, tactics, and technical skills for your career. Real lessons from building production software. No bullshit.
"Man, love your simple writing! Yours is the only newsletter I open and only blog that I give a fuck to read & scroll till the end. And wow always take away lessons with me. Inspiring! And very relatable. 👌"
Senior Mindset Book
Get promoted, earn a bigger salary, work for top companiesLearn more
Have a burning question that you think I can answer? Hit me up on twitter and I'll do my best.
Who am I and who do I help? I'm Swizec Teller and I turn coders into engineers with "Raw and honest from the heart!" writing. No bullshit. Real insights into the career and skills of a modern software engineer.
Want to become a true senior engineer? Take ownership, have autonomy, and be a force multiplier on your team. The Senior Engineer Mindset ebook can help 👉 swizec.com/senior-mindset. These are the shifts in mindset that unlocked my career.
Curious about Serverless and the modern backend? Check out Serverless Handbook, for frontend engineers 👉 ServerlessHandbook.dev
Want to Stop copy pasting D3 examples and create data visualizations of your own? Learn how to build scalable dataviz React components your whole team can understand with React for Data Visualization
Did someone amazing share this letter with you? Wonderful! You can sign up for my weekly letters for software engineers on their path to greatness, here: swizec.com/blog
By the way, just in case no one has told you it yet today: I love and appreciate you for who you are ❤️