Computer Science vs Software Engineering

ben profile image Ben Halpern ・1 min read

Software vs Software (10 Part Series)

1) React vs Vue: Compare and Contrast 2) AWS vs Azure vs Google Cloud 3 ... 8 3) VSCode vs Vim 4) PostgreSQL vs MongoDB 5) OOP vs Functional Programming 6) Computer Science vs Software Engineering 7) Python vs Java 8) Classical CSS vs CSS in JavaScript 9) Ruby vs Elixir 10) Imperative vs Declarative Programming

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


markdown guide

Computer Science is also about hardware isn't it? Software engineering is obviously about "software", although to a large extent hardware is ultimately software - microcode, virtual machines etc.

The word "science" in Computer Science is a misnomer IMO, it's an engineering discipline, "science" is physics, chemistry, biology and so on.


I think I heard it the other way, that Computer Science abstracts away the hardware and leaves you with the algorithmic principles that will stay constant as the Electrical Engineers give you faster and faster computers. In it's heart, CS is closer to math than engineering.

Software Engineering, OTOH, is more about the processes and structures to create software. It's Industrial Engineering by another name.

I agree, however, that Computer Science, like any discipline that has to add science to the name, isn't a science.


That's true, you are right, Computer Science for all intents and purposes is a branch of mathematics. A branch of applied mathematics that's what it is, it studies the mathematical underpinnings of computer programming and algorithms.

So it isn't "science", unless you would call mathematics science. But mathematics isn't "science" in my definition ... science is the empirical study if the natural world (so physics/geology/astronomy, chemistry and biology) - mathematics (and by extension Computer "Science", and you could argue Philosophy and Logic too) are abstract "tools" and methodologies which support 'science'.

So yes that's definitely how I would define it - Computer Science is a branch of mathematics. It isn't engineering nor is it "science". "Software engineering" OTOH is arguably 'engineering' indeed, a form of industrial engineering, using "Computer Science" as one of its foundations.


The roots of "computer science" are in the empirical study to see if problems could be used with computers.

If I remember correctly, these were usually mathematic problems. The "science" was the exploration before complex computing was really a thing. We didn't know for sure if computers and logical processors could do the things we wanted them to do.

That's where the experimentation component comes from.


Given the fact that Computer Science is a branch of Mathematics, is mathematics also engineering?


I would call neither of them engineering, nor Computer Science nor Mathematics. Mathematics (and by extension Computer Science) are concerned with axioms, proofs, and abstract reasoning. It's an endeavor of its own which stands apart from Science, Engineering, Art, Philosophy and whatever discipline we can enumerate, it's none of those.

The only thing you could argue is that APPLIED mathematics could be called "engineering" because it concerns itself less with the study of abstract "structures" and axioms for its own sake and more with practical 'applications'.

I would call mathematics the purest form of science as everything in it's domain is based in proof and nothing is based in observation. Note that not all proofs are completely sound yet.
Mathematics is also an elementary element of all other sciences. You can't do chemistry without math.

Computer Science is less pure, as there are plenty parts which deal with human feelings. For example, language design.

You might be right, I think we should look up the formal definition.

What I thought (but I could be completely wrong) was that "science" means empirical science, so that would include physics, chemistry, biology and so on but not math, because math isn't based on empirical observation, but on pure logical reasoning.

Empirical science on the other hand is falsifiable (you hold on to a theory until it's disproved by new observations). Math (as you say already) works differently because it's based on rules and axioms, not on theory and empirical observation.

But of course math is an indispensable tool and foundation for the (other) sciences. It is used to build "idealized" models, just like computer programs are used to build (simplified) "models" of reality (that's where we see a strong analogy or resemblance between math and CS - both are used to build abstract "models", they're really two sides of the same coin).

I don't know if it is completely impossible to do any chemistry without math, but of course for anything remotely advanced a chemist will quickly reach for mathematical (or computer) modeling.

Speaking as someone with a Bachelor of Engineering (Computer Systems) and a Bachelor of Science (Physics), then I have a few comments on the above:

  • Science is formally a process of observation, hypothesis, testing, iterating until observations verify the hypothesis, and formulation of theory. Less formally, it is also an academic structure for research, publication, conferences, and academia. I only mention that second part of completeness, as it is less relevant for this conversation.
  • Mathematics is not science. (It is a tool used by science)
  • Computer Science is a branch of mathematics, rather than science. Indeed, Gerry Sussman enjoyed saying that Computer Science is both not science, and not really about computers either. 🤣
  • Engineering is a discipline that applies math and science to build things.

Having studied a lot of chemistry... no, you can't do it without math. 🙂

Agree to all of that ... studied a good deal of chemistry too, well in any case what's clear is that it's quantitative, you don't get anywhere without measuring and calculating, no argument about it.

That was my first thought, but then I remember talking with the chemical students and being surprised to learn that they were doing the same 3D differential equations that I was in order to solve for electron orbits. So the level of math can get intense.

I know way to many developers including myself not using math at all in programming. Not ever needing to for development, and as you said engineering uses since and math to do stuff. I don't, many of us don't, we use other peoples solution to build other solutions not intentionally thinking of math. We may use it not knowing but that doesn't make us engineers just math explains real world and so it can software solutions.

Having sad that I wonder about "Mathematics is not science. (It is a tool used by science)". I disagree not only in opinion but in fact that "mathematics is natural science" - this is what a lot of us have been taught. If you take 1 apple and take another you have 2 apples. That's natural and discovering how it applies to rest of things and how to represent it on paper is research and researching natural (not nature but things that happen in real world) is science. Maybe it's a language barrier from my side as english is not my native language and I may misunderstand deeper meaning of "natural", "science" and such words.

Maybe that's why we all have different opinions on such things. Words in english are used amongst many of us who do not well understand true meaning of it because we translate it to our main language and use as such. Which usually ends up being messed in many cases but it works, just like software :D .

The point of dispute here is actually a matter of some philosophical debate! For instance, if you look at the English Wikipedia entry for mathematics, there is an entire section on Mathematics as Science, which cites assertions of both sides of the argument from various mathematicians.

Before I became a developer, my own background has been background was in the physical sciences. This experience, along with the opinions of those who taught me, has brought me to the side which states that mathematics is not a science. That said, I see profound beauty in mathematics, and it was this that brought me into computer science.

Well given your experience and provided arguments for Mathematics as Science I can only agree: it's not language barrier, it's a philosophical debate. Thanks for clearing that up.

But I still I don't see software development in any case as engineering because of "engineering uses science". I just don't see it as mandatory. Maybe data science which is not software engineering but data science. AI is implemented using other people solution, ML same, and if you do otherwise people usually find you insane and don't use your products. So day to day job on average for developer is using bunch of well-known libraries trying to make them work together and cry because they don't

Right, yes when you're studying chemistry at the academic level and venture into quantum chemistry (using quantum mechanics to calculate chemical bonds) then you'll need advanced mathematics. I was thinking more about basic high school chemistry where you mix acids and bases and need to calculate the pH, stuff like that. That's more like basic arithmetic than advanced math, but well it's math nonetheless. :-)

