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
Latest comments (49)
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.
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.
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.
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.
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.
Software Engineering is to Computer Science what Electrical Engineering is to Physics.
Science is "know what." Technology (engineering) is "know how."
I will one again quote Abelson and Sussman
And now Bauer
And finally I'll paraphrase Hamming
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).
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.