In my personal experience, a significant proportion of the people applying for programming positions have been unable to write programs. And as the original articles about FizzBuzz say, not just unable to write big programs, but unable to write even small programs.
I want to make sure I don't waste my time or theirs, so I need a quick, effective filter to allow me to terminate an interview early, assuming they've got that far.
Currently I sit them at a laptop, or allow them to bring their own, and ask them to write a program in the language of their choice to perform a simple task, similar to FizzBuzz. Depending on the position they're applying for I will sometimes be a little more specific about the language, but usually I'm pretty relaxed. If someone can program in any language then they've passed this filter and we can get down to bigger issues such as system design, decoupling, testing, logging, debugging, inter-process communications, security, and more.
I need something that is so simple that it won't faze a nervous, inexperienced applicant.
For information, we've asked some applicants to submit as part of their application a program in Python that will, given a parameter of length n, print all the strings obtained by deleting a single character. Thus their program should print n strings, each of length n-1. One applicant did so, and then when asked in interview about his program he couldn't identify the place the argument was first used. It turned out he'd had someone else write the code for him.
I've also had an applicant refuse to do it, claiming to be too senior to be bothered with such trivialities. He said he was an analyst and system architect/designer, since that's what we were asking for. So I invited him to perform a cost/benefit analysis of a trivial test to decide whether a reported bug actually existed, and he ended up arguing that a test such as FizzBuzz is the right thing to be doing. He then did it. And we hired him.
The FizzBuzz test is not intended to discover if the applicant can program. It's intended purely to identify those who genuinely cannot program. At all. And it's amazingly effective.
Hi Colin, I like your approach. I would also be letting somebody do a programming exercise for an hour or so. With an Internet connection and a editor and runtime of choice. I guess you could even consider to hire a company/service to perform coding tests on applicants for you. That may save you even more time.
> I would also be letting somebody do a
> programming exercise for an hour or so.
Aye, but that comes after the filter. In particular, with FizzBuzz there are loads of follow-up questions you can ask to find out which way the applicant thinks. For example:
* Can you clean the logic flow to avoid duplicating tests?
* What if the tests are actually very expensive?
* Did they combine the mod 3 and mod 5 tests into a mod 15 test?
* What if that's not possible?
* What happens if you unroll the loop?
* When might that be a reasonable thing to do?
Most of these are structural questions that have analogs in live code, and serve as good starting points. They need to be adapted for the different types of work.
Programming exercises are well and good, but if the applicant passes the filter, and can discuss the various issues it raises, a "programming exercise" is really a bit marginal. I'd rather move on to pairing with them on some real code that they'd be likely to be working on.
Currently there's no service I know of that I would trust to run a coding test for me.
In my personal experience, a significant proportion of the people applying for programming positions have been unable to write programs. And as the original articles about FizzBuzz say, not just unable to write big programs, but unable to write even small programs.
I want to make sure I don't waste my time or theirs, so I need a quick, effective filter to allow me to terminate an interview early, assuming they've got that far.
Currently I sit them at a laptop, or allow them to bring their own, and ask them to write a program in the language of their choice to perform a simple task, similar to FizzBuzz. Depending on the position they're applying for I will sometimes be a little more specific about the language, but usually I'm pretty relaxed. If someone can program in any language then they've passed this filter and we can get down to bigger issues such as system design, decoupling, testing, logging, debugging, inter-process communications, security, and more.
I need something that is so simple that it won't faze a nervous, inexperienced applicant.
For information, we've asked some applicants to submit as part of their application a program in Python that will, given a parameter of length n, print all the strings obtained by deleting a single character. Thus their program should print n strings, each of length n-1. One applicant did so, and then when asked in interview about his program he couldn't identify the place the argument was first used. It turned out he'd had someone else write the code for him.
I've also had an applicant refuse to do it, claiming to be too senior to be bothered with such trivialities. He said he was an analyst and system architect/designer, since that's what we were asking for. So I invited him to perform a cost/benefit analysis of a trivial test to decide whether a reported bug actually existed, and he ended up arguing that a test such as FizzBuzz is the right thing to be doing. He then did it. And we hired him.
The FizzBuzz test is not intended to discover if the applicant can program. It's intended purely to identify those who genuinely cannot program. At all. And it's amazingly effective.
What would you suggest?