Yesterday, I discussed the ways hiring computer programmers is very different from hiring for other sorts of positions. Now let’s look at the interview questions that will help you figure out whether or not your candidate has the inner attributes needed to grow as a developer and face new challenges.
What programming languages do you know?
The goal of this question is not to make sure the programmer knows your programming language. As long as there is no near-term critical deadline, knowing your language doesn’t matter. What matters is that the programmer knows more than one.
Now, chances are, you and the interviewee don’t know the same programming languages. So your followup questions are these—(a) what’s the difference between the programming languages you know; (b) which languages do you prefer and why; and (c) which types of project is each programming language is the best fit for? Answering these questions intelligently requires more than a passing familiarity with the languages. The interviewee needs to have really interacted with the languages enough to have thought about them that much.
What is your favorite programming language and why?
This question overlaps with the previous one, but I wanted to emphasize the general idea: Good programmers care about the tools they use. Describing their favorite tool is like talking about a best friend. You can see them light up with wonder as they describe the cool things their favorite can do. That tells you that your interviewee is excited about programming and has enough experience to have an opinion about it.
One caution: Good computer programmers are very opinionated people. If you find a computer programmer who is not opinionated, that’s usually because the programmer hasn’t taken the time to think about the task. Those types of people tend to be order-takers, not inventors.
In your favorite programming language/environment, what would you change?
Computer programmers are bound by the tools that they use. If you have been using a tool for a long time and your results and effectiveness are limited by your tool, you are going to form strong opinions about the tool. If your results and effectiveness are limited by your own limitations, then you will be less likely to have an opinion on how the tool could be better. Your programmer should have an opinionated view on the limitations are of a favorite tool. A very few programmers view their current tool as perfect. If so, getting an opinionated response about the second-favorite platform and tool can also be helpful. While the response should be coherent, the goal is not to judge the programmer’s opinions, however they may differ from your own. The goal, once again, is to see if the interviewee has strong, informed opinions about the tools. Those who lack strong opinions haven’t pushed sufficiently hard against their tools to know what they really feel like.
What was the most difficult programming problem you faced in the last two years, and how did you solve it?
Many technical interviews include a whiteboarding session, where programmers are asked to solve problems right then and there. The problem with this approach is twofold. First, many excellent programmers require thinking time to solve problems; they aren’t always able to do their best when everyone is staring. Second, this approach oftentimes assumes that their prior experience aligns with exactly what you are hiring them for. But, as I noted yesterday, while we may know why we need the programmers today, we often have no idea what we will be asking them to do in the future.
What this question does is allow programmers to talk about what they have done in the past. It is possible for them to lie about the past. However, in order to recount the problem and solution in sufficient detail, they would have to really understand it. I have found that the people who don’t make good programmers rarely understand, much less are able to describe, the solutions other people put in place. You can then follow up by asking questions about why they chose the solution that they did, what other options they could have taken but didn’t, and whether or not they would make the same choices now as before. You do this because you want evidence that (a) they know how to think about problems and possibilities; (b) they can make technical decisions using the information they have at the time; (c) they can reflect and see how they might have done things better; and (d) they are sufficiently capable communicators to tell you about these issues, decisions, and the reasoning behind them.
What programming activities do you do in your free time?
Most good computer programmers love what they do. In fact, they are usually overflowing with ideas. Therefore, I am pretty skeptical of people who don’t have any programming-related side projects. Sometimes, if an interviewee has a very full life (for example, kids with lots of activities), it is hard to fit side projects in. However, usually they have at least had a side project in the past. Or, at minimum, they have thought about what they would like to do as a side project. A prospective hire who hasn’t at least thought about these things probably lacks the overflowing creativity needed to succeed at programming.
What else do you do in your free time?
One-dimensional programmers tend to not be very good. That is because programmers must always be thinking about other people and how those people will relate to the software systems that they build. If everything that the candidate does in leisure time is computer-related, that candidate may not have the knowledge of people and the world needed to write programs for non-programmers to use. The interviewee may be able to solve technical problems but they might not even be able to see the needs of ordinary people that would need to be solved. Programming is not just typing and thinking, it is connecting—the ability to not just follow instructions, but see what needs to be done and do it.
These are not the only questions you need to ask. Certainly you should ask technical questions as required by the position (some positions are more technical than others). Asking about security is important to everyone. However, the questions suggested above capture important qualities of computer programmers that are difficult to determine in other ways, especially in ways that are difficult for the interview subject to game.
Here’s Part 1: Pro tips for hiring the best computer programmers Jonathan Bartlett: It’s easier when we stop to think about how programming differs from other jobs. Hiring a programmer is different because you are rarely looking for a fixed set of skills. Nearly everything the programmer does is an invention. The thing you are usually hiring the programmer for is not a fixed task but the ability to adapt to whatever is coming up next. For example, twelve years ago, nobody knew the degree to which mobile phones would run our businesses. The idea of hiring mobile developers was unheard of.