Interesting article from Wikipedia about "math as science" ... I see that there are a lot of different opinions, but the following really stood out to me:

... whether mathematics is created (as in art) or discovered (as in science) ...

I think this is core - are mathematical concepts "constructed" or "invented" (meaning that they only exist in the human mind) or "discovered" (meaning that they "pre-exist" independently from us humans and are only waiting to be found).

That really seems to be the deep philosophical question.

In theory all of math could be "invented" given a mind brilliant enough, but in practice it doesn't work like that - many concepts (for instance integral calculus and differential equations) didn't materialize out of thin air but were inspired by observations in physics and other sciences - much math evolved in close harmony with scientific theories.


People have always told me it basically boils down to:

  • cs vs se
  • algorithms vs applications
  • data structures vs architecture
  • specifics vs broad
  • theoretical research vs practical implementation

I don't really buy it. It seems to me there be one field, Software Problem Solvers. The scope and type of your problems lump you into CS/SE categories as a shorthand, but it's generally unhelpful imo.


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


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!


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.


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.

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.

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.

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.

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.


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.


Orthogonal, but I'd love to see linguistics in CS. To see if the Sapir-Whorf hypothesis applies, for one. And sociology too, and economics, and physics, to study what are the real costs of a process.


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.


My idea about CS and linguistics was more about what vision of processes do you get from using such and such languages. Hence the reference to Sapir-Whorf. It seems to me that each programming approach or syntax "styles" gives a different perception of how to deal with "CS" objects and environments.

There is a hint of this when Eric Raymond says that "Lisp makes you a better programmer". Lisp does not expose CS objects better than other languages, it "wraps" them better.

Regarding my reference to, for ex, economics and CS, there is a social need for C-scientists to understand the limitations of the physical world so as to not produce aberrations such as the bitcoin mining energy waste.

Computing is intimately related to the real physical world because it is the result of electrons practically running on silicon. So, just like you don't ask an engineer to create things that can't resist to the laws of the physical world, it is important that C-scientists understand that their constructs have a huge impact on the world.



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).


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 ;)


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.


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.


I think in order to be a better Engineer you need to have a solid understanding of C.S concepts. that's why a lot of the big tech companies require you to know them because with the concepts of CS you can make high scalable applications with high performance. Google for example doesn't matter if you think you are backend, frontend etc. Everyone at google takes essentially the same interviews focus on CS and based on that they can determine what can of SE you will be and they can place you in the department they think you fit the best


I got my CS degree last year after 3 years of study, It was a wonderful experience, got introduced to the building blocks and the "science" behind modern computing starting from logic gates, assembly language, data structures, algorithms complexity, and even creating a whole new low-level language. For a curious person who always wondered how these things work, that was a perfect start point.

However, I didn't stop there, I'm currently involved in a Software Engineering work/study program (4 years) And I'm learning to build enterprise-scale solutions using Low to High-level technologies. Hope this path will allow me to become a Software Architect!


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.


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


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


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.


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.


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.


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.


Type Systems vs Design Patterns
Haskell vs Go
Paxos vs Bitcoin
Normal Forms vs ORM
BSD vs macOS
Model Checking vs Chaos Testing
Church vs Turing
Future vs Promise


I'm so happy to see this it makes me shed a tear. I wish I know the difference before going to undergrad.


I'll sit this one out. I'm just another hacker. :D


I have a Master Computer Science degree in Software Engineering, AMA 😄

Science is about thinking. Engineering is about doing. ... so I have a degree in thinking about doing. 🤔


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


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


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.


Subject vs Chapter.
Mathematics vs Algebra
Set vs it's sub set
Computer science vs software engineering
Computer science vs network engineering
Science vs applied science


I thought they were the same.



You need both much more than any framework!