"I'm surprised that with all the discussion on how to program that goes on in this
Wiki, and with BadProgrammer
defined and referenced often, there is no entry here.
Is it too much of a minefield?" -- NathanielEliot
Just take everything said in the pages about BadProgrammer
negate it :-).
Slightly more seriously: being a good programmer is dangerous
one of the dangers is what the XP maxim DoTheSimplestThingThatCouldPossiblyWork
is all about. Because code written by experts is sometimes only readable by
experts, and usually that's a pity. (Do you want to spend the rest of your
life maintaining that code you wrote six years ago, because no one else
can understand the cool algorithms that make it so fast?) So maybe the
whole concept of being a GoodProgrammer
is itself dangerous, and that's why
this page hasn't existed before. Or not, as the case may be.
"I don't think I'd mind maintaining a program I wrote six years ago. However, I am
young, fairly inexperienced, and wholly untrained. Which is why I find the lack of
a page on what a GoodProgrammer
is frustrating, in an amusing way.
Also, wouldn't teaching someone else how to maintain your code qualify as a trait
of a GoodProgrammer
? Or can the ability to produce knowledge so esoteric that it
cannot be transmitted still good?" -- NathanielEliot
. There is no such thing as code that is so good that nobody else can use it. This code is, inherently, bad. This is not to say, however, that complex or arcane code is bad; rather, if one produces particuarly complex or arcane code, one should ensure it is documented sufficiently that others can make use of it. Programming languages are a tool to help programmers understand software; if it were not so, we would write everything in CPU opcodes. Therefore, if one is a GoodProgrammer
, one will by definition produce code (and supplement that code with documentation) that other programmers can understand. Arguably, doing anything less with one's code is neglectful at best and outright rude at worst. Optimally, a GoodProgrammer
can produce self-documenting code (and, in cases where self-documentation is insufficient, supplementary documentation) that will not only accomplish some task in a very good
way, but also allow those who come after to learn from the goodness of the GoodProgrammer
. -- Apoch
Also need HealthyBodyAndMind
Well, now that the page exists, let's give it some flesh. A GoodProgrammer
- Knows his or her limitations.
- Has a broad knowledge of languages, data structures, algorithms, technologies, and so on.
- Loves to learn and loves to teach. Assists with programming all the humans on the team, as well as programming the computer itself?
- Values simplicity, elegance and practicality.
- Measures rather than guesses, wherever possible.
- Pays attention to detail.
- Solves the problem that needs to be solved.
- Is comfortable working with other programmers and talking with management.
But it's not necessarily true that a GoodProgrammer
- Turns out code at enormous speed.
Please add, remove, and reorder as you see fit.
If you want to be a better programmer, read ThePragmaticProgrammer
and do what it says. It's the best book on the nuts and bolts of programming excellence since CodeComplete
I think LazinessImpatienceHubris
sums it up.
See also: AverageProgrammer
.. and the other LikePages