Imran rightly points out that a lot of programmers, who talk well about programming, cannot actually code. Jeff Atwood follows up with his views on it. My experience has been a little different, when I got a bit of experience of hiring.
The programmers knew the syntax, but they did not know why they were something that way. They knew about interface, but they were unable to explain how it was related to polymorphism. They could not explain when they would design an interface. Mind you, my questions were largely programming language independent, they were about the concept. I wanted to know if they knew OOP when they came as C++, Java, Ruby, PHP or any OOP language programmers. Only 1 in 20 candidates knew about the Design Principles, and only 2-3 had heard about them saddled with their misconceptions. This is not only about freshers, even the experienced ones knew about MVC, but could not explain why they should be using it. I think a weak programmer is not the one who cannot code, I think he/she is the one who cannot explain why they use certain code.
A programmer should know why he/she is using something, and more importantly when he/she should not use it. Without this, knowing syntax is just like knowing words, playing the role of a typist. Do not get me wrong. I do not think that coding is not important. I think that only coding is not important. Just that the other things take higher priority. I believe coding is a skill that can be learned, but understanding the concepts requires a specific aptitude which has to be earned.
Another reason is that the answer to such questions start and end with the code. In my opinion any program should start with requirements and end with benefit. This aspect can be overlooked with the FizzBuzz question. Maybe the question can be asked in a different way so that the software engineering knowledge is tested rather than just coding.
I think instead of asking to code as the first thing to do, I would like to ask them understanding about the underlying concepts. If this is through, their knowledge of coding makes sense. That, according to me, is the first step to identify the weak programmers.