The February 2007 issue of IEEE Computer contained a column titled "Software Development: What Is the Problem?" (pp. 112, 110-111). The column author asserts,
"Writing and maintaining software are not engineering activities. So it's not clear why we call software development software engineering."
The author then brushes aside any further discussion of software development as engineering and proceeds to base an extended argument on the premise that software development is not engineering. I agree with the author that the specific act of giving instructions to the computer doesn't much resemble engineering. However, the fact that one software development activity out of many doesn't resemble engineering does not imply that software development as a whole doesn't resemble engineering. Numerous software development activities have clear counterparts in other engineering disciplines, including:
- Problem definition
- Creation of models to verify the engineer's understanding of the problem
- Feasibility studies to verify viability of design candidates
- Design as a central activity
- Creation of detailed plans for building the product
- Inspections throughout the product-creation effort
- Verification that the as-built product matches the product plans
- Ongoing interplay between the abstract knowledge used by engineers and the practical knowledge gained during construction
- etc.
This list could be much longer, but these items are sufficient to illustrate the point that, even though giving instructions to the computer doesn't have a clear counterpart in other engineering disciplines, many software development activities do have clear counterparts.
Taking a step back from the specific argument, I find it distressing that writers in 2007 are still propagating the myth that software development cannot be treated as engineering. We can certainly debate the value of treating software development as engineering, or software engineering's appropriate areas of applicability; but any debate about whether software development can be treated as engineering ignores the fact that it is being treated as engineering, and deeply so:
- The Computer Society adopted a Code of Ethics for Software Engineers almost 10 years ago.
- The IEEE Computer Society approved the Software Engineering Body of Knowledge 2.0 in 2004, which was adopted as an ISO/IEC Technical Reference 19759:2005.
- Curriculum guidelines and accreditation standards have been established for undergraduate software engineering programs.
- In the United States the official engineering accreditation board, ABET, has accredited 13 undergraduate software engineering programs since 2003, and in Canada 9 such programs have been accredited (by CEAB).
- Numerous provinces in Canada license professional software engineers, and professional engineers are chartered in software in England.
It's appropriate and useful to debate in what circumstances should software development be treated as engineering, or what kinds of software development work better when not treated as engineering, or what portion of software development should be treated as engineering, or how engineers in software should be trained, or what proportion of software developers really need to be software engineers -- but arguing whether it's possible to approach software as an engineering discipline is years out of date.
What do you make of the fact that we can have a software engineering body of knowledge that has been adopted as an international standard (ISO/IEC TR 19759:2005), we have bachelor's degree programs in software engineering, we have accreditation standards for those programs, numerous programs have actually been accredited--yet people are still arguing whether software can be treat as engineering? Is the issue simple ignorance, or is it something deeper?
About Steve McConnell
Steve McConnell is CEO and Chief Software Engineer at Construx Software where he writes books and articles, teaches classes, and oversees Construx’s software development practices. Steve is the author of Software Estimation: Demystifying the Black Art (2006), Code Complete (1993, 2004), Rapid Development (1996), Software Project Survival Guide (1998), and Professional Software Development (2004). His first two books won Software Development magazine's Jolt Excellence award for best programming books of their years.
Steve has worked in the desktop software industry since 1984 and has expertise in rapid development methodologies, project estimation, software construction practices, and third-party contract management. In 1998, readers of Software Development magazine named Steve one of the three most influential people in the software industry along with Bill Gates and Linus Torvalds. Steve was Editor in Chief of IEEE Software magazine from 1998-2002.
Steve is on the Panel of Experts that advises the Software Engineering Body of Knowledge (SWEBOK) project and was Chair of the IEEE Computer Society’s Professional Practices Committee. Steve earned a Bachelor’s degree from Whitman College and a Master’s degree in software engineering from Seattle University. Read more about Steve at www.stevemcconnell.com.