Sorry to get in late on this, but what I've found through interviewing and hiring programmers is that there is a HUGE difference between knowledge and ability. Knowledge helps, but being able to assess ability is key. I realize this was already brought up earlier, but just to throw my opinion in the hat I think the most important skill is creativity (or intuition). What I mean by creativity/intuition is the ability to take a set of tools and produce something new that solves some problem or another. To me that is the very essence of programming, the rest is just syntax. Without this skill programmers tend to cost more than they're worth. And the truly unfortunate thing is that creativitily/intuition is not something that I think can be learned.

On the other side I have worked with one very productive non-creative programmer before, but he had more tenacity than anyone else I've ever met. He listened to input and then worked his tail off until he was successful. He used to say "I make up for my lack of talent with brute force", and he was right. I gave him coding guidelines and he followed them explicitly, producing very usable and readable code. However, this has been the exception rather than the rule.

Of course, there are other key pieces beyond creativity and intuition. A programmer must be disciplined and work well with others, which is often contrary to the very thing that makes a person creative in the first place. But that's why hiring is such a difficult taks, and also why I've seen far more poor placements than I have productive ones.

Oh, and to weigh in on the "overtime" issue, every organization is different and matching a developer to the enviornment is key. But to take the stance that a programmer who doesn't want to work overtime is "not committed" is wrong (I don't think anyone here is making that argument, but I've heard it before). There ARE times people have to go above and beyond normal expectations for whatever reasons, but this should be identified and rewarded by management, not cast off as "excpeted". If the cultre of the company is 40 hour a week and a developer ends up working 60 for a little while, the developer should be rewareded and thanked for the extra contribution, and the process should also be examined to determine what the cause of the extra time is. If it's part of the culture, then that's just what it is. If it's marketing pushing unrealisitc deadlines you should drop them off a cliff (just kidding!), if it's management not managing the programmers correctly, they should be reprimanded.

I work 40 ours a week and am very productive. I'll put in overtime if necessary, but I'll also hold others accountable if this happens (unless it's my fault, in which case I'll hold myself acountable). Fortunatly I'm in a position to do this, whereas many programmers aren't.
_________________________
-Jeff
Rome did not create a great empire by having meetings; they did it by killing all those who opposed them.