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.


March 1st, 2007 at 5:08 pm
I totally agree with you. Syntax and programming languages are tools like Word could be for at writer. No one would ever grade a writer based on what word-processing tools he masters. What is important is whether a programmer can abstract from code and think beyond syntax.
March 2nd, 2007 at 7:48 am
Yes, thinking beyond syntax is something very important. And that beyond should be about the user and his/her benefits.
March 3rd, 2007 at 12:24 am
[...] the FizzBuzz episode, I think I should write about some questions I like to ask which are not directly related to any [...]
March 7th, 2007 at 6:44 pm
[...] (esta es una palabra que acabo de inventar) de problemas natos. Ejemplo de esto último es este blog donde el comentarista menciona que es increÃble cómo muchos supuestos programadores en realidad [...]
January 6th, 2008 at 11:40 pm
[...] I did some interviews for a company for hiring some programmer positions. The company wanted to hire Java experts, wherein I think lies a problem, but let us get back to it later. I interviewed a couple of people and was surprised to see that they knew Java very well, but not basic programming concepts itself. They knew about hashtables, but were unsure how they would implement one. It was same with a lot of other things and I remembered by post on identifying weak programmers. [...]