The mythical software engineer
The term or title "Software engineer" has become so commonplace that many of us don't give it a second thought. Are there actual software engineers? Or is this another example of the dilution and devaluation of the title "engineer"?
More years ago than I care to remember, I read about one university's efforts to stamp out the term "software engineer" (I think it was McGill). At that time, I gather such a creature did not exist. What about now? I decided to find out.
Having lived in the environs of the University of Waterloo – one of the world's foremost computer and engineering schools – for over 20 years, my first stop was their website. I couldn't have asked for better.
According to UW's software engineering FAQ page, while all UW computer-related programs stress both hardware and software skills, and may have lots of overlap in terms of career prospects, there are three distinct streams:
Computer Engineering focuses on computer hardware, and is in fact part of the EE faculty.
Computer Science focuses more on algorithms, math, and research, and is part of the math faculty.
Software Engineering focuses on "building and maintaining software systems. It is more software-oriented and has a greater emphasis on large software applications than Computer Engineering. It is more applied than Computer Science, placing greater emphasis on the entire software development process, from idea to final product. It is also more disciplined than Computer Science, applying more systematic practices to help ensure that products are reliable and safe." The program is administered by the faculty of engineering. UW lists specific course differences in Comparing the BSE to the BCS.
Yes Virginia, there is a software engineer.
Of course, that's one university. Not every school will have such a comprehensive offering (CalPoly is another which does).
Software engineer and author Steve McConnell says:
With only about 40% of software developers holding computer science degrees and practically none holding degrees in software engineering, we shouldn’t be surprised to find people confused about the difference between software engineering and computer science.
This puts computer science students into a technological no-man’s land. They are called scientists, but they are performing job functions that are traditionally performed by engineers, without the benefit of engineering training.
I recommend reading the whole chapter: Software Engineering, Not Computer Science
So there you have it. Computer scientist. Computer engineer. Software engineer. They make a mushy Venn diagram to be sure, yet each clearly has their place. But there's still something wrong with this picture. I don't know about you, but I'm fed up that every code jockey who can barely scratch together a web site is suddenly a software engineer. Is it time for engineering schools and associations to voice some opposition, and bring some much needed clarity to bear?
I'd like to think that if actual engineers were involved in more projects, we wouldn't live in a world where it's a given that most websites, applications, apps, and embedded systems are poorly designed, overly buggy, and insecure. And though one would like to imagine that all safety-critical systems, at least, are created under the aegis of engineers and engineering principles, I have my doubts.
- Toyota's killer firmware: Bad design and its consequences
- Medical software standards: Boon & bane
- DO-178C takes safety-critical software development to the next level
- Attaining functional safety: Standards, certification, and the development process
- MISRA minimizes mishaps
- Using MISRA C and C++ for security and reliability. Part I
- Why is everything junk? (Heat-pump edition)
- Brian's Brain (a blog with lots of bad software)
- Software engineering (Wikipedia)