Skip to content

Core Software Engineering draft (WIP)

hanjiexi edited this page Jan 10, 2019 · 5 revisions

Core Software Engineering

Engineering is defined as a field where constructing the product requires the application of a rigorous (and formally accredited) education in mathematics, physics, chemistry, etc., as appropriate. On top of the specific scientific expertise, best practices emerge over a long time (centuries, in some cases), and then get codified into standard practices. Professional licensing boards then develop criteria and an exam for obtaining an engineering license; regulations ensure that only those who obtain this license can legally call themselves professional engineers (PE).

You can still be "practising engineering" even if you aren't yet licensed; software engineering is being practised all over the world, every day to produce software with extremely high safety, reliability, and performance requirements, such as in aviation, medical devices, spacecraft, etc. In contrast to pure computer science, which you can think of as the "scientific domain knowledge" part of software engineering, software engineering is a very young field that hasn't yet reached the same level of standardization that exists in other engineering fields like chemical, mechanical, etc.

Software engineering (SWE) as a formal academic subject is too vast to nest within a computer science curriculum; if the material were available, it would warrant its own separate curriculum. Until SWE is more widely recognized as an independent subject, educational material is limited and most entry-level software engineering roles expect a background in computer science (the ad hoc "engineering" part is learned on the job). Therefore, the goal of the Software Engineering sections of the curriculum is not to teach SWE as a whole, but rather to teach a few small components of it that can be relevant to both CS and SWE.

Notes to self

Prerequisites

  • Core Theory

Resources

Software Architecture

Formal Methods

Needed by

  • Advanced Software Engineering