I've been meaning to mention this for a few weeks but hadn't found the time or energy; however, now that I'm settled in my new, awesome, job I'd like to take a minute to say that the people I spoke with while interviewing with Google were rude, arrogant, condescending, and not nearly as clever as they thought themselves to be. I wasn't offered a position with them, but after doing several phone interviews I wasn't at all interested in working with the company.
The people I spoke with appeared not to have even read my resume. I got sick of explaining to them what programming languages I know, what technologies I've used, and what kinds of projects I've worked on. That's what resumes are for. The questions they asked were designed for entry-level employees and rarely captured any relevant information about my work experience and education.
Despite the direct applicability of my PhD research to the problems Google professes to be interested in, the interviewers seemed incapable of compehending my work and were uninterested in discussing it or hearing about its importance. Instead they focused almost exclusively on first-year computer science algorithm questions about sorting arrays and writing for-loops. I suppose they're eager to hire people with decent programming skills, but those people are a dime a dozen and I wasn't interested in that sort of job.
When I questioned the interviewers about their approach and tried to explain how my research could fit into the company vision in a way that wasn't really being captured by their freshman CS questions I was rebuffed. Each interviewer mock-patiently explained how important their questions were and told me Google hires only "the best of the best". Of what, code monkeys?
In any event, after my experience I don't think I'd ever want to work for Google and I will heartily denigrate the company to anyone I know who considers applying there. A company that wants to attract the best and brightest should find a way to treat their applicants as individuals, and should tailor their interview regimen towards discovering talent and intelligence, not just textbook coding ability. Unless, I suppose, that's all Google wants.









