Programming vs Software Engineering

Programming vs Software Engineering

November 21, 2021·rthomasv3
rthomasv3

Programming is not software engineering.

To be clear, I’m not referring to job titles like Programmer, Developer, or Software Engineer. These could be different jobs, but that’s not always the case. So, instead, I’d like to focus on the actions themselves, how they differ, and how this contributed to the connotation of the different roles.

Programming

So, what is programming then? Programming is the organization of logical steps to achieve a desired result within a software system. You could also argue it involves the design of those logical steps, likely following a set of design principles created to make the software clear and maintainable. While that certainly sounds a lot like what a Programmer or Software Engineer do all day, it’s actually not - it’s just one of the things they typically do in a given day.

For example, how was the “desired result” defined? This likely involved talking with someone familiar with the customer (or the customer themselves) and discussing how they want to use the software.

How will the result be verified? There was probably a lot of time spent making sure the new code is covered by unit tests. Depending on the organization, there may have also been time spent writing other higher level tests to verify the system worked after all of the pieces were put together. Alternatively, there could have been meetings with a test team to go over changes and compare options for testing them.

Has the software been delivered to the customer? All the steps up until now have just been to make sure the computer did what we wanted, but the real goal is to solve problems for people by delivering quality software to them as often as possible.

All of that doesn’t even start to cover the tools, processes, and strategies used by the development team themselves to collaborate and stay in sync.

Software Engineering

Software engineering is programming, plus all of the steps above, and more. In my experience, engineering software usually requires some sort of involvement in all of the pieces that go into building and delivering the software:

  • Defining the goals of the software
  • Collaborating on component and system design
  • Researching and discussing libraries, packages, and systems that could be used
  • Reviewing solutions for data storage and management
  • Actually writing the software
  • Designing algorithms
  • Creating a set of standards the code will follow
  • Maintaining the code to make sure it’s meeting those standards
  • Interviewing candidates and training new hires on how the system works
  • Working on strategies for delivering the software to the customer
  • Providing support to customers when bugs inevitably reach them
  • Creating documentation
  • Learning

That last point is actually the biggest key to software engineering. It starts with learning about small parts of complex things, often by trying to new things and observing the results (debugging). Do this enough times and you’ll be able to predict the result with a reasonable degree of accuracy. This allows you to then use what you’ve learned for practical purposes. So, yeah, it’s just science 101, but this is why some of the best engineers are people who enjoy learning. This is also why it takes a lot of time and experience to get good at it.

And I think this is how some of the negative connotations of Programmer and Developer started. They sound like they’re just writing code - and writing code is just the basics. It’s the start of the journey. The hard part is living with that code, learning from your mistakes, and applying what you’ve learned to design better, more stable, and more maintainable systems.

The thing is, programmers and developers do that too.

Software Engineer vs Programmer vs Developer

There’s probably very little difference between these roles.

There’s some truth to the idea that programming and developing are somewhat less that software engineering, but companies can basically choose whatever job titles they want for that same set of responsibilities. And people can choose whatever title they prefer to describe their own process of making software for people.

At the end of the day, it’s all about making people’s lives better by adding convenience, removing tedious or difficult tasks from their day-to-day lives, and freeing up more of their time to do the things they’re passionate about.

Also making money. That part is pretty nice.