Sorry, interesting little article, but I don't buy any of it.
A better title would have been, "A List of Some of the Traits That May Correlate with Good Programmers". Would you bet your business on judgements made from this list? I certainly wouldn't.
AFAIK, there's only one way to recognize a good progammer (or a good anything else):
"It'd be pretty hard to get metrics like yours in a hiring situation."
And who here signed up for easy?
In a new hire situation, require examples of work done (on-line or otherwise). Make them code. Give them a conditional mini-project. Get appraisals from former clients, employers, co-workers. etc. etc. etc.
I could think of a hundred better ways to evaluate unknown talent that the suggestions from this article.
I might jump though that for a 150k job and or a fairly long 150+$/h project after the interview but IMO an extended interview process is a bad sign. If you can't tell if someone can code in a 2-3 hour interview you're in really bad shape and I probably want to avoid your team and your code.
Here are some real questions to separate the coder from the poser.
What's the worst hack you have ever done and why did you do it?
What's you least favorite language and why?
What's the hardest problem you have ever worked on? Why was it hard and how did you solve it?
What's the most elegant solution to a problem you have ever devised?
IMO: Trick questions and odd syntax issues are just as useless as asking about their IDE of choice or how to solve a trivial problem.
PS: If you want to validate my credentials after while we nail down my fee that's one thing, but I am not going to give out references early in the process.
"Here are some real questions to separate the coder from the poser."
This is EXACTLY THE OPPOSITE of what I posted and everything I believe.
To repeat - there are NO questions or character traits to accurately assess quality from B.S.
The only differentiator is DEMONSTRATED PERFORMANCE. You need to find a way to determine this. I never suggested long interviews or trick questions (and have never employed them). Whatever it takes to determine DEMONSTRATED PERFORMANCE is necessary and sufficient.
And whoever downmodded my previous posts (and will probably take a hack at this one too) either doesn't get it or hasn't been burned yet.
(Why is it that when I willingly share my hard earned skills and knowledge, I get downmodded, and when I post a smarta$$ remark, I earn 20 unexpected points?)
"I started restricting myself to smartass remarks for that reason."
I understand why someone would do that; it's easy and fun (especially if you only have short breaks).
I implore you to reconsider. My own personal lack of peers to debate and commisserate with drives me to this site. The karma may be the gravy, but the experience is the meat. Sure would be nice to have you as part of it.
I'd say that there's a better single indicator of a good programmer. Many other valuable hobbies besides programming. Things like math, economy, philosophy etc.
Interestingly enough, those along with film, writing, and ping-pong are all hobbies I've got, yet I remain an excellent programmer if I do say so myself. ;)
Programming is not a passion that has to blot out all others.
From the comments: "I didn't even realised [career programmers] existed! I assumed that all computer science/software engineering etc graduates were previously teenage hackers."
A better title would have been, "A List of Some of the Traits That May Correlate with Good Programmers". Would you bet your business on judgements made from this list? I certainly wouldn't.
AFAIK, there's only one way to recognize a good progammer (or a good anything else):
* * * * * * * DEMONSTRATED PERFORMANCE * * * * * * *
Did you do it?
On time and under budget?
Does it work well?
Does it satisfy the stakeholders?
How easily is it extended or maintained?
<add your own evaluators of demonstrated performance>
I also believe that if you can do it once, you can do it again.
Evaluating quality by anything other than demonstrated performance is stupid and unfair to everyone involved.