The three types of programmers

August 9, 2009 – 5:53 pm Tags:

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.

Share this:

RSS feed Subscribe to my RSS feed

About the author

Jani is a 15 year veteran of the software industry. He's currently available for consulting

  1. 19 Responses to “The three types of programmers”

  2. You should add the “aspiring programmer”.

    By CodeJustin on Aug 9, 2009

  3. I’m comfortable with the idea that I’m just a programmer :)

    Actually the expression “programmers aren’t rockstars afterall” made it way more clearer to me! I’m about to use this as an excuse for the times “I’m just programming”.

    By Diogo on Aug 9, 2009

  4. I recognize some colleagues in each of the three stereo types.

    By Harro on Aug 11, 2009

  5. You forgot about one type of programmer. Given your topics, I would include this in the second group, the “smart programmer”.

    There are people (and I have worked with some) that are extremely great capable programmers. However, they’re either too arrogant or too lazy to do anything.

    No one cares if you’re a great programmer if you’re always unmotivated and uninspired to do absolutely anything meaningful.

    I think it’s for that reason that they can’t do anything meaningful. They probably think it’s either a waste of their time or they would rather do something that’s bigger/better…but in the end, that just leads to them not doing anything. At all.

    Obviously, not a fun person to “work” with :P

    By Hany Rashwan on Aug 12, 2009

  6. I’ll be egoistic and put myself in the smart programmer group :] My main problem is that when I write a part of the app, I stop and start thinking about how could be this done in a better way. And then I rewrite it. Or not. This ain’t so bad on my own little pet projects, but at work, where deadlines are above my head… Oh, well :)

    Hopefully, in a year or two, I’ll be putting myself in the third group.

    Oh, and if I ever feel I’m going to become `just a programmer`, think I’ll look for another job.

    ~Robert;

    By Robert on Aug 12, 2009

  7. I think there’s more than just three types of programmers. Don’t forget you also have programmers that not only get stuff done but mentor the other programmers they work with so that those programmers can improve their understanding and also work more efficiently.

    @Hany I’ve worked with smart but arrogant programmers where it’s either their way or the highway. That’s a person who’s not fun to work with. They’re also a detriment to whatever project you’re working on. When they do things their way and only their way and close the project to any other ideas it can bring a project down.

    By Jamie a.k.a DigitalBishop on Aug 13, 2009

  8. Nice post, programmers at my work fall in all 3. My bias opinion is I fall in the smart and smart and get things done, and I think a lot of people are like this.

    Often the more passionate you become with the art of programming, the more blind sighted you are to the practical business issues at hand. So it’s a balance game that most programmers deal with everyday.

    For example, as I dwelve more into ORM solutions, custom versus off the shelf open source, I find myself really interested in the pay off when it comes to performance and cost. It does have huge implications on the business side, but I lose sight at times when I spend time refactoring code instead of inquiring managers about the longer term plan and how to align the code with it.

    By andre on Aug 14, 2009

  9. Don’t forget, there is at least a 4th type: The incompetent programmer, bungling along, faster than a turtle, able to make small tweaks to code other people wrote, and even additions, if the path forward is completely straighforward, but gets hopelessly lost if an algorithm is even slightly complicated, spends weeks stuck on fairly simple bugs, requires constant hand holding, or intervention by better programmers to avert catastrophe, etc, despite years of “experience” for whith there is no appreciable codebase in evidence. May you never meet one.

    Steve Yegge (I think) came up with another type: “Done and gets things smart”
    Yeah, here it is:
    http://steve-yegge.blogspot.com/2008/06/done-and-gets-things-smart.html

    By anonymous on Aug 14, 2009

  10. As somebody who’s responsible for hiring programmers, I categorize people into two camps, they’re either a Coder or a Developer.

    A Coder will simply code, they’re production line monkey’s, will follow a plan without having a full understanding or appreciation of the problem they’re trying to solve.

    A developer on the other hand, will produce quality code, ensure they have a full understanding of a problem, will question plans and ensure they meet the requirements to address the problem they’re trying to solve.

    By K on Aug 14, 2009

  11. The link to Steve Yegge’s post by the anonymous commenter is great stuff. (http://steve-yegge.blogspot.com/2008/06/done-and-gets-things-smart.html).. Too bad Steve typically writes awfully long and rambling posts =)

    K, nice idea with the coder/developer grouping, I think that might be useful for some things

    By Jani Hartikainen on Aug 15, 2009

  12. I like K’s approach, at first I thought it was too simplistic, but really that’s it right there.

    Looking around at programmers I’ve known it’s generally like that.

    By andre on Aug 15, 2009

  13. Yes Jani you are right .
    Great articles . Keep going .
    Good Luck .

    By Hari K T on Aug 24, 2009

  14. Nice and real world separation among the programmers. Keep writing :)

    By Nurul Ferdous on Aug 24, 2009

  15. Life is much more complicated than your three buckets.

    By ben on Mar 24, 2012

  1. 5 Trackback(s)

  2. Aug 11, 2009: links for 2009-08-11 « pabloidz
  3. Aug 11, 2009: 3 типа программистов Просто GeeK - проектирование, разработка, архитектура, кодирование и тестирование программного обеспечения
  4. Aug 13, 2009: Jani Hartikainen’s Blog: The three types of programmers | Webs Developer
  5. Aug 14, 2009: Jani Hartikainen’s Blog: The three types of programmers | PHP
  6. Aug 15, 2009: Nio’s Weblog » 三种类型的程序员

Post a Comment

You can use some HTML (a, em, strong, etc.). If you want to post code, use <pre lang="PHP">code here</pre> (you can replace PHP with the language you are posting)