Developer vs. Engineer vs. Programmer

I am someone who does not like the careless overuse of ill-defined terms. I get anal about what a term means and when it should and should not be used.

One of the most pertinent questions people in this field need to answer is “what do you do for a living?” Possible responses to this question: programmer, computer scientist, software developer, software engineer, architect, designer, programmer analyst, software analyst just to name a few. I’ve seen “software design engineer” before.

I am going to focus on my current job description. Distinctions between design and architecture are a subject of a later post.

I can narrow down my job description to three candidates: programmer, software developer, or software engineer. But what do these mean?

First: “programmer”. More and more, this term seems to be derogatory. I could site all sorts of sources, but Wikipedia summarizes it best stating

… the term programmer is sometimes considered an insulting or derogatory oversimplification …

However, I don’t think the term “programmer” is, as the article states, “someone who writes computer software”. In its purest form, programming is removed from any physical medium. You can surely write programs without a computer. You can also surely write programs not intended for a computer to compile and execute. More concretely, there exist hardware programmers, and I don’t consider these people to be in the same category as people in our field, and visa versa.

I view programming as an all-encompassing category for all sorts of forms of programming: software, hardware, social, other.

  • Programming
    • Software
    • Hardware
    • Social
    • Other

I could say that I am a programmer, but, while true, I think this is an over-simplification.

Let’s take “software developer” vs. “software engineer”. First, what is software engineering?

Despite the flurry of vagueness surrounding this term, I think the dictionary provides an open-and-shut definition. First, engineering is the application of science to commerce or industry. Software is the design of a machine abstracted from its physical realization.


(look it up)

Therefore, a software engineer applies computer science (and other relevant science) to create software systems for commerce or industry.

The taxonomy hierarchy now:

  • Programming
    • Software
      • Engineering: programs for industrial/commercial use
      • Science: programs to support computer science research
      • Hobbyist: VB programmer (kidding)
    • Hardware
      • Professional
      • Hobbyist
    • Social
    • Other

I could say that I am a software engineer. Still, I think this is too broad. What I do at work is write code to implement features for the current sprint, as well as write unit tests for my code.

Software engineering involves much more than code and tests: business analysis, requirements, design, implementation, testing, deployment, documentation, maintenance, etc. I work primarily in the implementation phase, and every once in a while, I walk the border between coding and testing.

Calling myself a software engineer, while true, seems heavy-handed. I think if I were involved in multiple phases, like, say do a little bit of high-level design, implementation, and documentation, then I’d say I’m a software engineer.

For instance, on The Project, I was definitely a software engineer because I was all over the development process, from business analysis to maintenance.

This leads me to the term “software developer”. Again, I like to break this down into its individual parts. We already know what software is, or else you shouldn’t read this blog. What is a developer?

During high school, I took a two-semester photography class. My dad was also a professional part-time photographer at the time, so that didn’t hurt me either. One of the phases of creating a print from a negative is to take your exposed paper and place it into developer fluid. The image will slowly but surely appear on the paper. The image develops.


(yeah but you have to be in a darkroom to do this)

By the same token, software development implies more than just writing the code and moving on. First of all, I rarely get it right on the first try. In fact, probably closer to never. Second, even if you do get your code working to specification without any known bugs found in your unit tests, chances are your code will change before it hits deployment.

And this phenomenon is due to any number of causes: customer changed their mind, bugs found in integration test, performance problems, refactoring, and so on. The code that goes into an industrial system develops. And after deployment, your code will likely evolve as releases and maintenance wear on. It is, after all, soft.

This is why I prefer the most specific term for my job description: software developer.

The taxonomy hierarchy now:

  • Programming
    • Software
      • Engineering: programs for industrial/commercial use
        • Business analysis
        • Requirements
        • Design
        • Implementation / development
        • Testing / QA
        • Documentation
        • Deployment
        • Maintenance
      • Science: programs to support computer science research
      • Hobbyist: VB programmer (kidding)
    • Hardware
      • Professional
      • Hobbyist
    • Social
    • Other

I could just as easily defined “software programming” as “software development” like so:

  • Programming
    • Software
      • Development
        • Engineering: programs for industrial/commercial use
          • Business analysis
          • Requirements
          • Design
          • Implementation
          • Testing / QA
          • Documentation
          • Deployment
          • Maintenance
        • Science: programs to support computer science research
        • Hobbyist: VB programmer (kidding)
      • One-time programming / amateur
    • Hardware
      • Professional
      • Hobbyist
    • Social
    • Other

The only change this would make is I’d be more inclined to call myself a software engineer under this system, but because of my earlier take on that term, I prefer the former taxonomy.

2 Responses to “Developer vs. Engineer vs. Programmer”

  1. Excellent, excellent post. I really enjoyed reading this as I’m still not sure what to tell people I am. I usually just say “I own my own business” because I’m a freelancer, but I’ve always preferred software developer.

  2. Great post, this definitely helped me in explaining the different between a software engineer and a software developer.

    This link goes in my bookmark for further reading and referencing. Thank you again for taking the time to explain it to us :)

Leave a Reply