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?