Interview With a Programmer.

by Charles Miller on February 25, 2003

The last interview I did was over the phone, for a job halfway across the country. Now that was stressful. Doing a phone interview makes you realise just how important body-language is, especially that attitude in an interviewer that says ‘OK, you've talked enough now, finish what you were saying so I can ask another question.’ Over the phone, in the absence of such clues, the interview tends towards you talking until you've bored the interviewer to tears, or tailing off into embarrassing silences where both sides try to work out which is due to talk now.

Anyway, I was reading artima.com's article How to Interview a Programmer, and the following leaped out at me. Joshua Bloch and Bruce Eckel had both just suggested getting an interviewee to perform some kind of design or code snippet, which garnered the following responses:

Scott Meyers: I hate anything that asks me to design on the spot. That's asking to demonstrate a skill rarely required on the job in a high-stress environment, where it is difficult for a candidate to accurately prove their abilities. I think it's fundamentally an unfair thing to request of a candidate.

Matt Gerrans: I don't like when I'm asked to write a program that does X on a piece of paper. Don't ask the candidate to write a program on paper. That is a waste of time and sweat. People don't write software on paper, they do it with computers using auto-completion, macros, indexed API documentation, and context-sensitive help. They think about it, refactor it, and even rewrite it. If you want to see a person's work, ask them to write some small module or implement some interface before the interview and bring the code on a notebook PC or on hard copy. Then you can review it and discuss the design, coding style, and decisions that went into it. This will give you a much more realistic and useful assessment of a person's work and style.

import com.aol.*1

I'm not a bad actor. Or at least I have the potential to be not a bad actor. But the thing that kept me out of acting in university (well, aside from the fact my older brother was President of the dramatic society, and I didn't want to be seen as following him) was that I'm very bad at improv. In all the auditions I attended, one of the things that was asked of you involved improvisation, and when you put me on the spot like that, I dry up. I'm creative, but if you point at me and say “Create something! Now!”, chances are I'll not do it very well.

I'm a good programmer, and a pretty good designer. On all other counts, I'm told I interview quite well. That said, if you put me on the spot and say “write this code in the next five minutes”, I'll flounder around, and probably make a pig's breakfast of the whole thing. Burningbird recently had a similar problem: knowledge that would normally come effortlessly abandoned her during the interview.

When I'm presented with a design problem to solve, you won't find me sitting in a chair with a piece of paper. You'll find me wandering aimlessly around the office with a can of coke, or tossing my pen in the air and catching it. You'll see me doodling on a whiteboard. You'll see me wander out the front door with my iPod playing at maximum volume, and walking around the block. When I need to think creatively, I get my best ideas when my feet are moving, not when I'm sitting in front of a computer, or in a meeting being pressured to come up with an answer right now. I guess my approach quite closely resembles that of the Postmodern Programmers2

:

To write this program, we first connected our computer to the Internet, downloaded some music from Napster, and then read our email. (You have to receive email to perform a workday [11]). We received 25 pieces of email of which 16 were advertisements for Internet pornography, administriva, or invitations to invest in Nigerian currency trades. After dealing with this email, we typed ‘calculate prime numbers’ into Google. This found several web sites regarding prime numbers, and some more pornography. After a while, we were interrupted, and so moved on to the prime number web sites.

This may sound like a wasteful way to do things, but I find that the way I work is well suited to my mind, and if I'm allowed the freedom to wander around, go for my walks around the block, and generally look like I'm not working, I get things done much faster in the long-run. I'm reminded of a Dilbert cartoon I can't find a link to, where Dilbert was asked to fill in a timesheet: “So, I should fill in all the time I spend in pointless meetings, but not the time I spend in the shower thinking about circuit design?”

Maybe this leaves me with a certain bias against the “ask the programmer to solve a problem in the interview” approach. Or maybe it's just that the approach is an interviewing technique, not an interviewee technique. The interviewer is looking for someone who fulfils the requirements of the job, not for everyone who fulfils those requirements. If a few people who have the job skills, but not the interview skills, slip through the cracks, so long as somebody else shows up who is qualified, and who can jump through the interviewer's hoops, that's only really a problem for the person doing the slipping.

1 “Me too!”

2 Well, aside from the whole pornography thing. The closest I've come to viewing pr0n at work is when some inconsiderate person on my livejournal friends list has replaced their userpic with something obscene.

[11] throw new DanglingFootnoteException(11);

Previously: Introduce Yourself! Comments and Weblogging

Next: YKYBHTLW...