I agree! But what makes a truly good programmer? I have enough experience to know that I fall into that category and am married to one who is even better. How do you recruit the great programmers? What gives them that edge? We’ve come up with a few traits:
Attention to detail: This one is big, and it’s required for non-programmers: DBAs, network admins, testers, etc. If someone’s code, database, etc. looks like a teenager’s room, forget it.
Ability the see the big picture: Seems like the opposite of the above, but absolutely required as well. The programmer has to be able to translate everything he is doing into the real world and relate it to the requirements, and vice versa.
Ability to self-teach quickly: Imperative if you want to keep up or even are just trying to stay in one spot. Good programmers also figure out their best method of self-learning. I’m one of the oddballs that reads the entire manual. Note that this has nothing to do with academic success–someone with an unconventional learning style might be able to translate that into effective self-teaching.
Ability to think in an ordered fashion and translate that: This one is arcane, but again, necessary. The “ordered fashion” may vary significantly. Personally, I think in English, in long, complete sentences (the verbosity of this post is completely in character). I translate that into code. My husband thinks visually and all of his design scratchings are diagrams of things linked together. It’s a completely different approach.
Problem-solving: A skill necessary in almost all technical fields, from medicine to engineering. I think this skill can be taught more easily than some of the others. But you have to have some open-mindedness to find the source of the problem and its solution.
Synthesis: Possibly the most important, hardest to define skill necessary. A great programmer is able to synthesize code from requirements. He can make something that just wasn’t there before. This is the “art” of programming. Mediocre programmers almost never have this skill. I don’t think experience can yield this skill where it was missing, but this one gets a lot better with experience.
Well, that’s my list. I’ve been keeping it informally for years. Most people don’t like to hear about mediocre programmers, and it does seem “elitist” to put myself above them, but my work speaks for itself.