Software Engineering Programs are Not Computer Science Programs




  1. As the title of this article suggests, Parnas believes that computer science and software engineering are very different disciplines. Elaborate on the argument that Parnas attempts to make. Why are computer science and software engineering different? More generally, how is science and engineering fundamentally different?


Richard Geary

Parnas believes that Computer Science and Software Engineering differ in much the same way as do Electrical Engineering and Physics. The goal of Computer Sceince, according to Parnas, is to learn and to extend the science. SE on the other hand aims to use the science and technology already available to create products and tools for use. SE programs should be rigid, while CS programs should allow for specialization. Generally, Engineering should be concerned with applying what we already know to create products, while Science is more theoretical.


Parans is trying to state within the paper that computer scientists are different from software enginerrs by what these people do in the field today. He feels that computer science is more theory than anything and that engineering is the hands on approach to creating products that we use everyday.

Chris Howell


Brenda Gruber

Parnas believes that Computer Science and Software Engineering are different disciplines based on his fundament arguement that Computer Scientists learn science and how to extend the field of science while Software Engineers learn the science and how to apply it. Essentially computer science produces scientists and software engineering produces engineers.

Parnas backs this claim by explaining the many differences in computer science and software engineering. For example, the information which they are need to learn is different. Computer Scientists learn "what is true, how to confirm or refute models of the world and how to extend what is true in their field." They must be aware of the most recent research in their area (a narrow spectrum of knowledge).

Software Engineers must learn "what is true and useful in their chosen specialty, how to apply that body of knowledge, and how to apply a broader area of knowledge necessary to build complete products, and the design and analysis discipline." The must be aware of only the technology that is already reliable and effective (past the research stage).


  • Parnas was potentially writing about you in the following sentence: "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 education than they are by a computer science education." Do you agree or disagree with this assertion?


Richard Geary

I have to say I agree with Parnas, to a point. For someone who definitely knows the career path they wish to take (that being SE) maybe a degree focused more on application of the science would better prepare a person for the workforce. However, there are students such as myself who are undecided between continued education and the workforce. What choice the correct choice for someone undecided? I would think it would be harder to get into grad school with purely an engineering degree, but with a CS degree, a student would be introduced to enough application courses to be able to perform well as a software engineer.


I agree with Parnas. With an engineering style degree, we would have more knowledge of different systems and be able to fill any positions that are offered to us. With a computer science education, we are taking theoretical classes that do nothing for us. I do understand that we must know the theorectical portions of computers and programming, but let that be an optional class. I feel we would be better off programming more, so that we have more to show employers than just telling them theorectical classes that we have taken.
Chris Howell

