I was talking to a colleague yesterday, who was saying that one of the other developers was a bad developer. I've spoken to the "bad" developer before, and he has criticised other developers. Thinking about it further, I've never heard a developer say that they were bad, or even average, in the same way that all drivers think they are above average drivers.
So what is it that makes developers say they are above average?
Firstly, the religious wars over choice of language. All C++ developers are superior to VB programmers. All java developers are superior to .NET developers (because .NET just copied all of java's features). Every developer believes that their "favourite" language is better than other developers' favourites.
Secondly, style is often confused with skill. I've heard developers slating other developers over curly brace placement, and choice of prefixes for Hungarian notating. Code commenting is often criticised. Looking at someone else's tricky code, even if commented well, may take several reads before understanding it. Above average developers may dismiss the comments as inadequate after the first read. Also, every developer has their own ideas about whether there are enough, or too many comments.
Thirdly, despite being highly analytical and logical, developers are also creative. Developers like elegant solutions. It has been often observed that many developers are also musicians, myself included. Musicians, along with other performers, are often sensitive, insecure creatures, with easily bruised egos. It can be crushing to hear criticism, so it is avoided - even self-criticism.
Fourthly, bug-tracking tools, for all their benefits, can add competitiveness to a team if managed badly. I have been in teams were developers were insulted for having introduced bugs that appeared in the formal testing stage. Bugs are a fact of life for software development, and everyone creates bugs. The correct handling of a new bug report is to fix it, not to cast blame and keep score.
Fifthly, out-sourcing, down-sizing and redundancies scare people, even at the rumour stage. The game is to stay off the list-of-people-who-are-likely-to-go. This can lead to jostling for position and back-biting.
Finally, there is no accepted way of measuring one developer against another, so each developer can use his own scale and criteria. Although the best developers are easy to spot, the rest are harder to place.
A developer may be very intelligent, constantly reading about patterns, new libraries and techniques, and apply them successfully to problems, but fails to communicate with the rest of the team, and refuses to draw icons. Is she a good developer? Possibly not, although she may think she is.
Conversely, the developer who spends time maintaining the build machine, appeasing the testers and writing the help documentation may be considered lowly, but his contribution is vital. Joel Spolsky has examples of good developers getting negative reviews, which illustrates this point nicely.
Until I thought about it properly, I thought I was an above average developer. Now, I don't know. Probably below average; I know I have a lot to learn. I'm not sure it even matters where I figure in the scale. What is important is that I continually improve, and hang around with people who I can learn from, in all areas of development.