Software Engineering Program
A father wrote to me: “My son is going to college this year. He is confused between Computer Science and Software Engineering and I cannot explain the difference. A school advisor told him that they are the same with different names but another advisor told him that they are not. Since there are universities that teach Computer Science and others that teach Software Engineering, I need to make decision about which school for him to go to. My friend refers me to your website but I am not sure which one would be better for my son. I need help to select the right field and right school to send my son to. Please help.”
Answer: There are many opinions on the difference between Computer Science and Software Engineering. Basically the key words are “Science” and “Engineering” and it means “Scientists study” and “Engineers build” so the common definition is Computer Science is the STUDY of what computers do and all the theories associated with a computer system such as data structures, algorithms etc. Software Engineering is the DEVELOPMENT of software products based on the processes and disciplines associated a software system.
To help you to understand the differences, we must go back to history. A computer system typically consists of hardware and software but it is the software that represents all the functionalities that users need and as the needs change, software must be updated. In the past, software were small and simple so writing software is mostly based on the programming skills of the scientists who understand the functions of the computer system. Computer Science is created to focus on the skills to write software using programming languages (FORTRAN, COBOL, Pascal, C, C++ etc.). Most Computer Science trainings are based on several years of writing code, learning computer theories, understand data structures, create algorithms, using certain mathematics formulas and organize data structures etc.
As software is getting larger and more complex, the approach of focusing strictly on writing code alone is not good enough. As many computer science projects were late, cost more and difficult to maintain, a new approach was needed to control the complexity and quality of large software system and the field of Software Engineering was created. Software engineering’s goals are the development of quality and cost-effective software that is easy to maintain and use.
Computer Science considers software as computer programs but this is a very restrictive view. Software is not just a program but also all associated documentation and configuration data to make these programs operate efficiently and correctly. Software Engineering considers a software system as a number of separate software programs (applications, operating, interfaces etc.); configuration files which can be used to set up these programs; system documentation which describes the structure of system and how they work together; user documentation which describes how to use the system. The Software Engineering training therefore is not only focusing on writing code but also all activities associated with the development of a software system. Student must learn about software process or a set of activities needed to build quality software; the engineering of software system requirements based on users’ needs; the structured approach to software development including modeling, notations, rules, architecture, design, and process guidance; as well as the quality attributes such as performance, scalability, maintainability, usability etc.
In general, software engineers follow a systematic and organized approach to their work as this is the most effective way to produce quality software. Since the software is complex and large, they always work in teams so soft-skills are also taught in most software engineering programs.
- Blogs of Prof. John Vu, Carnegie Mellon University