DEV Community

Discussion on: Computer Science vs Software Engineering

Collapse
 
matteojoliveau profile image
Matteo Joliveau

My personal take on the subject:

Software Engineering is the application of engineering principles to design and develop software programs. From Wikipedia, engineering is defined as:

The creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions; all as respects an intended function, economics of operation and safety to life and property.

Replace "machines" with "software programs" and you have Software Engineering.

Computer Science on the other hand is the scientific branch that studies information, it's forms of representation and how it can be manipulated via programs. It is therefore a more theoretic and scientific approach to software, one that is more focused on the principles and rules of computer programs than on their design.

So in conclusion, software engineering is the craft of building software that accomplishes a task, computer science is the study of data and programs that manipulate them.

Looking forward to read how other folks interpret this difference!

Collapse
 
elmuerte profile image
Michiel Hendriks

The way I see it, is that Software Engineering is part of Computer Science. It's the part that is more focused on the practice of applying computer science. Software Development is an application of Software Engineering. And programming is a task you do in Software Development, just like problem analysis and debugging.

Collapse
 
quoll profile image
Paula Gearon

I see it exactly opposite to this. Computer Science is a part of Software Engineering, not the other way around.

Computer Science, despite the name, is more a field of mathematics than of science. It is fundamental to how computer programs are designed and built.

Software Engineering applies computer science to real world applications, but also involves processes for design, implementation, management, deployment, and maintenance.

The more that Software Engineers know about computer science, the better they will be at design and implementation. However, Computer Scientists can be, and often are, ignorant of many elements of software engineering.

Thread Thread
 
stojakovic99 profile image
Nikola Stojaković

Umm, no, software engineering is a branch of computer science. Behind all those applied solution there is some math, in compiler which generates the Assembly code, in browser engine which draws layout on the screen, in various libraries which we use to write software, in algorithms implemented in the standard libraries of programming languages etc. Computer scientist doesn't have to know many details about software engineering, but good software engineer must know certain topics in computer science to write stable, secure and well performing software.

Thread Thread
 
quoll profile image
Paula Gearon • Edited

No. I agree with most of what you have to say above, except that software engineering a branch of computer science. It is not.

Software engineering did start as an area of computer science in the 1960s. During the 70s to 80s the definition evolved:

... the scope of its challenge became clearer. In addition to its computer science foundations, software engineering also involves human processes that, by their nature, are harder to formalize than are the logical abstractions of computer science.

(from The Overview Report by a joint task force by the ACM/AIS/IEEE-CS)

As you say, computer science and math are behind all of the engineering. And just like other disciplines of engineering, the scientists don't need to know much about engineering, but engineers need to understand enough of the science to apply it. I definitely agree with you on that.

Thread Thread
 
matteojoliveau profile image
Matteo Joliveau

Funny enough, I see the two POVs at stake (CS is part of SE or viceversa) and I think I personally stand outside of this diagram. To me, both are separate parts of what in Italy we call "Informatica", or "computer technology", the broather ensemble of software and data processing.
CS is the abstract, mathematical, theoretical part and SE is the concrete, practical part. They complement each other and often build on each other's findings.

I think it's interesting that I seem to struggle to find an equivalent word in English to describe this broader field.

Thread Thread
 
quoll profile image
Paula Gearon

My own POV developed from my education. As an engineering student we learned a lot of science, but this was as a tool for engineering. Scientific research (i.e. the observation/hypothesis/testing cycle) was what scientists did. But if that was the case, then what did engineering researchers do? Well... sometimes they research practical techniques for applying science, but then that is science too. And sometimes engineers do purely theoretical work.

Then I went back to university and studied science. That's when I learned that many scientists research practical applications that I would have thought was more in the domain of engineering.

So the line is extremely blurry.

Despite there being no clear division, in general I still think that science is more about understanding theoretical underpinnings, while engineering is more focused on the application of existing science to the real world. But each does reach into the domain of the other. This applies as much to electrical engineering/physics, chemical engineering/chemistry, materials engineering/materials science, etc, as it does to software engineering/computer science.

Collapse
 
diiaablo95 profile image
Antonio

I agree 100% with this view! Computer Science very often provides building blocks upon which Software Engineering builds (almost always) amazing solutions. When times change, i.e. more powerful machine are on the rise, Computer Science will just provide a more recent solution, e.g. harder-to-crack cryptographic primitives, and Software Engineering will apply those in real-world systems.

I can speak for my own experience, I recently got a M.Sc. in Computer Science, and I think I am a discrete computer scientist. I can solve very narrow and focused problems, going quite in-depth. I am on my way to mastering the art of applying all that I've learn for concrete problems, which identifies with Software Engineering.

I guess there would be no Software Engineering without Computer Science, but Computer Science would be mostly useless if there wasn't Software Engineering.