I believe those who are natural programmers, or maybe people who are just really good at it, are able to understand by talking to someone (Without asking any trick questions) how good a programmer they would be. I don't really try to figure out if they can program or not, if they can't they wouldn't have made it to the interview (and I don't do phone screens.) I'm more interested in their attitude, their bandwidth (how bright they are) and their ability to communicate. Secondarily, I look for their willingness to learn and their willingness to think abstractly and come up with innovative or inventive ideas.

You can learn all this just by talking about a hobby.

I think that people who are trained to be programmers (e.g.: not born programmers who started when they were 12 and might not have even gone to college) don't have the innate ability to recognize this ability in others. Thus they must ask them trick questions or to program, in order to satisfy for themselves that they're good.

This is actually not a test of the candidate, but a revelation of the level of competency of the interviewer.

If I wanted to, I could make %50 of the people you send me "fail" fizz buzz, just by replicating some of the things I've seen from really bad interviewers. Speaking in a heavy accent, and when asked for clarification, just repeating the exact same (indecipherable) words, while getting visibly irritated. Or insisting that they use a language they don't prefer, or failing them for leaving off a semicolon on a line, or for not producing bug free code right off the bat because they were writing on a whiteboard rather than typing at a computer, and the acts are very different.

I've interviewed a fairly large number of people, and the vast majority of people who didn't pass the interview did so because programming wasn't what they really wanted to do, or they weren't passionate about it, or they were just unable to communicate well enough to feel like a good fit.

I used to ask questions much tougher than fizz buzz and I would sit there and watch them struggle and try to help them thru, and at the end of the day, excellent programmers struggle on those things as well, and programmers with no innate ability often did them great because they'd practiced them. Why ask someone to find a loop in a singly linked list when they're never going to do that on the job? You can't ask them to architect a distributed realtime database in an interview, but you can talk to them about it.

Further, I think that companies either treat programming as a form of craftsmanship where they're looking for great artisans to build a fine product, or they treat it as a process where they're looking for minimally competent interchangeable coders. I think it is the latter that tend to ask these questions.

And I think the trained programmers aren't aware that there's a higher level, of craftsmanship.

Its completely arbitrary, but if you asked me to write fizz buzz, maybe I should conclude that, if you're having people of that level of ability interview candidates, that your company is not operating at the high level of ability that I bring to the table, and thus this interview process is likely more arbitrary than anything, and even if I get the job, its not going to be a place I want to work. (Back in the day the problems I got were a lot harder than fizz buzz, so I can do fizz buzz on the spot, I know, but I'm not saying that you should be asking harder problems, I'm saying that this kind of quizzing is a bad sign to me.)

So, when I hear people say that %50 can't pass fizz buzz, I think it reflects more on them than their candidates. I've not seen anywhere near that level of incompetence, and I don't think my resume filter is more stringent (its probably looser, because I won't let HR types who don't know how to program filter anyone out, and I read the resumes myself.)

If this post is down voted to hell, then you also have an answer as to why I didn't give my theories in my earlier comment.