I had the same experience with a company in the Seattle area filled with arrogant rich ex-Microsofties. They threw a problem at me that would have made perfect sense, I suppose, for a fresh graduate with no paid experience, and I suppose that it might represent some sort of test for code monkey brilliance, but if this is the level of person that you are hiring for an experienced position, you are going to be disappointed. It was sufficiently removed from what a software engineer ACTUALLY does that I think it would fail to survive the Duke Power Company intelligence test challenge struck down as racially discriminatory, because it wasn't provably directly relevant to the job. I notice that a year later, this arrogant bunch no longer existed as a company.
My workgroup at Cisco routinely asks such questions in one section of the interview process. While we are looking for people significantly above code-monkey level, we do require the ability to code and code well. It's a necessary but not sufficient condition for being hired. You'd be amazed at how many people come in with strong-looking resumes that imply a very sophisticated understanding of software engineering, yet *cannot* write the most basic of code.
Putting the point another way, it doesn't matter how applicable your doctoral research is to the problems we have to face if you can't code your way out of a wet paper bag. If you're a strong coder, disposing of a couple of basic coding questions shouldn't take more than ten or fifteen minutes at most and the interview can then move on to a higher level.
A candidate who refuses to work a simple coding problem in an interview because they consider it 'beneath them' has revealed something important (and not flattering) about their attitude. Will they be equally difficult if they're asked to work on a project they consider beneath them once they're hired?
That said, a good interview goes well beyond this sort of question, and it sounds like the Google people either didn't go beyond that level or didn't do a good job explaining why they were asking the basic questions. And there's really no excuse for not reading the candidate's resume, and getting asked the same question multiple times by different interviewers is a sign of poor coordination.
KH: The problems definitely weren't hard, and I was happy to answer them, but the interviewers were following a script and didn't themselves really seem to understand the essence of the questions they were asking. Anyway, I get the idea, but it's still probably not the type of job I'm interested in. I suppose I do consider the questions "beneath" me, but I guess I don't really feel that reflects poorly on me. I don't know... it's like being asked to take a spelling test or algebra. Sure, important skills for any job, but I would find such tests "beneath" me as well.
It seems to me that there are two kinds of software engineers: those who like to program and just happen to solve problems, and those who like to solve problems and just happen to do it by programming. I'm the latter.
If you'd encountered a large number of candidates who could not spell, you'd be pretty sympathetic to making sure that anybody you hired *could* spell. (Assuming that spelling was a requirement for success at the job in question.) Ditto for algebra.
As I said, I've seen enough people who can't code well applying for jobs that require coding skills that I want some explicit verification that the candidate can sit down and write a working program. (I'm disturbed by the number of such people who already work at Cisco in other parts of the company. I've interviewed internal candidates that I desperately wanted to *fire* after seeing their coding non-skills.) It's annoying that competent people are forced to demonstrate basic skills because of the presence of incompetent people in the hiring pool, but that's life.
It's also worth noting that interviewing is itself a skill that needs to be learned. When an organization goes through extremely rapid growth (like Google has), it often finds itself having relatively recent hires do interviews. Those newer hires often haven't had time to internalize the reasons behind the interview techniques deployed by the companies, and as a result fall back on asking standard questions without understanding why. You may have encountered a bit of that as well.
I'm the kind of software engineer who likes tracking down and fixing bugs. The psychological high I get when I finally *understand* why some misbehaving system is doing whatever it's doing is the best part of the job. That could be viewed as programming or as problem solving depending on point of view.
I'll back up what Kyle says. When I interview programmers, I give a really trivial programming test and less than half of the "experienced programmers" pass it. I'm talking a test that you should consider trivial after your third-semester programming class. I've had people with Masters in CS who couldn't even get started on it.
Now either, these people panic in interviews, in which case we don't need them in a high-stress company like ours, or they are just grossly incompetent, in which case ...
You have to do sanity checks or half the people you hire are going to be dead weight in the company.
So, what was your research? My company is hiring...
I've noticed that a number of people here have defended the pop quiz approach in interviewing, on the grounds that large numbers of people that they hire can't code. Just because someone may not respond with the most elegant solution in an interview doesn't mean that they can't code.
I've led (and coded) two medium sized applications; one was about 150,000 lines of C, the other was about 200,000 lines of C. These projects were shipped products, very reliable, and developed quite quickly. But because I could not come up with a solution in an interview to a "reverse a doubly linked list" problem, I wasn't qualified for the job. The ability to get a real product designed, coded, and working is not the same as this sort of problem.
To me, the ultimate test of where these interviewing approaches take you is Microsoft: a company that produces insecure and unreliable software.
You don't need to come up with the most elegant possible solution to pass the coding skills test. But I've seen people with advanced degrees in computer science demonstrate that they don't understand even the basics of how pointers work as a result of these coding questions. That's not 'inelegant', that's 'unable'.
When I'm interviewing a candidate, I don't necessarily care that they get the ideal solution. I'm interested in their overall approach to the problem. How do they break it down? Do they work out an algorithm and then implement, or dive right in to writing code? Do they use pseudo-code? Do they think about potential error conditions and corner cases? Etc.
Our hiring approach in my Cisco group led to a group of 60 software engineers supporting a product with over a half-million installed units in the field, and a typical open customer-found bug level in the single digits. I think those are pretty good results.
All this conversation about "good programmers" reminds me of Jaron Lanier's Gordian software perspective. It would be nice if programming tools weren't so difficult to use and if small mistakes led to correspondingly small problems, instead of catastrophic failure.
"You don't need to come up with the most elegant possible solution to pass the coding skills test. But I've seen people with advanced degrees in computer science demonstrate that they don't understand even the basics of how pointers work as a result of these coding questions. That's not 'inelegant', that's 'unable'."
That's pretty scary. Admittedly, I'm part of a generation that learned to program first in assembler language, and then in C, so I can't imagine how anyone could be that ignorant, but I suppose a generation that grew up programming in C++ might be utterly lost at the lowest levels.
I think the current set of college grads did most of their programming in Java and C#, actually. Even C++ is 'old-fashioned' to them. The extra distance from the hardware makes it much harder to get a solid grasp of system internals, which may be OK if you're an application programmer but is a serious flaw in an embedded systems engineer.
It's like they view programming as a car, with a gas pedal and a brake, but are utterly lost at the thought of opening the hood and tinkering with the engine. In fact, they're a bit vague as to whether the engine is in the front or the back.
Michael and group:
As an experienced American citizen programmer with a Ph.D., I hope that you recognize that the real purpose of these "tests" is to discriminate on the basis of age and national origin - specifically to discriminate against older American citizens in favor of "fresh (inexpensive) young blood" from places like India and Communist China. Why?? So that the corporate owners reap higher profit margins.
All available data indicates that a young person does not stay young for a substantial period. While age discrimination is great for young people, to paraphrase a great 1992 article by Richard F. Tax, "today's young person is tomorrow's victim." Please see http://www.findarticles.com/p/articles/mi_m0EKF/is_30_46/ai_63801740 for more details.
BTW, now I'm now doing physically demanding seasonal work in a winery. My salary is less in inflation - adjusted dollars than what I earned in 1969 retrieving shopping carts and cleaning urinals before starting any college. That Gemco job had benefits, too! IMO, the winery job is an incredible waste of my training, experience, and innate gifts. However, I'm glad to have a job. I know of programmers that have died or become disabled as a consequence of the controversial H-1B visa program. Please contact me for details.
Sen. Dick Mountjoy, cited elsewhere in your website, is running for U.S. Senator in California against incumbent Diane Feinstein, who produces sound bites that she suggest that she cares about U.S. high tech workers that are being callously discarded in favor of pliant imported workers. In reality, Diane is in the pocket of the same corporate interests that have purchased the votes of most of our nation's leaders. See her "D+" grades regarding these special work visas at ">http://grades.betterimmigration.com/compare.php3?District=CA&Category=5&Status=Career&VIPID=46
I believe that forewarned is forearmed.