TL;DR: Maybe, maybe not, but it helps if the product is "alive".
Before I explain, I want to go over what other people think. From what I've seen, they generally fall into 3 camps:
- "It's about the process. If you follow good design principles, memorize all the best practices, write quality and maintainable code... stuff like that is what makes you an engineer!"
- "It's about the product. To be a software engineer, you have to produce something meaningful and complex. Think things like bullet trains and nuclear power plants and spaceships and whatnot. That's what engineering's all about!"
- "It's about the law. You guys have it all wrong: the term 'engineer' has to be interpreted through a legal lens. You need a license. If you've got one, you're an engineer. If not, you're not an engineer. Simple as that!"
In my opinion, they all make good points!
The people in the process camp make an honorable argument: to be an engineer, you have to hold yourself to higher standards. You have to do things the right way. You have to be a professional. I like it!
The people in the product camp also make sense. Bullet trains? Nuclear power plants? Space ships? If I was programming those, you bet I'd feel worthy to be called an engineer!
The people in the law camp have some merit as well. Although not the case for every country, there are countries where the title "engineer" is regulated. One example is Canada, which reserves the title "engineer" for those who are licensed.
But I want to move beyond these arguments. In this post, I want to try and tackle this question from a more interesting angle.
Everything comes down to intuition.
When the average Joe thinks about engineering, he's thinking about lively things. Mechanical engineers can show the machines they've built, with all their moving parts. Electrical engineers can point to the electronics you touch and hold every day. Civil engineers can take you on a walk across the bridge they built. Chemical engineers can synthesize and refine a plethora of materials.
But software engineers?
It's inside some server rack in a data center. It's inside a smartphone display. It's inside god knows what. It's a silent process, running within a container. It's there alright... but it doesn't feel alive.
And that's the core of the whole issue: it just doesn't feel intuitive that some guy typing on a computer and producing something that we can't see, hear, smell, touch, or taste should be called an "engineer"...
...and until it does feel intuitive, we're gonna keep asking whether software engineers are really engineers.
So if you work with software and want to call yourself a software engineer, what's your best bet?
My recommendation: work on something that emanates liveliness.
Consider a Roomba. If you program that and call yourself a software engineer, you're in luck. A roomba moves. It makes noises. You can touch it. You can feel it. You can pick it up and look all around it. It's tangible. It's sensible. It's alive...
...and that's what it's all about.
Addendum
This is all just my opinion on the matter. I realize that titles can be a somewhat touchy subject, and I don't mean to demean anyone who takes pride in calling themselves an engineer. In fact, I do too! Nevertheless, I think it's interesting and fun to address controversial questions, even if they may not lead to the answers that I prefer.
Regardless, in practice the distinction between coder, programmer, software developer, and software engineer is not one of huge importance. A quick bit of online research reveals that this is a topic of some relevance, but I can't say that it's popped up too frequently in the real world.
To further this point, as part of my online research, I came across a very insightful article by a software consultant named Hillel Wayne. Wayne interviewed 17 people who switched to software development from more "traditional" engineering disciplines, and asked them point-blank whether they considered "software engineering" to be actual engineering.
The result? 15 out of 17 said yes.