On Friday, 31 August 2018 at 22:23:09 UTC, Walter Bright wrote:
For example, in any CS program, are there any courses at all about this?

In Year 1 Q4 of my Bachelor CS, there was a course "Software Testing and Quality Engineering" which covered things like test types (unit, end-to-end, smoke etc.), code coverage and design by contract. They taught how to implement invariants, preconditions and postconditions in Java by manually placing asserts (since unlike D, there's no `in`, `out` or `invariant` keywords in Java) but I don't recall anything related to recovery from errors, or using aviation safety principles to make a safe system from unreliable parts. They said that you can decide between security and performance when choosing to leave asserts on/off in release builds.

In Year 2 Q1 there was a follow-up "Software Engineering Methods" course which talked about Design Patterns (the GoF ones), process (SCRUM / Agile), and designing (with UML and other graphs). No other courses since then talked about software engineering, they were more focused on specific fields (big data, signal processing, embedded systems) and fundamental computer science (algorithms, complexity theory, programming languages).

Reply via email to