Why do you feel that theoretical courses "do nothing for you?" Let me ask you a very general question by way of an example. Suppose that there are two people; one person understands the theory behind programming languages (let's omit a specific definition of what this is, for the moment) and only knows one or two programming languages. Next, assume that the other person knows a large number of programming languages (C, C++, Java, Eiffel, Smalltalk, Visual Basic, you name it and she knows it!). Which person will be better equipped to learn a new programming language? Which person will be better able to solve problems in this programming language? Greg


Brenda Gruber

If we look only at Allegheny graduates, I would have to disagree with Parnas. He states, "...in the tradition of science programs, where experimental and theoretical science are often viewed as competing subfields, there is often little connection between the theoretical and practical sides of CS programs."

At Allegheny it seems that the CS Department tries to incorporate theory and application into most of its courses. For example, algorithms is a mathematical/theory course, yet we were expected to write programs and do homework and labs that illustrate the theory we were learning. I think in most courses it follows this route.

Parnas also provides the operating system example where he claims that it should be taught by "classifying them by features and properties" would be useful to someone who is a computer scientist and who is planning on research new operating system models and theories. If it was taught in another manner, say "how to select a system based to use and how to use it," than it would be more useful to software engineers. I have taken the operating system's course and I feel that both of these manners were incorporated into the class. I do not deny that it weighed more heavily from the computer science view, but the other view was provided.

So, looking only at Allegheny I feel that there is an attempt to incorporate the theory and application in course, but this is probably not true of all programs. So I disagree with Parnas statement based on my experience at Allegheny, but I agree with his statement in the essence that some programs at other schools may not integrate the two.

In a small Department, we are often required to incorporate practical and theoretical knowledge into the same course. However, in larger Departments (maybe even large Departments that do not adhere to the liberal arts tradition) we often find a greater fragmentation of knowledge. Do you think that this approach has served you well? Greg


  • Parnas indicates that he believes software engineers should take courses in mechanics, electricity, and magnetism. Do you agree or disagree with this idea? Should a software engineer be required to go even further and take classes in thermodynamics?


Richard Geary

I disagree. I thought the whole point of an SE program was so that students could focus on applying only useful portions of CS to produce software. Why then should an SE student be forced to take courses that obiovusly deal with the physical. Software is not physical. I don't believe that the term engineer must always imply a person who creates something physical.


I agree with Parnas in that we should take mechanics and electricity and magnetism classes. I know that I would probably enjoy taking thoughs classes than any other classes here at our school. These classes still have to do with everyday areas that might be within the job requirements when searching for a job. The more knowledge you know about software engineering and how these fields are related, the more area the engineer might want to get involved with in the future.
Chris Howell

Do you think that a knowledge of thermodynamics will help you to better engineer software? If you answer is yes, why? Greg


Brenda Gruber

I disagree with Parnas. I understand what he is getting at by suggesting that mechanics and electrical engineering classes be taken, but it seems that he spends a great deal of time explaining that computer science and software engineering are so similar it is difficult to determine the fine line where they differ. He devotes and entire section, "Why does the Distinction between Computer Science and Software Engineering Appear Fuzzy?" to this. They are similar and one could say that they almost work together. Computer Scientists provide the research to determine the newest technologies that software engineers apply to software systems.

I think it is more useful to have a basis in computer science than the engineering courses. Parnas also elaborates later on (again the operating system example) that it is the same subject material, but the emphasis and significance must be placed on on different parts of the same subject, but the underlying subject is the same - computer science.



  • Parnas also writes "Many programs lost sight of the fact that learning a particular system or language is a means of learning something else, not a goal in itself." What is the "else" to which he is referring?


The "else" that Parnas is talking about is the new information you are learning. Most people just write in the language without ever learning why it is better and why is it more beneficial to use language or system. People today are just interested in making a program from the language or having the system do what they want, not how and why the system or language does what it does.
Chris Howell

What are the features that make a programming language "better"? Can we make a priori judgements about whether a language "better" before we know the type(s) of problems that we will need to solve with software? Greg


Richard Geary

Parnas means that the reason you learn a language or an opreating system is for another purpose, not just for the sake of learning. He implies the reason to learn an operating system or a language is to then apply it for another purpose (perhaps SE?). After all what is the purpose of learning something if you're not going to use it afterwards.

Aha! This is a very engineering-ish perspective. Often, scientists are content to learn about something simply because it advances the discipline or because it is interesting. Personally, I find that I enjoy learning theoretical things the most when they can be applied to solve a specific problem. Often, theories are evolved before we have any direct applications for these theories. Greg


Brenda Gruber

I interpreted this statement from the Allegheny students' viewpoint as well. When I think about our program I think that we use "particular systems or languages" to learn other aspects and theories of computer science. I think the else is the fundamental theories and basics of computer science that we must learn, but we use programming languages or certain systems to illustrate these theories and basics.

Often there is a particular reason that we use a particular system or language to learn something, but I am not sure that the reason that we use them is always clear. If the reasoning for using that language was more explicit I think the learning process can come full circle and realize the "else", the computer science fundamentals that we are learning through a "particular system or language".



Link to this Page