What is the difference between computer science and software engineering?

Samira Said
4 min readAug 25, 2020

--

Edsger Dijkstra is one of the biggest names in computer science. He was a Dutch academic professor known to be one of the most influential figures of the computer science field who helped shape the discipline from both a theoretical, and engineering perspective.

Dr. Dijikstra had a background in math and physics, and during the 1960’s, he revolutionized programming from a “puzzle-solving activity” into a more scientific discipline that included improving the quality of programs through if/else statements, also known as structured programming. Structured programming helped lay the foundation for other concepts such as compilers, software engineering principles, graph algorithms, that shaped the theoretical and engineering perspective of computer science, or as we know it: computer science and software engineering.

Edsger Dijkstra teaching in Switzerland in 1994
Edsger Dijkstra teaching in Switzerland in 1994

So, what is the difference between software engineering and computer science? Dr. Dijkstra best explains with this quote,

“Computer science is no more about computers than astronomy is about telescopes.”

While astronomists may use tools such as a telescope, the telescope does not make the astronomist. This analogy can be interpreted as a critique to those who may think computer science is only about technologies such as programming languages, frameworks, etc.. Computer scientists may use these technologies, however, computer science is about the core concepts behind making a computer do something. This can be through data structures, algorithms, etc. Most of these concepts may be extremely abstract, which is why many of these studies are considered “theoretical” and mostly reserved for those pursuing academic education in computer science or research to further develop the computer science field. Interestingly enough, many computer scientists may even use a computer. The computer science field was created before the first ever computer that we all know and love today. To put into perspective, computer science is a vast field, and software engineering fits as a subcategory in the field.

A diagram with 2circles, the larger one is labeled as computer science and the smaller inner circle as software engineering
Software Engineering is just one of the many sub-fields in computer science

Engineer, en·gi·neer, /ˌenjəˈnir/, “a person who designs, build, or maintains engines, machines, or public works.” This is the definition of an engineer, according to the Oxford dictionary. Software Engineering is essentially putting the principles of computer science to develop practical solutions to technical problems. These technical problems can vary vastly from medical, e-commerce, and even sustainability purposes. On another note, software engineering is such a vast and growing field because it can be applied to almost any field of work in the 21st century, if not every field.

In the book, Professional Software Development, by Steve McConnell, the author further explains the differences between computer science and software engineering. McConnell writes an interesting statistic that only 40 percent of current software engineers hold a degree in computer science. This is interesting because it additionally confirms that software engineering ≠ computer science. Instead, software engineers choose what is useful and apply the knowledge to solve practical problems. While computer scientists, just as any scientist, test hypotheses, research new ideas, and further expand the field — software engineers use the proven ideas by these computer scientists in real life and practical settings. This is why students who plan to have a career in software engineering understand the foundations of computer science, and are able to apply it to their field of work. Computer science also has an emphasis on problem solving which may easily translate when practiced in a software engineering job setting.

On page 32 of the book, McConnell also wrote, “ The typical computer science graduate typically needs several years of on-the-job training to accumulate enough practical knowledge to build minimally satisfactory production software without supervision.” I found this statement interesting because other computer science students have also found that a computer science degree does not adequately prepare students for a software engineering career, because of the emphasis of theoricality. However, as mentioned previously, students still gain a foundation on core concepts, which is also why computer science still remains one of the top undergraduate degrees that software engineers hold. Along with the core concepts students learn during their study, schools also put an emphasis on students to pursue software engineering internships to prepare them for a software engineering career.

In chapter 4 of the book, McConnell asks the candidate he’s interviewing,

“How would you describe your approach to software development?” the candidate replies, “During software design, I’m an architect. When I’m designing the user interface, I’m an artist. During construction, I’m a craftsman. And during unit testing, I’m one mean son of a bitch!”

This quote shows the broadness of software engineering. Software engineers are all unique, and while Dr. Dijikstra brought a scientific perspective of computer science, he also helped lay the foundation for the rest of the practice and the study of computer science.

--

--