EditHint: merge with UnconsciousIncompetence
The trouble with blind spots is that you can't see them.
There was a study I recall reading about (reference below) that said that on a task that the participants were asked to perform, the top 1/3 generally rated themselves correctly in the top 1/3, the middle 1/3 rated themselves about average, and the bottom 1/3 generally rated themselves in the top 1/3. The conclusion of the study was that the incompetent people were incompetent because they lacked the ability to judge competence.
If you're like me, you find this spooky. I mean, I'm in the top 1/3... I think... But how do I know? Am I a good judge of competence? I think so, but... that proves nothing.
Studies have shown that software developers differ in proficiency by a factor of 10 (or 11, 5, or 28, depending on which specific study you're referring to). But I've known a few programmers (who are the reason I'm not putting my name on these thoughts) who think they're l33t h4x0rz (sp?) because they can hack out buggy, unreadable code at a frightening rate. I have no doubt that they think this 1-10x scale is 100% entirely due to talent and intelligence, and that makes them a 10x, or 9x at least, and of course I would say they're in the bottom 1/3 that thinks they're in the top 1/3.
So, if the 1-10x scale is not completely due to intelligence and talent, then what else is it? As FredBrooks said, there is NoSilverBullet, by which he specifically stated that there is no tool or technique that can increase software development productivity by a factor of 10. So that can't account for the 10x.
Based on my 12+ years in software development, I'd say it's a whole lot of 1-10% items cumulatively compounding to the final 10x. With many more things near 1% than 10%. So are the 1% things worthwhile? Only if you have the fire in your belly, like an athlete going for the gold, one step at a time.
Maybe that's too simplistic. Or maybe it would be worthwhile to try to enumerate these things?
The article referred to above is "Unskilled and Unaware of It: How Difficulties in Recognizing One's Own Incompetence Lead to Inflated Self-Assessments", Justin Kruger and David Dunning, Journal of Personality and Social Psychology, December 1999 Vol. 77, No. 6, 1121-1134. It's online at http://www.apa.org/journals/psp/psp7761121.html.
Then again, there was an older study that found that most people think they are above average at driving, which sounds pretty amusing, except that they further found that people might not be entirely wrong, because they varied in which aspect of driving they thought they were above in. E.g. fast drivers considered themselves above average in skill, slow drivers thought they were above average in safety, etc.
So perhaps this is also true of programmers. Some pride themselves on cranking out code really fast (ignoring the quality of the resulting code). Some pride themselves on the beauty of their code (ignoring how slowly they crank it out and how they never quite meet all of the requirements). Some are proud of the cleverness of their code (ignoring the difficulty of understanding caused by the ArmyOfProgrammers maintenance coders).
When you come right down to it, the total list of all ways in which a programmer might be considered "above average" is pretty long, and it's not clear that there is any single person who falls into the intersection of all those qualities.
And yet everyone might be correct about being above average -- in some sense or another.
The driving analogy is good, but...
Ideally, a professional software developer should be measured by long-term customer satisfaction.
Unfortunately, in reality, customers are so absent that programmers can get by for 5 or 10 years without any more mature philosophy than "I can't believe I get paid to play with my toys."
Beautiful point, which then leads to the observation that customers have been trained by industry (I won't mention Microsoft, since they practically are the software industry) for a quarter century to think that difficult to use software that crashes frequently is normal, and hence we have a customer base that is extremely easily "satisfied".
Therefore, essentially all programmers are also above average by the measure of long-term customer satisfaction!