24 Feb 12, 10:23PM
http://techcrunch.com/2011/05/07/why-the...cant-code/
We’ve all lived the nightmare. A new developer shows up at work, and you try to be welcoming, but he1 can’t seem to get up to speed; the questions he asks reveal basic ignorance; and his work, when it finally emerges, is so kludgey that it ultimately must be rewritten from scratch by more competent people. And yet his interviewers—and/or the HR department, if your company has been infested by that bureaucratic parasite—swear that they only hire above-average/A-level/top-1% people.
It’s a big problem, especially now. There’s a boom on. I get harassing emails from recruiters every day. Everyone’s desperate to hire developers…but developers are not fungible. A great coder can easily be 50 times more productive than a mediocre one, while bad ones ultimately have negative productivity. Hiring one is a terrible mistake for any organization; for a startup, it can be a catastrophic company-killer. So how can it happen so often?
Like many of the hangovers that haunt modern software engineering, this is ultimately mostly Microsoft’s fault.2 Back when they were the evil empire where everyone secretly wanted to work, they were famous for their “brain-teaser” interview questions – Why are manhole covers round? – and, of course, they asked new university graduates about computer science theory; “Write me a binary search.”
Everyone wanted to be like Microsoft, even Google, until everyone wanted to be like Google (until recently); and so that interview meme persisted. Check out these two recent posts on the subject of interviewing, courtsey of Hacker News: one from a would-be employee, one from a Google interviewer. A couple of illuminating quotes from the latter: “I’m not even necessarily saying that this is a good metric” and “If it’s any consolation, at least we don’t ask gotcha riddle questions anymore. Those were especially offensive.”
It’s nice to see that Google have almost sort of realized that their recruiting algorithm is problematic. Too bad they haven’t fixed it. See also Jean Hsu’s “How Effective Are Technical Interviews?” The fundamental problem is that the skills required to pass today’s industry-standard software interview are not the skills required to be a good software developer. Oh, there’s some correlation, but it’s like the Oakland Raiders always drafting the fastest runners available, only to discover to their endless dismay that the NFL is not a foot race.
Actually it’s worse than that. At least wide receivers have to run, whereas I can guarantee you, without fear of contradiction, that no software engineer will ever have to write a binary search after they are hired. It’s like choosing a contractor because they know how to forge and cast steel using coal, iron, an oven and a bellows, when they actually need to know a) the address of the nearest Home Depot b) what to do with the steel once they buy it.
Joel Spolsky once correctly explained that you’re generally looking for two things in an employee: Smart and Gets Things Done. (Academia is teeming with people who are the former but not the latter.) First, though, you have to establish something else: Not Completely Inept. You’d be amazed how many totally incompetent people show up for technical interviews. Google’s binary search is presumably intended as their “FizzBuzz” – a low bar you have to hurdle just to get in the door. But a FizzBuzz should take all of five minutes, before the real interview begins.
So what should a real interview consist of? Let me offer a humble proposal: don’t interview anyone who hasn’t accomplished anything. Ever. Certificates and degrees are not accomplishments; I mean real-world projects with real-world users. There is no excuse for software developers who don’t have a site, app, or service they can point to and say, “I did this, all by myself!” in a world where Google App Engine and Amazon Web Services have free service tiers, and it costs all of $25 to register as an Android developer and publish an app on the Android Market.
The old system was based on limited information—all you knew about someone was their resume. But if you only interview people with accomplishments, then you have a much broader base to work from. Get the FizzBuzz out of the way, and then have the interviewee show and tell their code, and explain their design decisions and what they would do differently now. Have them implement a feature or two while you watch, so you can see how they actually work, and how they think while working. That’s what you want from a technical interview, not a measure of its subject’s grasp of some antiquated algorithm or data structure. The world has moved on.