Software Engineering, Part 3: Definition

In this multi-part series, I look at software engineering as a separate discipline from Computer Science. For the software professional’s daily practice, I believe SE is a better degree, and I explain why. I decided to pursue a master’s degree in SE as opposed to CS. Earlier posts are found at:
Part One | Part Two | Part Three | Part Four
| Part Five | Part Six | Part Seven

This is David Lorge Parnas of McMaster University
This is David Lorge Parnas of McMaster University

In the first chapter of The Clean Coder, Robert C. Martin says the following:

Do you know what a Nassi-Schneiderman chart is? If not, why not? Do you know the difference between a Mealy and a Moore state machine? You should. Could you write a quicksort without looking it up? Do you know what the term “Transform Analysis” means? Could you perform a functional decomposition with Data Flow Diagrams? What does the term “Tramp Data” mean? Have you heard the term “Conascence”? What is a Parnas Table?


Parnas Tables are explained here. David Parnas pioneered the idea and they have his name. Parnas is well-known for a number of innovations in software engineering. He did a lot of groundwork defining it. His definition is centered in the balance between computer science theory and software practice. I feel that he offered the best definition of software engineering that I have ever read. It’s found in an IEEE Software magazine article in the November/December 1999 issue called, “Software Engineering Programs Are Not Computer Science Programs.” Listen to what he has to say:

In this article, I take a different view. Rather than treat software engineering as a subfield of computer science, I treat it as an element of the set {Civil Engineering, Mechanical Engineering, Chemical Engineering, Electrical Engineering, …}. This is not simply a game of academic taxonomy, in which we argue about the parentage or ownership of the field; the important issue is the content and style of the education. University programs in engineering are very different from programs in the sciences, mathematics, or liberal arts. These disparities derive from the differences in the career goals and interests of the students. I believe that many of our students, the ones who are destined for careers in software development, would be better served by an engineering style of education than they are by computer science education.

A current important work to the discipline of software engineering is Software Engineering 9 by Ian Sommerville. His definition of software engineering adopts Parnas’ view that the primary perspective we should take on software production is as an engineering discipline:

Software engineering is an engineering discipline that is concerned with all aspects of software production.

As good as those definitions are, they probably don’t help someone who (like me) has an undergraduate degree in Computer Science. For that, a comparison between CS and SE might be helpful, to highlight the distinctions. You’ll find such a comparison in the above-linked Parnas article but there’s a really great Dr. Dobb’s article by Chuck Connell, “Software Engineering Does Not Equal Computer Science,” which features the following chart. Sub-disciplines of SE are shown above the bright red line, and sub-disciplines of CS are shown below.


I hope this starts to give you an idea what Software Engineering is. Ideally, you’ll read all three of the linked materials for a fuller picture:

1. Software Engineering Programs Are Not Computer Science Programs by David Lorge Parnas
2. Chapter 1 of Software Engineering 9 by Ian Sommerville
3. Software Engineering Does Not Equal Computer Science by Chuck Connell.

Next week in part 4 I’m going to approach the topic from a more personal perspective, so watch for that.

5 thoughts on “Software Engineering, Part 3: Definition

  1. Pingback: Unknown

Leave a Reply

Your email address will not be published. Required fields are marked *