Home > habits, programming, software development > Programmer or Developer?

Programmer or Developer?

A comment on a recent post of mine made me think more about the distinction between a Software Programmer and a Software Developer. To me there is a subtle, but important difference. Let me give you my definition:

A Software Programmer is someone who really knows the environment he is programming. He knows everything there is to know about the language, the API and the Framework he’s using. He can do low level optimizations because he knows in detail what the compiler does behind the scenes. He is indeed a Wizard and a Guru of his domain. A Software Programmer usually starts with the implementation (probably because that’s what he is doing best) and work his way outwards.

A Software Developer on the other hand is a specialist at giving the customer (user) what he wants and what he needs. He doesn’t waste time on premature optimizations; he prioritize maintainability over performance, unless the performance is proved to be unacceptable; he has great testing skills, designing skills and communication skills; He is empathic, knows his HCI, and cares more about the user than he cares about his code. He cares so much that he usually becomes an expert himself of the users domains. A Software Developer starts with the interface (probably because that’s what he does best) and work his way inwards.

A person can be both, or more of one or the other. In a team you want both kinds but they are rarely found within the same individual. I, for instance, consider myself a great developer but an intermediate programmer. One simple way to test what type you are is to ask yourself this question: Do I care more for the interface (GUI or Programming Interface) than I do for the implementation? If you think the implementation is unimportant as long as it does what you want, and is reasonably maintainable, then you’re probably a Software Developer. If you find the previous sentence a blasphemy, you could be a Software Programmer. Which one is it?

  1. September 5th, 2007 at 09:35 | #1

    If this is true then I would be a Software Developer… I start with the GUI then work my way to the implementation. But after finishing the GUI, I get really involved with the implementation phase making sure everything will run as expected.

  2. September 5th, 2007 at 11:39 | #2

    I am a software developer.

  3. Phineus M
    September 5th, 2007 at 16:11 | #3

    I don’t get it. What is the purpose of trying to make the distinction in the first place? Does it add any value to the jargon that already exists?

    It seems to me that trying to make a distinction (subtle or not) is a metaphysical exercise that is useful only to other navel-gazers who probably fight other religious wars (should the variable declaration go inside or outside the braces?).

    If a programmer falls down in the woods, has he developed anything? 😉

  4. September 5th, 2007 at 16:43 | #4

    What about software engineer? – a bit of both, with the added *bonus* of worrying about the deployment, environment etc. Realistically, who cares? Like Phineus says, navel gazers may worry more about it than the real grunts. If you are worrying about where you are, then maybe you need more to work on and worry about. In a larger scale project you might worry more about whether or not you are applying some framework in the right way saving other effort or staying with the intent of the original requirements. Whether or not you using Java 5 Generics (or some other ‘tool’) means nothing to the end user. Whether or not the software system is up and usable — performing to their expectations means everything.
    Then again I am reading your post and replying 🙂

  5. September 5th, 2007 at 18:28 | #5

    Nice entry,

    but i wonder why a – in your definition – Software Developer want to start with the GUI? In my opinion he rather would explore and start to ‘build’ the domain model in order to gain deeper inside of the domain s/he’ll create solutions for. Once you got your inital domain model you can visualize it using any type of GUI thats appropriate ( i.e. for getting user feedback that let’s you evolve the model and the solution at all). So it should be the business functionality that holds the value, not the visualization of it, which should be replaceable.

    Greetings

    Mario Gleichmann

  6. bj upton
    September 5th, 2007 at 18:54 | #6

    I will be…which ever one enables me to get a higher salary.

    🙂

    Seriously, this is just a semantic difference. Developer sounds more high level than programmer. Therefore, they probably get paid more.

  7. September 5th, 2007 at 20:43 | #7

    Phineus: Well, the point could be to enrich the language, and not to kill the nuances. For instance, the difference between chance and risk in the following sentence: There is a chance/risk of him not surviving the surgery…. Hm, is this what navel-gazing means? Maybe you have a point after all 🙂

    Randy: I buy into your definition of a software engineer. And your other point as well 🙂

    Mario: Simply because the GUI is the best way in which you can communicate the application with the users, but it’s true that the domain model should be clear from the gui/prototype, or from the test cases. But I agree with you that the business layer should be separate from the gui. That is just common sense.

    bj: As I said, both types are needed, so they should be paid equally. I don’t think you meant semantical though, since that means kind of – well – significant meaning. But I see what you mean, and I also agree – a little 😉 Thanks for the comment.

  8. September 6th, 2007 at 14:21 | #8

    I Myself am a Software Engineer. I don’t fit siloed in either of the two categories you described. I find myself most concerned with the User Interface, however I also find that a good design yields a good implementation.

    I believe myself to be a good designer and pride myself on maintainability but still have the knowledge of “what the compiler does behind the scenes” which helps me during implementation. I find your statement “they are rarely found within the same individual” to be quite odd as I work with many people who have the strengths of both.

    I believe what you described as a Software Developer most often also comes with the strengths of a Software Programmer, although it does not always go the other way around. I know many excellent programmers which lack the skills to develop a good user interface or a good overall system design.

    In the end I think there are three levels not two different roles. I may get a lot of hate for that but I truly believe that’s how it is.

  9. September 6th, 2007 at 20:47 | #9

    I agree with what Phineus said. Everything in this article is just arbitrary and made up, and from my own experience, it doesn’t even ring true. IMO, a much better treatment of this subject can be found here:

    http://software.ericsink.com/No_Programmers.html

  10. November 12th, 2007 at 00:01 | #10

    Well… Here is another term for you to define – ‘Software Engineer’ 🙂

  11. May 23rd, 2008 at 08:40 | #11

    According to your post, I would be a Software Developer-cum-programer…
    Well during my Academic career, I had done few projects with my team where I initally started with the research about the project.. followed by selection of the technology then I start with making of GUI(designing and coding).. and finally go for the back-end(coding and bug fixing).. So that means I am Developer-cum-Programmer..

    • May 23rd, 2008 at 09:42 | #12

      I’m not sure what you mean with “cum” but the work order you outline suggests you are more of a developer than a programmer, although you could be somewhere close to the middle.

  1. September 27th, 2007 at 11:11 | #1
  2. November 9th, 2007 at 13:49 | #2
  3. November 28th, 2007 at 13:53 | #3
  4. July 29th, 2008 at 12:40 | #4