Note: Google can be replaced by any major Tech company. Interviewing at Apple, Facebook, Microsoft, Twitter, Uber etc. will be a similar experience.
I’m an iOS Engineer and I love what I do. Apple sets the bar very high, and other companies set this bar even higher. So I feel like building iOS apps forces us to focus on the very small details (UI, UX, Architecture, Design Pattern). I have a classic “Computer Science” background, which means that some more than 10 years ago; I studied graph traversals, Dynamic Programming, NP-Complete problems… And like 99% of iOS engineers I didn’t use those in the past decade. (You can argue that iOS is not 10 years old yet, but I didn’t use those CS concepts in my first job either).
You will learn. That’s a guarantee.
I studied, and I studied hard for this interview. Like most people, I bought “Cracking the Coding Interview”. Combined with a lot of Wikipedia/search, you should be good to go.
I feel like it was even more difficult than when I was in college and knew barely anything about algorithms and Computer Science. But I learned… a lot.
First, I rediscovered the pleasure of writing algorithms and code. If you ask me what is my best computer-science memory, it’s without any doubts on my 3rd year of college when I successfully implemented the Traveling Salesman Problem. I’m pretty sure if I looked at the code today I’ll be disgusted by it, but I clearly remember the awesome feeling when I saw this random oriented graph being generated and then an optimal route across all nodes being printed in my terminal.
You may also learn new CS/Engineering things: believe it or not I never used a Heap in my whole life, neither did I study it in college. A few months ago, I needed to implement a Queue with some calls having more priority than the others. I ended up doing that using 2 GCD queues, it works actually quite well, but I didn’t really need 2 different queues: This is Heap Use-Case 101! I started digging and found out that Foundation gives you a Heap implementation for free. Studying for the Google interview made me learn this.
Another example is working with bits, obviously when you need to keep an array of a lot of true/false values, using a Boolean requires probably 8x more space than you really need. Again I discovered that Foundation has CFBitVector, which is just perfect for those problems.
You will also learn about yourself. Having to write code on a whiteboard and speaking out-loud is probably the opposite of what you do 8 hours a day. It requires practice, especially for a non-native English speaker like me. But it was a great exercise and I feel like I learned a lot about myself & gained confidence just by preparing for the interview.
Get a good night of sleep, and coffee or tea in the morning; it’s an exhausting day (even if it finishes around 3:30 pm). At the end of it, I just wanted to go home and rest. But it’s also a great experience, you will be able to meet 6–7 people, and how exciting is that? They all come from a different background, they are all doing different things in the company and they all have a good story to share.
“I heard the interview process is flawed and has nothing to do with iOS” — The Internet
I’m not gonna lie, I wish I could have talked more about iOS programming during my interviews. I’ve been playing with iOS since the very first SDK and working on it full time for 5 years now. I’m not saying I’m the greatest iOS developer in the world, I’m actually far from that, but I feel like I know a thing or two about the platform, the SDK, the constraints and issues of programming for a mobile device. And I wish I could have shared this knowledge during the interviews (as I was applying for an iOS position).
Google is looking for Software Engineers. You may start as an iOS Engineer but who knows where you will end up? There is just so much stuff happening at Google than a lifetime is not enough to tackle every problem they’re trying to solve.
I share the vision that a good engineer is a good engineer no matter what language/platform/framework you ask him to use. A good engineer will be able to quickly pick up a language if needs be. I’m not saying that you will know all the details and neat tricks about the language or the framework, but if you’re a good engineer working with other good engineers that have experience in the language you’re learning, you will be able to ramp up pretty fast. (Of course, there are some levels of difficulty. It’s easier in my opinion to go from Objective-C to Java or Ruby than going from Objective-C to Haskell.)
“I know nothing about Objective-C and iOS SDK but I know about Software Engineering. So as long as you’re applying good engineering practices (code coverage, complexity analysis, separation of concerns…) we’re good. And I didn’t invent anything, it has been proven that those things works over the last 2 or 3 decades.” — My former Manager
My former manager is the kind of guy whom after only a few minutes talking with him, you say to yourself “This guy is way smarter than I am”. And it’s a great feeling to have this kind of person as your boss because you know you’re gonna learn a lot from him. He didn’t know anything about iOS, and yet managing an iOS developers team went smoothly because he was simply a good software engineer.
Back to the interview process: It is designed to find good software engineers and apparently with very little “false positives” but has unfortunately some “false negatives”. It’s definitely not binary, and depends on who you interview with, who’s in your hiring committee etc. I would say not to take it personally, a lot of googlers got the job on the 2nd or even 3rd attempt. It’s just the way the interview process is designed. The good thing is that Google is always trying to improve itself, and improving the interview process is part of it.
Just do it. Apply (or reply to that recruiter that keeps sending you emails). Learn and whatever the outcome is (getting or not an offer, accepting it or not), it’s an incredible experience and I’m glad I did it.