Well, define “good programmer”

April 5, 2007

This started off as a blog-comment to this article, but then grew large enough to merit its own post.

These “this makes a good programmer” articles are very simplistic. If you’re writing code that will “live” a long time, and will be worked on by many programmeres long after you have left, then it’s no good ‘having the chops to bang out killer features’ if the code you end up with is unmaintainable. Conversely, if you are working on a codebase for, say, an arcade game then the ability to carefully analyse, document, implement and debug your code will count for nothing if it’s not fast enough.

I like to imagine the difference between John Carmack and the guys who write the Shuttle code for NASA (Nasa article here http://www.fastcompany.com/magazine/06/writestuff.html, read ‘Masters of Doom’ for an overview of Carmack). For Carmack, the ability to implement features that almost nobody else could even think of was/is his trademark. And the ability to implement them faster than anyone else was his golden ticket to fame and fortune. However, Carmack essentially threw away his code at the end of each game and started again. For the NASA guys, the code they write absolutely definitely has to work 100% all of the time, without exception. They spend huge amounts of time, and money, trying to ensure that no bugs slip into the final release. They will chase those bugs down to the detriment of speed, of “sexiness”, of “that’s a cool idea”, of “well I think my way of doing it is better”. They produce the 99.99% bug-free software, the type that Carmack doesn’t aim for. Carmack produces the 99.99% performance software, that the NASA guys don’t aim for.

Despite these completely different approaches, is anyone going to argue that Carmack is not a good programmer? Is anyone going to argue that the NASA guys (and girls) are not good programmers? No, but we can argue that “programmer” as a catch-all term is too imprecise. What makes one “programmer” good in one context does not necessarily make them good in a different context.


2 Responses to “Well, define “good programmer””

  1. Sam said

    well I suck at programming but I want to become good at it…. What should I do????

    This is a nice article though….and I quote…
    “Being the best isnt always the right thing if you do not deliver yourself with a load in your back saying; ‘Im not good enough!!’ ‘Im not worthy!!!’ It pays to know your level in society in life.”

  2. RandomlyGenerated said

    Im going to have to go ahead and say that you are guilty of the same simplicity you were trying to overcome.
    I think the fact that you do not have a clear definition of what it is to be a programmer is part of the problem.
    In my opinion, a programmer is someone who uses a set of ‘tools’ to develop a solution to a ‘problem’. Now I am guilty of simplicity.. But anyway, that is for me, in a nutshell, the definition of a programmer. Part of what makes a ‘good programmer’ is the ability to choose the right ‘tools’ for the job.
    Therefore, you ask the wrong question at the end, because a programmer’s ability and the context within which he is working are not mutually exclusive. The question is, given the context would a ‘good programmer’ change his approach to solving the problem at hand?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: