cruelty-teaching-cs
On The Cruelty Of Really Teaching Computing Science
https://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html
Author: E W Dijkstra
-
Radical novelty - sharp discontinuity, where vocabulary of the past can no longer be meaningfully used to describe the future.
-
Familiar is hopelessly inadequate
-
Radical novelties are so disturbing that they tend to be suppressed or ignored
-
by developing a keen ear for unwarranted analogies, one can detect a lot of medieval thinking today
-
The educational dogma is that “everything is fine as long as the student does not notice they are learning something really new”
-
Computers present two radical novelties not one:
- raw power in computing equipment - can handle 10^9 the magnitude of operations as possible before it
- computers are the first large scale digital device with discretized functions and interface. Everything of that scale until then had been analog
- In the computing world, there is no meaningful metric inw hich “small” changes and “small” effects go hand in hand
-
Software Engineering as a “doomed discipline”
-
If we wish to count lines of code, we should count not “lines produced” but “lines spent”
-
Computer becomes less frightening if it is only used to simulate a non-computer
-
A program is an abstract symbol manipulator that can be turned into a concrete one by supplying a computer to it
- “it is the purpose of machines to execute our programs”
- we construct our mechanical symbol manipulations by means of human symbol manipulation
- will always be an interplaybetween human and mechanized symbol manipulation
- Have a realistic shot at realizing leibniz’s Dream of providing symbolic calculation as an alternative to human reasoning
Fixing perception of code
-
An animistic methaphor of a “bug” that maliciously snuck in while the programmer was not looking, is intellectually dishonest
-
Avoid anthropomorphic metaphor “this class takes to that class”, “this guy..", programs “wanting” things, etc
-
A program is no more than half a conjecture
-
The other half of the conjecture is the functional specification the program is supposed to satisfy
-
Teach it like predicate calculus, but with emphasis on boolean algebra
- rename true/false to black/white
-
Teach a simple, clean, imperative programming language
-
Make sure that the programmer’s task is not just to write odwn a program, but to give a formal proof that the program meets the equally formal functional specification
-
Emphasis on teaching unsuspecting youngsters the effective use of formal methods