A research paper from two psychologists at Cornell offers an interesting insight:
For example, consider the ability to write grammatical English. The skills that enable one to construct a grammatical sentence are the same skills necessary to recognize a grammatical sentence, and thus are the same skills necessary to determine if a grammatical mistake has been made. In short, the same knowledge that underlies the ability to produce correct judgment is also the knowledge that underlies the ability to recognize correct judgment. To lack the former is to be deficient in the latter.
We focus on the metacognitive skills of the incompetent to explain, in part, the fact that people seem to be so imperfect in appraising themselves and their abilities. Perhaps the best illustration of this tendency is the "above-average effect," or the tendency of the average person to believe he or she is above average, a result that defies the logic of descriptive statistics.
According to the data presented in this paper, the least competent people are the ones most likely to erroneously think they are competent:
Across 4 studies, the authors found that participants scoring in the bottom quartile on tests of humor, grammar, and logic grossly overestimated their test performance and ability. Although their test scores put them in the 12th percentile, they estimated themselves to be in the 62nd. Several analyses linked this miscalibration to deficits in metacognitive skill, or the capacity to distinguish accuracy from error. Paradoxically, improving the skills of participants, and thus increasing their metacognitive competence, helped them recognize the limitations of their abilities.
That is a paradox indeed, but our profession is rife with exactly this kind of paradox. It has parallels in several areas of software development:
- Wicked Problems. You can't understand the problem you're trying to solve until you've partially solved it.
- Iterative development. Users can't fully express what they want you to build until you build a version of the software for them to experience.
- Extreme skill disparities. The worst software developers are profoundly bad; the best software developers are absurdly good.
According to this paper, it's extremely likely that the authors of The Daily WTF code snippets remain blissfully unaware of the pain they are inflicting on themselves, and everyone else. As I've said before, our biggest challenge is disseminating best practices to other developers. Making fun of incompetence is amusing, but until these developers' skills are bootstrapped to a moderate level, they're going to keep pounding out more and more WTFs. And that's no laughing matter.