Specifically, Dijkstra made a “proposal for an introductory programming course for freshmen” that consisted of Hoare logic as an uninterpreted formal system.
Since the term "software engineering" was coined, formal verification has almost always been considered too resource-intensive to be feasible.
[citation needed] In complex applications, the difficulty of correctly specifying what the program should do in the first place is also a common source of error.
The curricula generally emphasize techniques for managing complexity and preparing for future changes, following Dijkstra's earlier writings.
Programming techniques to avoid bugs and conventional software testing methods are taught as basic requirements, and students are exposed to certain mathematical tools, but formal verification methods are not included in the curriculum except perhaps as an advanced topic.