History
There are several differences between âComputer Scienceâ and âSoftware Engineeringâ. Please read previous articles in the SEGVN website. To understand why there are different names we need to go back in history. About sixty or seventy years ago, when computer was still a new invention, only few scientists could use them in the laboratory. At that time, hardware was the most important thing and programming was very difficult to learn. Scientists who program the computer did not follow any methodology but just âdo somethingâ that make the computer work. Coding and testing were the main activities and the field was named âComputer Scienceâ.
During this time, due to high demand of people to program computer, universities began to open new department to train software developers for a degree called âComputer Scienceâ. Because this was still a relatively new field, most people who taught computer were mathematic professors, the training program was heavily focus on mathematics.
As computer was âcommercializedâ to be used in industry, more computers were needed, more computer companies were founded and competition were fierce. With advanced electronic technology in manufacturing, computer hardware costs were going down and no longer the most important asset. On the contrary, software became more important to make computer performed more specific functions. At that time, there were very few proper development approaches, a majority of works were still in coding and testing. Most applications were developed at a very high cost and took longer to build. As software size was getting larger and more complex, many applications were difficult to maintain. Because of the large size of million lines of code, defects were impossible to fix which caused significant high failure rate. As more companies were depending on computer for automation, defects in software applications created lost of several million dollars each year. The situation was called âThe Software Crisisâ.
The âSoftware Crisisâ was a turning point that made people think seriously about the software development processes. The industry demanded certain solutions to be applied to ensure successful, cost-effective software implementation. Many people began to think about new ideas of systematic development of software that can be deliver on time, on schedule, with high quality and reasonable costs. During this time, many approaches were invented and contribute to the modern and advanced thinking of an âEngineering solutionâ to the software development process. Engineering is a discipline that exist a long time, it focuses on the application of scientific principles such as logical thinking and designing to practical ends such as building bridges, roads, mechanical machines with significant efficiency and effective. By apply âEngineering principlesâ to the development of software, a new field was created called: âSoftware Engineeringâ.
Software Engineering advocates a systematic âLife-cycleâ approach in all software development. It shows that software can be built following several phases with guidelines, techniques, and tools to ensure the successful completion of the project. There are many Life-cycles for every needs such as âWaterfall Modelâ, âSpiral Modelâ, âIncremental buildâ, etc. to make it easier to develop and manage the software. These approaches also help managers understand problems which occur during the development and what to do to solve them. The engineering principle also dictates that the quality of the software product is determined by the process that create the product. By focus on the quality of the process, we can have a higher quality product.
As software became more important in every industry. There were significant higher demands for software engineers and some universities began to offer a new degree called âSoftware Engineeringâ. Most people who taught this field were engineering professors so the training program was heavily focus on logical thinking, problem solving, and development process. Since then, software engineering degrees have been established at many universities. Most training programs teach both computer science and engineering principles and practices. The first software engineering Masterâs degree was established at Seattle University in 1979 then Carnegie Mellon and Stanford have established themselves as having the best training programs.
Since then software engineering degrees have been made available from many more universities across the world. In Asia, it is still a relatively new field because the traditional academic is slow to adopt changes. In late 1990s, S. Korea was the first country that adopted the software engineering training program, following by Japan and India.
Traditionally, most software people called themselves programmers or software developers. However, in the U.S and Europe, the term âprogrammerâ has often been used to refer to people without the degree or proper education, who are trained from vocational schools for few months and cannot do good quality works. In response, many software people called themselves software developers or software engineers to avoid being âcalledâ programmer. In many U.S companies, the titles software developer refers to people who has a computer science degree and software engineer refers to people who has a degree in software engineering.
Focus & aspects
âWhy do I need to study Software Engineering instead of Computer Science? Aren't they the same?
Software Engineer and Computer Science are NOT the same. Each field focuses on different aspects of computing technology and lead to different careers in the software industry. In the past, most software are small and simple, so the focusing is on the âScience of algorithm developmentâ or efficient code to run on computers. For example, storing information or automate a mathematic formula or process. That is why most Computer Science programs require many years of mathematics and several programming languages. Today, software are larger and more complex, so the focusing is on the âEngineering of process managementâ or efficient software development to solve complex issues. For example, one of the principle of software complexity is: âFor every ten percent increase in problem complexity, there is an increase of one hundred percent in software solution complexity. The more complex the problem, the solution will be much more complex than previously thought. That is why you need to âEngineer the processâ to solve the problem rather than relying on the âscience of algorithmâ to create efficient code.
Because the focus is on the entire development process, a Software Engineer will follow a set of rules and principles rather than jumps into a solution (write code) quickly. For example one of the most common causes of projects failure is unstable requirements. A Software Engineer who studies âRequirement Engineeringâ will know how to review, validate, then prioritize these requirements to ensure that they are well defined and stable enough before moving on to the next phase of design. When move from requirements to design, a good Software Engineer who studies âArchitect and Designâ will know that beside the defined requirements, there are many âderived requirements.â As a matter of fact, there will be more âderived requirementsâ than the original requirements and that is why the design phase is often take longer to ensure everything is taken into consideration before moving into the implementation phase.
A Software Engineer rarely works in isolation but mostly in team as software development is always a team efforts. The knowledge and skills of each team member are critical to the project success. (Teamwork is always taught in Software Engineering program but not in Computer Science). Because the most important factor in solving complex problem is NOT the tools, NOT the algorithms, NOT the techniques but rather the skills of the developers themselves. A highly skilled developers can be more productive (up to 30 times better) than a mediocre developers.
Computer science program focuses a lot on efficient code (Algorithm) so quality is mostly about software defects. However, Software Engineering program defines quality differently. Quality is a matter of good design than of good coding. If a project requires high quality then it must be considered early in the development life cycle. Quality is a collection of attributes such as performance, usability, portability, reliability, efficiency, testability, understandability, and modifiability. Software Engineering also believe that quality is not the same as satisfying users, meeting requirements, or meeting cost and schedule targets but they are all related. Actually, user satisfaction = quality product + meets requirements + delivered when needed + appropriate cost.
Computer science program focuses on detection and removal of defects. (Most developers spends roughly 40 percent of their time in testing). Programming and Testing are the important factors in the Computer Science program. Software Engineering program focuses more on the quality of the development process because they believe that the quality of the software product depends on the quality of the process that creates the product. By focusing more at each phase, remove defects at each phase then in the end you will have less defects to deal with. Instead of more time on testing, software engineers are focusing more on inspections, reviews at each phase. (In reality, there is no single best approach to software defect removal. A combination of several approaches, such as inspections, reviews, and testing, is necessary).
Although both programs graduates will start in the software industry in similar positions such as programmers, testers, and technical leaders. Over time, most Computer Science graduates will be working more on the technical side focusing on sophisticated algorithms, scientific methods, formal methods etc. Most Software Engineering graduates will be working on the management side focusing on project management, system architect, portfolio management, and process improvement.