The three types of programmers


The other day I was thinking of programmer types. In a way, I think there are three kinds of programmers when looking at a high level:

  1. The smart-and-gets-things-done programmer
  2. The smart programmer
  3. The “just a” programmer

So how do you determine if a programmer goes into one of these categories?

The just a programmer

The just a programmer is just a programmer. He/she might have become one because it pays better than some other jobs. In general, they aren’t very passionate about what they do, or maybe it’s their work environment which takes it all away from them.

In any case, they do their job okay. Not very well, not very poorly, but okay. They could do better, but they won’t bother because they are just programmers. And programmers aren’t rock stars afterall.

This group may include skilled people as well. If you lose your interest, for example because of a bad working environment, you stop caring for what you do and may end up being just a programmer.

What about you? Are you a “just a” programmer? Most likely not, since reading a programming blog usually indicates interest in the field.

The smart programmer

This is a good programmer type. Usually they are talented and have lots of ideas. Their problem is that they are applying their talent wrong: Maybe they spend the workday doing micro-optimizations, reformatting the code or some other thing that gets on their nerves instead of working on fixing bugs, new features and things that are actually useful. Or maybe they just don’t know how to proceed doing the bigger things.

Perhaps it’s a lack of knowledge – Being smart doesn’t necessarily mean experienced in every area of software development. If you feel you are in this category, there are various ways you can improve: Reading books, reading blogs, and simply writing more code.

The tricky part is knowing between smart and smart and gets things done programmers. You may be a C# guru but weak in functional languages, putting you into this category instead of the next if you have to deal with OCaml or such.

If a smart programmer just applied their talent in a different way, they could rise to the next category…

The smart and gets things done programmer

This type of programmer is the ideal one. If you are responsible for hiring, this is the type you want to hire. If you don’t have that much responsibility, this is the kind of programmer you’d want to work with.

I borrowed the name for this type from Joel Spolsky. I don’t know if my definition is similar to his, but I thought the name fits this category quite well anyway.

As the name says, the smart and gets things done programmer is good at what he/she does, and also actually gets stuff done. The main difference to the smart programmer is that the gets things done type knows better when to do what.

You don’t necessarily have to be a programming ninja/guru to belong here. If you’re a junior level programmer, you may still go into this group if you apply your existing skills and talent into things that make sense, instead of, say, writing GOTO’s just because you can.

As I mentioned it can be quite difficult to know who is a smart programmer and who is a smart and gets things done programmer. If you ask a smart programmer to write a function which does something, their answer may be just as good as the gets things done type’s. Depending on the case, however, the gets things done type’s answer may be more concise and perhaps simpler, yet achieves the same result.