DEV Community

Ben Halpern
Ben Halpern

Posted on

Computer Science vs Software Engineering

Let's compare and contrast the fields/disciplines of CS vs Software engineering.

Latest comments (49)

Collapse
 
philipoakley profile image
Philip Oakley

The distinction should be between "Science" (its aims and philosophy, and its prospects for doing good) and that of "Engineering" and it's view of the same goals.
Coding isn't either, in just the same way as lab technicians and electricians aren't "Scientists" and "Engineers" per se. Good software is more than just coding.

Collapse
 
j_mplourde profile image
Jean-Michel Plourde

In Canada, engineer is a reserved title. You can't use engineer is you aren't a licensed engineer and license requires a 4 year bachelor degree in a certified engineering program. I'm currently a student in computer engineering and it is illegal for me to represent myself as an engineer or let someone present me as an engineer. The engineer order of my province has rules made for conventional engineerings like civil, mechanic, geology. Let's be honest, the boundaries of computer engineering are obscure. The engineering order does not even recognize restricted activities for computer engineers.

So for me, engineer needs (legally) to be about an activity made by someone who's a registered engineer and it involves applied science. I'm aware in USA and in other places where it's not regulated the same, engineering is the use of scientific principles to design and build machines.

As for computer science, IMO, it's all about applying computer theories to process scientific data.

Collapse
 
wolfhoundjesse profile image
Jesse M. Holmes

I feel like we're doing all contrast here, so here's a tangent comparison: both disciplines tackle delivering content at scale.

A developer/coder/programmer could handle the flow of information, inputs and outputs, such as putting data on the screen, without regard to efficiency/scale.

Computer Science aids in selecting the right data structures and algorithms (both are math) to get the job done efficiently.

Software Engineering aids in ensuring that platforms can deliver the content to as many people as necessary in the most efficient and cost effective manner for a period of time until the infrastructure hoisting the content needs to be adapted or removed.

Collapse
 
jacoby profile image
Dave Jacoby

I get thinking about linguistics as a subfield of CS, especially how the fundamental ideas on how to create programming languages is derived from Noam Chomsky's early theories on how human language works.

But I see a lot of pushback ahead at the idea that the field which investigates how thoughts are expressed and understood by humans and other animals to be fitted under another field that's named after inorganic machines. And less and less when you get into the other fields named. And I'm on that team.

Collapse
 
hassanaskary profile image
Hassan Askary

Software Engineering is to Computer Science what Electrical Engineering is to Physics.

Collapse
 
burdettelamar profile image
Burdette Lamar

Science is "know what." Technology (engineering) is "know how."

Collapse
 
gypsydave5 profile image
David Wickes

I will one again quote Abelson and Sussman

[Computer science] is not really about computers -- and it's not about computers in the same sense that physics is not really about particle accelerators, and biology is not about microscopes and Petri dishes

And now Bauer

Software engineering is the part of computer science which is too difficult for the computer scientist

And finally I'll paraphrase Hamming

Scientists stand on the shoulders of giants; computers scientists stand on each others toes

Collapse
 
xowap profile image
Rémy 🤖

Oh I'm not sure of the difference between the science and the engineering but one thing I can tell for sure is that the engineering is not nearly deserving its title. Not entirely through the fault of its practitioners though.

XKCD cartoon where software engineers explain they wouldn't trust software to vote

If you listen to SpaceX's spokesperson, he explained that putting humans into space is one order of magnitude more difficult than putting things into space, and putting cargo into space is already damn complex.

Althgouh it doesn't mean that SpaceX is using other-wordly tech, in fact some parts even are made in JavaScript and everything is done with a familiar stack (Linux, C++, etc).

So why can they shoot a capsule at 7.66 km/s to reach a 80cm pin-hole in space but I can't get my app to work for all my users?

The answer boils down to time and methodology. My clients expect things to be delivered fast at minimal cost and they are (somehow) ready to compromise on reliability for that. If a few percentage of people get an issue, they're definitely not going to die but on the other hand making sure that those bugs don't happen would probably take ten times the same amount of time with extensive testing, coding the same thing 3 times and making sure that all outputs concur at all times, analysing communication charts and planning for every single failure a counter-measure, ...

Regular software is: the user clicks on a button, the API doesn't reply, try to display an error in a not shitty way and that's it.

Engineered software would be: the user clicks a button, the API doesn't reply so a specific experience is triggered diagnosing the cause of the error (network error? dead API?) then the user would be instructed to wait, probably you'd need to start a background process in case the user closes the page and then retry until the API works again and make sure that it always stays consistent with the state of the application that you're displaying to the user and that they receive a proper notification when the action is done no matter what they are doing now. And you do this for every single API call.

That would totally blow up software costs. So, we're using software science to do software, but definitely few of us are properly engineering their software (and for good reason).

Collapse
 
phlash profile image
Phil Ashby

With you on most of this apart from the very end where you say 'properly engineering their software'. I would suggest that we are actually doing the 'engineering' part very well, balancing cost, capability and risk to meet the needs of our customers (just good enough to solve their problems) and ourselves (feeding the family!) in a free market system...

Kudos for SpaceX references ;)

Collapse
 
xowap profile image
Rémy 🤖

Indeed, I meant it in regard to people saying that bridge engineers can make a safe bridge and software engineers can't make anything safe and thus they are not proper engineers.

That asks a quite deep question of what is software engineering and what is just writing code that somehow works.

Collapse
 
edimeri profile image
Erkand Imeri • Edited

How i view is that Software Engineering is Applied Computer Science. And Computer Science itself just as already posted before is a branch of mathematics dealing with computation.

Collapse
 
davelsan profile image
David Velasco

An analogy that might help to understand the question: Software Engineering is to Computer Science, as Genetic Engineering is to Biological Sciences.

The former is a form of biotechnology that falls within the field of genetics, which itself takes many shapes (molecular genetics, population genetics, etc.). The latter is the study of life; from its trunk of knowledge many branches grow, like Genetics, and uncountable applications blossom, such as Genetic Engineering.

We humans feel the need to categorize everything into discrete blocks, but it is important to remember that reality is fuzzy, and boundaries often overlap or do not exist at all.

Collapse
 
hinasoftwareengineer profile image
Hina-softwareEngineer

My personal take is: In computer science, we just study the principles of making software and all is theory. In software engineering, we do practical work like developing applications on those principles.

Collapse
 
fayaz profile image
Fayaz Ahmed

I thought they were the same.

Science

Collapse
 
_hs_ profile image
HS • Edited

Would argue that software engineering is just software development. There's no engineering in following other peoples thoughts and rules while having billions of other ways to do it. You don't need mathematics or physics to do it. Many developers don't care about mathematics theory about solution they just do it and in many cases get real world solutions to put in computers thus programmers or translators in some sense

CS on the other hand is science based so it could be computer engineering. You need to know hardware limitations and how it works to develop new solutions which might require strong knowelwdge of mathematics, physics or other. You can also end up knowing all that and still just write APIs, smartphone apps, or frontend

Collapse
 
michi profile image
Michael Z

I agree. Devs should focus more on clarity when writing code, hence why I like the term software writer (around 45 minutes in).

Collapse
 
michalbryxi profile image
Michal Bryxí

This one always baffled me. To me it sounds like in the countries that have this division there is one or the other in the undergraduate levels.
The experience I have from my country is that we get a bit of both and I am not even sure it would fit in two buckets. Hardware, networking, software management, development process, ... Not sure where those fall in.
Once you go for a PhD, I think you will only do Computer Science.

Collapse
 
etienneburdet profile image
Etienne Burdet

You need both much more than any framework!