Live data from Hacker News

Dijkstra: On the cruelty of really teaching computer science (1988) [pdf]

cs.utexas.edu

61–64 of 64 posts

Re: Dijkstra: On the cruelty of really teaching computer science (1988) [pdf]

#61
post #46

Earlier quoted context omitted.

You are confused about the manner of "formal methods" Dijkstra was proposing. His examples given are all using "informal proofs." That is to say, non mechanically verified proofs. If you create a program in such a way that the properties you claim it has cannot be, even informally, proved. Then you have no reason to believe it works as advertised what-so-ever. He did also propose a research program in to more formali…

The example proofs he gives in the article have nothing to do with the way he taught to do programming, they are merely illustration of some of his minor points. Later in the article he says: On the other hand, we teach a simple, clean, imperative programming language, with a skip and a multiple assignment as basic statements, with a block structure for local variables, the semicolon as operator for statement composi…

As I read it. His comments about teaching we along the lines of:

1. Thinking of a computer as machine is not helpful. He re-iterates this point on "operational reasoning" in other EWD's when describing inductive thought in understanding programs rather than thinking step-wise.

2. Unsuitability of engineering metaphors / maintenance (such as topping up the oil in an engine) and so on to describe tasks within computer programming.

3. Calling bugs "errors"

4. Avoiding anthropomorphising programs

etc.

The given informal proof is given to argue for "use of down to earth mathematics" as a way of thinking about programming in a way that avoids "tremendous waste of mental effort "seems to be among the core points of this EWD.

The points about Liebniz's dream seem to be referring to the broadening and deepening of the formal core of computer science which was and still is a highly lively and profitable endeavour. And the argument is that making computer science students familiar with formal mathematics and logic can only help the endeavour.

The part you quoted just sounds to me just sounds like a pedagogical computer language. The main thrust seems to be ensuring students have a grounding in logic and formal math. Not to have them necessarily feed all their programs in to formal solvers and expect to do so all their lives. Although predicate transformer semantics was one research effort he led in to exactly that.

He does touch on the presentiment of things like predicate transformer semantics in the EWD but very obliquely as highly speculative statements on future research. I haven't read "discipline of programming" (I'd love to but it's expensive) but it looks like a scientific publication outlining a research program rather than a students handbook. Scientific research always proceeds through what might look like blind alleys in retrospect but which are actually important contributions.

Also from the lectures of his that I've seen, it seems the content is usually more along the lines of the EWD's than formal treatises in to predicate transformers.

Sorry for length of reply but, Dijkstras thinking on these issues, IMO, whatever you think of it, is not easily dismissed.

EDIT: In fact, to me, dismissing dijkstras ideas on formal comp-sci because of predicate transformer logic is like dismissing Newton for thinking that action at a distance was an "absurdity no man could believe in." That is to say, one cannot dismiss Newtons body of work as merely a preamble for his "main work" of finding a way to disprove action at distance.

Re: Dijkstra: On the cruelty of really teaching computer science (1988) [pdf]

#62
post #23

Earlier quoted context omitted.

But, however much you might bristle at his tone, he has something significant to say, and he's right when he says it. You can't take this paper (or any other) as an end-all/be-all statement isolated in a vacuum. Maybe his smug tone portends that he might presume as much, but it's a mistake to take it as a one-size-fits all remark. The thing he gets right is this: Teaching students "Computer Science" as a new discipli…

I can't agree with this either. Practical engineering is not pure mathematics, and once systems get complex enough, even if they are man-designed and not given from nature, there is often no other way than to use "reverse engineering" or in other words use empirical methods to understand some behaviour or fix a problem. In fact, one of the most important skills to learn for prospective computer programmers is rigorou…

Complexity is not hopeless.

First, http://www.vpri.org/html/work/ifnct.htm and http://www.vpri.org/pdf/tr2011004_steps11.pdf (Personal computing, which currently fit in about 200 Million lines, or 10 thousand books, could actually fit in about 20.000 lines, or a single book.)

Second, as we make more complex systems, we could just prove that they work as intended. (Provided the underlying hardware works as intended, which as you pointed out is not allways the case). Okay, it's expensive to prove your software. But it's not impossible: just use proven libraries, and prove that your software works if the dependencies and the hardware work. No need to prove the whole stack.

Sure, it's expensive in the short term. But think of the total absence of effort you will need to invest over debugging.

---

Of course, right now, we're deep in the poo. Hail to Worse Sells Better!

Re: Dijkstra: On the cruelty of really teaching computer science (1988) [pdf]

#63
post #2

His page numbers are zero indexed. Cute. I would have loved to take his proposal for an introduction to computer science course.

However after the list he states

  "And with the sixth example I have reached imperceptibly but unavoidably,
  the most hairy part of this talk: Educational consequences." 
which is incorrect as item 6 is actually the 7th example. Zero based indexing requires that the counter be updated after appending and the counter be referenced for the cardinal value of an item. (ie. item 6 is 7th in the list).

Re: Dijkstra: On the cruelty of really teaching computer science (1988) [pdf]

#64

Who is Dijkstra to espouse about the best way of teaching mathematics to primary school children? I think it would be equivalent to a researcher in education deciding they know the best way to design a calculus. The manner in which Dijkstra writes about this is very off-putting - it sounds arrogant and one-sided, dismissive. In fact he comes across as ignorant, which of course, he is, in this area. Worryingly, I see…

Where in this essay does he "espouse about the best way of teaching mathematics to primary school children"? It seems to be about CS education, not primary school math.

Page 5.
Post reply on HN