"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''''''s, and negate it :-). Slightly more seriously: being a good programmer is ''dangerous'', and 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 Avoid ObfuscatedCode. 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 -- anon ---- 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. ---- A ProgrammerStereotype See also: AverageProgrammer, ThreeStarProgrammer, RememberTheFuture, ProgrammersNotebook, FiveCannibalProgrammers .. and the other LikePages linked below