I haven't interviewed many programmers, but when I do, I know exactly what I'm looking for in a candidate. I simply want to know the person's passion for developing software. Does the person love being a programmer? If so, then he or she is most likely someone I want to work with.
Passionate programmers enjoy what they do, deeply care about their work, look forward to doing it each day (well, most days), and continue to learn and grow. What more could you ask for? You obviously need to consider whether the person fits the culture. And you'll have to consider a candidate's technical merits and experience, particularly if you need someone that can step in and contribute immediately. But in general, if the person doesn't have passion, all other qualities are pointless. I'd much rather have a less experienced programmer who has passion than an experienced one who doesn't and only considers programming a nine-to-five job.
I've come to prefer hiring this kind of programmer after noticing the success my former employer had in using this approach. For the longest time, the company was very selective in their hiring, opting for people with an interest in software that went above and beyond the position's responsibilities. When I was being interviewed, my old boss told me he was looking for someone "to geek out with us", and I once overheard him telling a recruiter that he'd even consider hiring a "motivated high schooler with an interest". Current knowledge wasn't as important a factor, as he was confident that someone with passion would quickly learn things, plus he was certain that this person would continue to improve and make significant contributions for years to come - in contrast to the person who's simply collecting a paycheck and eventually stagnates. By preferring passionate employees and looking more long-term than short-term, the company built a talented team that continually produces great work.
The Harvard Business Review has an interesting article that agrees with this line of thinking, essentially stating that passion is the number one indicator of job success.
Fortunately, I think it's easy to gauge whether someone's passionate. It just seems to come out in some way or another during an interview. Of course everyone tries to show enthusiasm during an interview, but the truly enthusiastic ones share qualities that are easy to spot. They're curious, opinionated, love to learn, enjoy challenges, like to build things, and are interested in the latest and greatest technologies and practices. After a few minutes with these people, you're having more of a back-and-forth dialogue/exchange of ideas than a standard Q&A interview. Some of the questions I like to ask to try to spark this dialogue include:
- What do you like to do in your spare time?
- Do you have any side projects/pet projects that you work on?
- What feature of the language you're most familiar with do you hate the most or want to change the most?
- What blogs do you read, and what books have you recently read?
- What new technology or practice interests you?
- What languages do you work with outside of the ones you use at your current job? What language are you going to learn next?
I also ask questions that prompt them to give opinions and show what they strongly believe in and are willing to stand up for. These questions range for fairly innocuous ones like whether they prefer setter or constructor dependency injection all the way up to deeper ones where I essentially play devil's advocate and really question certain parts of their experience or why they used a particular approach on a project they worked on.
Sadly, passionate programmers are rarer than I thought. It can be hard to find such a programmer, but taking the time and effort to do so is well worth it.