Let's compare and contrast the fields/disciplines of CS vs Software engineering.
For further actions, you may consider blocking this person and/or reporting abuse
Let's compare and contrast the fields/disciplines of CS vs Software engineering.
For further actions, you may consider blocking this person and/or reporting abuse
Vignesh J -
Chakir Ayoub -
Yeshwanth Valishetti -
Tutort Academy -
Top comments (49)
People have always told me it basically boils down to:
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
And now Bauer
And finally I'll paraphrase Hamming
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:
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:
(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.
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.
Interesting!
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:
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.
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.
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 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.
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
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.
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.