The whole Google (and silicon valley) interview process is a head scratcher to me.

So, I'm 46 years old, kind of old compared to their usual hire. Their recruiter (they contacted me) suggested some books, and about a month's study time to be prepared for the test. Based on what I've googled around the web (which, as others have pointed out, might be mythological), the test questions all seem to come directly from the exercise pages of Knuth.

What's my beef? Knuth's a great work.

Okay, first of all, why do I have to study a month? Isn't that remarkably indicative that this stuff is not used day to day in programming? I don't spend my days programming red-black trees. Not because I'm dull witted, but because 1) there are great libraries available already, and 2) I work in a different problem domain. I do a lot of vision processing, math, physics, and so on. I live with textbooks cracked open on my desk, and several google panes open. As I write this I have Theoretical Mechanics and Pearl's Heuristics on my desk. I'm inventing new ways to filter very noisy data, and so on. Lots of AI, heuristics, etc.

Bellman-Ford algorithm? I know of it. Haven't touched it since grad school. If I need it, or to select the right shortest paths algorithm, first thing I'll do is go to Boost or LEDA. It's more important that your code be right than fast. Only then, if not fast enough, will I roll my own, at which point I'll pull Cormen off the shelf and code it up, and the boost code will serve as my unit test code. It's not a big deal to code an algorithm. And I'm not putting it down, its fascinating, and interesting, to talk about worst case performance, how to distribute it, and all that. But it's not the work I do. Want me to think originally about an algorithm? (coding Prim's is not original, after all)? Fine, ask me about the algorithms I'm working on, and I'll go on for hours. I'll break your brain, and you'll have a good measure of my algorithms work.

So, this is the real crux. I'm supposed to spend a month preparing for this and they won't tell me what job I'm interviewing for. I have to go through possibly more than one phone screen, then go in for at least one round of interviews, have them spend several weeks mulling whether I am worthy, and then, only then, will they try to match me to a position. No match? "thank you for your time, try again in six months". A match? Expect another round of interviews. All of that against the backdrop of very high false negative rate - you can be perfect for them, and still have a very high probability of being rejected. The recruiter kept emphasizing the very large acceptance rate they have. Of course they do. Who but someone passionate about working at Google would subject themselves to all that. I don't care about working at Google, I care about working interesting problems. And they have them, but they have a lot of stuff that I have no interest in doing, either.

I have a crazy idea. I know I'm a very good programmer because I have been thrown against very hard problems, solo usually, and solved them. I've invented new products and taken them to market. My VP reads my writings (I keep lab notebooks) and scours them for IP and patent ideas. (more back patting goes here...). You get the idea. So, I have the crazy idea that the best predictor of on the job performance is ... wait for it.... on the job performance. It's crazy, but it just might work!

Seriously. Give somebody a programming assignment to make sure they can code a for loop. Preferably have it be something you can talk about - how to make the API robust, how would you distribute or scale it, how to make it exception safe, how to report errors, and so on. Give them a chunk of mediocre code and have them give it a code review. Give them a design problem. Probe their knowledge about a subject they claim to know and live. Follow up with references and make sure that what they said they did in their resume was what _they_ did, and not what their teammates did. And, did you enjoy talking with them? There's your interview, and by and large it has worked for me. Don't bother with routing algorithms unless that is the job (I do recognize Google does some routing!)

I've talked to so many high achieving graduates of places like Stanford that couldn't code a for loop, that couldn't make reasonable engineering decisions about how to solve a problem, but could blithely go on with "Oh, I'd do a Hackman-Stein reduction, run that through a Bidderfinch Tickler, invert the Fliberty relations...". Great theoreticians, probably terrible about keeping a start up thriving.

I harp on this because people just aren't that good at whiteboard solutions. I recall a chem professor - he would make some statements, ask a question, and there would be silence. Then he would berate our intelligence. Except the question was something that took a Nobel prize laureate to solve originally. No one can solve this stuff in a few minutes - you are selecting for actors. "Oh, let me see if I can think this through...." and you pretend like you are inventing Prim's algorithm, or binary tree delete, or whatever. All these questions were once original publications in the literature. They are HARD, made easy for us by repetition and familiarity. Any fool can tell you the structure of DNA - discovering that structure was a "bit" harder. You will not be testing my ability to discover DNA by asking me to 'derive' the structure on your whiteboard.

I guess that was too long and rant-y, but I really wonder what people are trying to measure in their interviews, because by and large I walk away feeling that they have no idea about my skills and limits. I get job offers when they should run away, and no offer when I would completely change their business. All based on interviews that seem entirely disconnected from trying to discover how I perform on the job. You want to be my surgeon? Fine, first do a textual interpretation of this passage from Shakespeare...

So long as Google has a large pool of applicants they can afford to interview that way, I guess. I wonder what they give up? I do work at the level of their self driving car, and refuse to even phone interview with them. But, that's fair enough because with my attitude I'm probably not a good fit. They are looking for cogs - do some ad banner work, move over and gmail it for awhile, and so on. Yawn. Everyone knows their hashing and tree balancing. No one has been vetted for being pragmatic over running a project, getting a product out the door (they have so much money they can afford to meander and not ship), turning out high quality code and designs, documenting their work, creating original ideas, and so on.

So, perhaps their interview process is fine for them. But if you are a startup surviving on fumes, don't emulate a company with billions in the coffers and that can afford to meander, and fail to ship products for months. Patting yourself on the back for smarts is fun (I did it above!), but it doesn't ship products. Interview for achievement. Us "old guys" be smart too, even if we did forget our Floyd-Warshall, and thus can't pretend to derive it for you, from scratch, on a whiteboard.