dih-vel-uh-per
- A person or thing that develops or innovates.
en-juh-neer
- A person trained and skilled in the design, construction, and use of engines or machines, or in any of various branches of engineering.
- A person skilled in the design and programming of computer systems
Why are these definitions important? Well, I'm sure you've noticed a number of titles that get thrown around in the world of software - programmer, coder, web dev, software dev, software eng, architect, levels such as I, II, and III, or junior, journeyman, mid, and senior. There's can be a huge amount of grey area between companies and job requirements for all of these titles. Lately the most controversial of all these potential titles is software engineer, with most of the opposing argument coming from other engineering fields such as mechanical engineering, architecture (structural engineers?), network engineers and other highly-skilled and often rigorously-screened fields.
Many engineers in other fields are required to pass exams and obtain specific certifications before they can find proper employment in their field. A number of them are also required to keep their certifications up to date, meaning they need to study and retake the exams after some time - perhaps for the rest of their career.
Software engineers do not have any such requirement, except maybe in specialized or critical areas such as Microsoft Certified Professionals or development of government systems (I don't know the details there, so I can't speak to it for certain). This is a point of frustration for engineers of other fields, and perhaps a flaw of the software engineering field, because there is no true way to test the skills of all software engineers to confirm that they have all the knowledge needed for all of the duties they may face on the job. Many engineers feel that this brings down the weight of the title "Engineer," especially if a particular software engineer or their product has failed.
And while I'm speaking about failure: When an engineered project fails in software development, unless you're building pacemakers or spaceship shuttle systems, there is not a massive impact on lives. We move on, try to learn from our mistakes, and that's it. Not so with other engineering fields - bridges or buildings collapsing looks very bad on your resume.
Now that we have the big debate covered, what's actually the difference between a Software Developer and a Software Engineer? According to Felim O'Donnell of Liberty IT, "a developer takes functional specification and delivers the code required within tight parameters, essentially completing the task in isolation, without understanding or oversight of the project as a whole. On the other hand, an engineer is someone who thinks about the design, goes back to the business with questions and suggestions, and thinks about the impact on the business and the end user. They always ask 'Why?' and, 'Is there a better way to do this?'" Source: Are you a software developer or a software engineer? by Jenny Darmody
I imagine there is some overlap into the other engineering fields with O'Donnell's definition; in my experience engineers tend to be people who want to make an impact in the world and help others. The end goal is to build something that will leave our global communities a little better than before.
With that, I will close with a short statement: Personally I believe most of us have a little bit of "engineer" in us. Those who are curious to learn and improve our skills are constantly asking "why" and "how can I do this better?", and by that definition we all perform some engineering to some degree. We may consider the best language or tool for a particular feature we've been asked to build if we have that freedom, and hopefully we ask qualifying questions when we've been given a large-scale assignment to truly understand the process.
As O'Donnell said: "What makes all the difference is the person's mindset and appetite to learn."
Top comments (11)
I find it hilarious how these 12 week bootcamp grads claim to be "software engineers" lol. When in reality they know 0 about software engineering... I feel bad for the real engineers
Yea, I try not to let them get under my skin. I went to school for five years to be standing where I am today, and I don't even consider myself a software engineer (though I would consider some of what I do on the job to be engineering).
Hi Rachel, thanks for your blog, apart from data structures and algorithms, are there other things I can learn to help me develop an engineering approach to software?
Just curious, thanks.
Just wanted to point out that
Is not true. I know mechanical engineers, electrical engineers, and industrial engineers who do not have a PE or ever taken the FE exam.
The only engineering field that requires you to have taken your FE then eventually get a PE is civil because they tend to go into construction.
Oh, interesting! I'll admit, I am not entirely familiar with breaking into other fields, I was going off what I've heard in different discussion forums and whatnot on the topic. I'll modify my statement, thanks for the correction!
Yeah only reason why I know this is because of my formal engineering degree. Whenever I took multidisciplinary courses and they spoke about becoming an engineer (legally) you must take the FE then PE exam. Honestly, I don't think there is much information out there on who really needs a PE license besides those vaguely written articles.
Anyway, I'm glad I was able to help!
Yo what about DevOps :)
I actually am not familiar with that title! What's the typical day to day for devops?
You described it in Dev and Engineer section.
We (DevOps Engineers) do both. 😃 Bit of coding, bit of infrastructure, mostly all around automating everything to help Devs And Ops make life easier.
I see, that's pretty cool! I googled it and found some more information too - sounds like a really interesting engineering career path!
Interesting!