Many organizations such as government agencies use the title “Software Engineer” for human resource allocation and pay scale reasons. I think that the term “software engineer” is over used so much that there really is no difference in realistic terms between a software developer, a software engineer, and even a programmer. In theory they have different meanings.
Here is what I have understood them to be over the years. Then again I am just pulling this off the top of my head. I say that because I really don’t want to start a big debate on what each title should be. This is just my understanding, flawed as it may be.
A software developer is any one involved in the software development process (i.e. programmers, lead developers, testers, subject matter experts,, analysts, QA, etc). Software developers encompass all the different areas of software development. Even with that the title, software developer is most commonly associated with a programmer/coder and used interchangeably with software engineer.
A software engineer is someone who makes a significant contribution to the design and development of a software product while utilizing engineering practices and participates in a well established methodology of the software development cycle.
Usually someone with at least a B.S. in Computer Science and solid understanding thereof, holds this title. This is someone usually has a strong background in all things C.S. and Programming. A degree is not necessary if you learned the CS theory on your own, but either way you have to know it.
Software engineer is usually title-influenced and many organizations have strong credential requirements for this title. For example, you may be required a minimum of a B.S. in Computer Science. MIS or IT. In certain states you may actually be required to hold a PE license to hold this engineer in your title.
There is still debate on this title.
This is someone who writes code in a computer programming language. A software engineer is always a programmer but not the other way around. A programmer is usually a developer. Many programmers can produce software but may not have the strong background or desire to produce it using best practices. A programmer is anyone who can write code even if all they know is one language and 0 theory.
You can be a horrible programmer and produce software that works well enough.
Does the title even matter?
Where would it matter what your title is? That’s a good question and a relevant one.
It’s not so much that titles matter but the makeup of each title does and here is why.
What type of work requires engineering?
If you are creating and designing software that could cause in injury or death you definitely have to be a software engineer. You better be able to understand engineering principles. Things like heuristics, fault tolerance, safety mechanisms, etc, matter a great deal with real time systems.
If you are building heavy processing systems like the Googles and Amazon’s of the world or writing code that scrapes the metal for optimization in a proprietary system like the Oracles of the world, you should probably also be an engineer. Systems like this have guaranteed performance metrics and could result in heavy financial losses or significant impedance to an organization’s operations.
If you are building hardcore processing software you need to be an engineer. You will need to really dig in to all that C.S. theory to optimize the product.
What type of work does not require an engineer?
If you are just slinging code. That means writing anything from your mom’s sorority web page to front end or even back end code for a business product, being a programmer would suffice, albeit the stronger a programmer the better the product will be. That’s a blanket statement, because there may be significant business products that may have very complex and strict requirements.
In the past decade or so, programmers that take pride in their craft have resorted to calling themselves craftsman, where they make the journey from apprentice to master craftsman. The idea is that software is more of a craft than an engineering discipline.
With all that said, most people who code get thrown in a big interchangeable pile of coders, hackers (as in hackathon not as black hat hacker), programmers, software engineers, software developers. Developer and programmer are a safer route for a title but if truly are an engineer go ahead and own the title “Software Engineer”.
To make things worse, all this causes even more confusion for human resource management and they just follow suit with their understanding of these things. As a result it becomes a self feeding frenzy where the confusion creates even more confusion. So that’s where you start seeing posts for software engineers, developers, and even journeymen and there is no clear distinction.
Once upon a time, software that performed it’s primary function was good enough. It saved time and reduced manual labor and it was good. Fast forward many decades later and that efficiency has led to a heavy reliance on software for many other things. That means that there is a lot more at stake in regards to protecting all that data. Data breaches can be detrimental for many reasons. That means that with any of the above roles software security is a big big deal regardless if you are a software engineer, a software developer, a programmer or whatever else you decide to call yourself.