Software Engineer vs. Computer Programmer

A developer by any other name would smell like coffee.

People who write software for a living go by many names: computer programmer, software developer, software engineer, heck, even sometimes the (derogatory) term code monkey. But what’s the difference? One might say it’s a difference in education, or its just semantics and it’s all the same. If we’re specifically talking software engineer versus computer programmer, I believe there is a world of difference.

The character selection screen of Dead or Alive 5.
I can't think of any fighting games that feature a software engineer and a computer programmer, so I guess this will have to have play out in a blog post instead.

What differentiates a software engineer from a computer programmer is the software engineer’s capacity for critical thinking and the desire to work towards a better solution. To put it bluntly, a computer programmer blindly follows direction, whereas a software engineer takes an active role in the development of the product.

Before you write me off as being a pretentious gate keeper, let me give you a real world example. Let’s say you’re working on an e-commerce website, and your boss said customers are complaining because when they change their shipping speed on the checkout page, the cost of shipping isn’t updating correctly. Your boss wants you to add a button that the user can click to recalculate the shipping cost. Let’s see how our programmer and our software engineer tackle this:

How a Computer Programmer Tackles This Issue

Computer programmer: Okay boss! code code code All done!

Later

Customers: Why did my credit card get charged more? calls customer service What do you mean, I have to click a button when I change my shipping speed? This is dumb, I’m shopping at Amazon from now on!

How a Software Engineer Handles This Issue

Software engineer: Wait, let’s think about this. Why make the user click a button? When they change the value in the drop-down, we can just recalculate it for them automatically. It will take about the same amount of effort to implement but it would mean a better user experience.

Boss: I figured that would be too much work to implement, so I didn’t suggest it! Let’s do that instead.

Software engineer: To take it a step further, how often are they changing their shipping speed? Should we default to a faster speed and save them a click?

Boss: I’m not sure about changing the default quite yet. I’ll run a report to see what shipping speeds most people use, and I’ll also consult with our marketing department. I’ll add a story to the backlog if we want to change it.

Later

Customers: nothing because a good user experience is transparent

The software engineer takes real ownership of the experience and is willing to push back where it makes sense. Of course, this should be done within reason; sometimes things just need to get done, sometimes things should just be “good enough”, and sometimes battles just aren’t worth fighting.

That’s just Wasting Time!

Now, you might be saying the software engineer is just gold plating (adding unnecessarily to the scope) and that the boss wouldn’t ask for something that isn’t needed. I’ve worked at a variety of companies, varying in size and software engineering maturity, and I’ve yet to consistently see finalized requirements come across my desk. In my experience, there needs to be some collaboration to get to the best solution.

Plus, what about trade-offs the boss might not know about? For example, if requirement is to build some feature, a software engineer might realize if they leverage a feature of their platform instead of writing it from scratch, they can get 80% of the requested features in 20% of the time. Wouldn’t that be a trade-off the boss would at least like to weigh?

I’m reminded of the quote that is often attributed to Henry Ford, “If I asked people what they wanted, they would have said faster horses.” Really understanding the problem and coming up with a solution that addresses the core problem – not just the symptoms – is what differentiates a software engineer from a computer programmer.

Back to Blog Posts



You may also like:

NPM Considered Harmless

Package managers have their issues, but you can - and should - use them Read more...

Staying Cool When Firefighting Production Outages

Learn to stay cool when fixing production outages Read more...

Blazor: First Look and Impressions

My impressions after a first look at Blazor and WebAssembly Read more...