When you hear that someone’s a good programmer, what do you think that means?

  • They write lots of code.
  • They write good code (e.g. clear logic , good error checking, etc.)
  • They write difficult code, that’s difficult to get right or debug when it goes wrong.
  • They write innovative code, representing new algorithms or techniques.

All of the above, you say? Sorry, you don’t get all of the above. An average programmer can do two of these things, but not at the same time. That means nearly half can’t even do that well. A pretty good programmer can do three, two at a time. A very good programmer can do all four, perhaps even three at a time. There are programmers who can do all four at once, but they’re like people who can juggle eight balls at once – you’ll probably never meet one.

My point here is not to say programmers suck, or that one combination of abilities is better than another. The real point is that programmers can be good in different ways, even if none of them are perfect, and if you want to get the most from a group of programmers it can really help to recognize these differences. Programmers with one set of strengths love to dump all over programmers with a different set, but specialization is the cornerstone of our profession (if not of the entire economy that supports it) and specialization cuts across styles as well as technical areas. If you can get your specialists to complement and reinforce one another, instead of undermining and alienating one another, you can do great things that no band of generalists could match. Don’t celebrate diversity for its own stupid sake; this ain’t no hippie commune. Exploit diversity to get things done. It happens to be true that people are happier when they’re working to their strengths instead of conforming to some arbitrary “jack of all trades and master of none” standard, but that’s just icing on the cake. Being successful makes people happy too.