On Interviewing Programmers
How do you recognize talented software developers in a 30 minute interview? There's a roundtable article on this topic at Artima Developer with some good ideas from a group of well known developers:
- Explore an area of expertise
- Have them critique something
- Ask them to solve a problem (but not a puzzle)
- Look at their code
- Find out what books they read
- Ask about a people problem
- Bring them on for a trial basis
Joel Spolsky has an opinion or two on interviewing developers, which he summarizes as Smart/Gets Things Done:
- Question about recent project
- An Impossible Question
- Write some C Functions
- Are you satisfied with that code?
- Design Question
- The Challenge
- Do you have any questions?
I definitely don't agree with a few of the things Joel asks here – particularly the low-level C functions. That may have been appropriate for the Excel developers Joel was hiring in 1997, but not these days. I'm also not a huge fan of those abstract impossible questions, eg, "how many optometrists are there in Seattle?", but I suppose that's a matter of taste. If you absolutely must, at least ask an impossible question that has some relevance to a problem your very real customers might encounter. I just can't muster any enthusiasm for completely random arbitrary problems in the face of so many actual problems.
Joel recently posted an update questioning the commonly held belief that "we're only hiring the top 0.5%":
It's pretty clear to me that just because you're hiring the top 0.5% of all applicants for a job, doesn't mean you're hiring the top 0.5% of all software developers. You could be hiring from the top 10% or the top 50% or the top 99% and it would still look, to you, like you're rejecting 199 for every 1 that you hire.
By the way, it's because of this phenomenon – the fact that many of the great people are never on the job market – that we are so aggressive about hiring summer interns. This may be the last time these kids ever show up on the open market. In fact we hunt down the smart CS students and individually beg them to apply for an internship with us, because if you wait around to see who sends you a resume, you're already missing out.
I concur. I've worked with a few interns who were amazing developers. It's a bit like playing the slots, but when you hit the jackpot, you win big. If your company isn't taking advantage of intern programs, start immediately.
Chris Sells also has a mini-blog of sorts entirely dedicated to interview questions and interview articles; I highly recommend it. I'm glad to hear that Microsoft doesn't ask those stupid puzzle questions any more. Who are they trying to hire, Will Shortz?
I have my own theory about the ideal way to interview developers: have the candidate give a 20 minute presentation to your team on their area of expertise. I think this is a far better indicator of success than a traditional interview, because you'll quickly ascertain..
- Is this person passionate about what they are doing?
- Can they communicate effectively to a small group?
- Do they have a good handle on their area of expertise?
- Would your team enjoy working with this person?
Jobs may come and go, but it's the people I've worked with that I always remember.