I've been programming for 24 years (12 professionally). I've worked in startups, BigCo, and Facebook. I've been a jr. dev, lead, E4, E5, E6, EM, and VP. I've worked in the capacity of a PE, SWE, Front-end, Back-end, Data Engineer, and Data Scientist. I've worked with various clients such as: web, android, ios, tv, playstation, mac, and windows. I've been interviewed a dozen times, and have always been given an offer. I've been an interviewer throughout my career, and have conducted interviews at each company.<p>I'm now in a place where I've made my money, and now I'm set to move outside of the Valley. Given that I'll be near Irvine, I thought it might be fun to see what Google is up to. Completely ignoring my history, this is what I'm told I have to prepare for when I come onsite:
- Be ready to talk about complex algorithms like Dijkstra and A*
- Be comfortable with sorting and efficiency (be comfortable knowing when insertion sort, radix sort, quick sort, merge sort, heap sort
- Be aware of discrete math solutions and know probability theory, combinatorics, n choose k, etc..
- Know all data structures and what algorithms tend to go with them
- Know graph algorithms and structures, their representations, and how to traverse them
- Be comfortable with recursion and how to think recursively
- Know OS concepts like processes, threads, concurrency issues, locks, mutexes, semaphores, monitors, etc..<p>So, to join the "best of the best", I have to brush up on all of these concepts (again) enough to answer random questions from random interviewers for 5 hours. Also, I'll need to do it in one of the preferred languages... on a whiteboard... and be syntactically correct. Oh yeah, I'll also need to talk through my thought process the entire time, and explain the tradeoffs, time complexity, space complexity, alternative paths, etc... I'll also need to show a go-getter attitude and not get flustered while the interviewer "pushes" me in various ways. I'll also need to build a rapport with half a dozen different people with various personalities, quirks, and moods. If it involves lunch, I'll need to pay attention to what I eat, how I eat, what I chit chat about, what the temperature is (am I sweating, am I dressed the same), etc.. Depending upon the type of work being performed, I'll need to show good "excitement" for the product, be it ads, games, VR, AR, etc... I'll need to show intelligence, but not be abstract. I'll need to think through problems very quickly, but also be thorough and not make mistakes.<p>Do you have any idea how long it takes to prepare for this? Do you realize how taxing it is on your life? I'm an introvert... this stuff destroys me for weeks. ...and this is from someone who has a 100% success rate, and already knows all of the answers!<p>The sad part in all of this, is that it doesn't actually work. You've made your candidates go through this awful gauntlet, and your people are no better than any other company. You still have great people that leave, bad people that stay, bad solutions to easy problems, features that shouldn't be built, genius developers that can't communicate, teammates that won't stop talking, managers that make your life hell, managers that are amazing, problems that excite people, problems that bore people, etc... There's no difference, and that's why it's tiring.<p>Would you like to know the absolute worst project you could ever work on as a developer? It's one that takes a lot of time, work, thinking, personal interaction, consumes personal time, requires ridiculous scrutiny, needs to be perfect the first time, and wether or not it succeeds or not, it is trashed as soon as you're done with it. That's our interview process. That's what we're making thousands of good people do, every single day.