cruelty-teaching-cs

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

R:tech

  • 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