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.
[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 name is Matteo and I'm a cloud solution architect and tech enthusiast. In my spare time, I work on open source software as much as I can. I simply enjoy writing software that is actually useful.
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.
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.
My name is Matteo and I'm a cloud solution architect and tech enthusiast. In my spare time, I work on open source software as much as I can. I simply enjoy writing software that is actually useful.
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.
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.
Current CTO exploring entrepreneurship on the side; coach; mentor; instructor.
Dedicated to promoting digital literacy and ideological diversity in tech.
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.
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'.
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.
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).
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.
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.
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.
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 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.
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.
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.
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
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 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!
Type Systems vs Design Patterns
Haskell vs Go
Paxos vs Bitcoin
Normal Forms vs ORM
BSD vs macOS
SIGGRAPH vs GDC
Model Checking vs Chaos Testing
Church vs Turing
Future vs Promise
25+ years as a Software Developer. I'm passionate about process improvement using technology. Let's all work smarter not harder and do more with less.
MY THOUGHTS ARE MY OWN
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
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.
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.
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'.
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).
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.
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.
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.
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 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.
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.
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.
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).
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 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!
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. 🤔
I'll sit this one out. I'm just another hacker. :D
Type Systems vs Design Patterns
Haskell vs Go
Paxos vs Bitcoin
Normal Forms vs ORM
BSD vs macOS
SIGGRAPH vs GDC
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 knew the difference before going to undergrad.
Science is "know what." Technology (engineering) is "know how."
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.
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.
Software Engineering is to Computer Science what Electrical Engineering is to Physics.
You need both much more than any framework!