Live data from Hacker News

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

cs.utexas.edu

51–60 of 64 posts

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

#51
As someone who focused on proof based mathematics in collage and is largely a self taught programer I think this proposal has merit. Begin forced to confront abstraction and formalism without any crutches as a freshman in college changed and expanded the way I thought. Learning to write down a correct proof without an external way of verifying it is an experience everyone should have.

However I think this needs to be coupled with an introduction to the concrete at a younger age. In mathematics we teach arithmetic to young children then step up the ladder of abstraction to high school algebra, simple proofs and linear algebra before eventually exposing them to abstract algebra (ie group theory etc). Teaching abstract algebra first would make theoretical sense but the mind tends to need to know at least one example of something before it accepts the abstraction.

I imagine a playful introduction to programing for young children coupled with a strong course in formalism for young adults could produce some great programers. Though, as with the proof based math series I took, I'm sure there would also be loads of freshman drop outs/transfers to more applied courses.

I also agree with others that insight rarely comes from pure formalism. The point of learning these things is to expand the way your mind works allowing you to think about abstract objects and allowing you to verify insight when it does come.

For me Charlie Parker sums up the necessity of a formal education even if it is not explicitly used in practice:

"Master your instrument, master the music & then forget all that & just play."

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

#52
I am glad he was able to articulate why some types of change are accepted and other changes rejected with hostility -- that some new things can be interpreted through analogies with previous experience.

It is the difference between "change" and change, "thinking" and thinking.

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

#53
post #39

Earlier quoted context omitted.

> the dream of formalizing all reasoning has turned out to be a pipe-dream, as evidenced for example by the failure of the Hilbert program, and people everywhere proceed about their business as usual. Ugh, that is unbelievably smug and disconnected from reality. I could post tomes on why you are wrong. I will be kind and request you to respond to just this. :) http://www.nytimes.com/library/cyber/week/1210math.html A…

Do you understand the difference between "formalizing all reasoning" and just formalizing something?

>Do you understand the difference between "formalizing all reasoning" and just formalizing something?

Thanks for the condescending tone. But, you need to start somewhere. Be realistic.

Are you sitting and complaining that since physicists don't have a theory of everything already they should stop their work? Are you sitting and complaining that since we have not yet gone to Mars, NASA should be shut down? Are you also complaining that since we don't understand the genome fully, we should stop computational biology?

We start with approximations and we need to start small. Like in any science. Claiming reasoning is unformalizable is appealing to superstition and folk science.

And I was responding to the point that formalization has zero real world impact. That is patently false and intentional middle-brow FUD. This FUD can cause real harm to real people (not just people who study formal methods.)

You still have not responded to my example of formal methods being used in the real world with real impact.

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

#54

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.

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

#55
post #49

Earlier quoted context omitted.

I got the impression that we both read completely different articles, because nowhere in it I see EWD saying that mathematicians or scientists should think by means of formal methods... That doesn't even make sense, since formal methods are a way not to think. What he states is that computers are a "formal method applying machine" (a conclusion you seem to share), and that for competently using it, one must know form…

Dijkstra advocates creating programs by doing formal transformations of specifications written in mathematical logic, and computers just do boolean algebra on strings of bits, so it's not that Dijkstra advocates formal methods because they are somehow essential to how computation is done in the computer - they are not, especially in the form proposed by Dijkstra. He is proposing formal methods as a way of thinking ab…

> just like not that many new theorems in mathematics, outside of mathematical logic, were discovered using the tools of mathematical logic.

That is plain FUD right there.

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

#56
post #39

Earlier quoted context omitted.

Do you understand the difference between "formalizing all reasoning" and just formalizing something?

>Do you understand the difference between "formalizing all reasoning" and just formalizing something? Thanks for the condescending tone. But, you need to start somewhere. Be realistic. Are you sitting and complaining that since physicists don't have a theory of everything already they should stop their work? Are you sitting and complaining that since we have not yet gone to Mars, NASA should be shut down? Are you als…

I didn't claim anywhere formal methods are worthless or have zero real world impact. I said that the dream of formalizing all reasoning turned out to be a pipe-dream, and it did, as in:

http://en.wikipedia.org/wiki/Hilbert%27s_program#G.C3.B6del....

Is that superstition and folk science? I also don't see mathematicians using mathematical logic to prove theorems in "ordinary" mathematics, hence the comment about "business as usual". I know formal methods are an active research field and successfully used in specialized applications in CS, but the article we are commenting upon is claiming studying formal methods is the best way to learn programming, which is similar to saying learning mathematical logic is the best way to learn mathematics, which is non-sense as evidenced by the attempts to do this.

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

#57
post #49

Earlier quoted context omitted.

I got the impression that we both read completely different articles, because nowhere in it I see EWD saying that mathematicians or scientists should think by means of formal methods... That doesn't even make sense, since formal methods are a way not to think. What he states is that computers are a "formal method applying machine" (a conclusion you seem to share), and that for competently using it, one must know form…

Dijkstra advocates creating programs by doing formal transformations of specifications written in mathematical logic, and computers just do boolean algebra on strings of bits, so it's not that Dijkstra advocates formal methods because they are somehow essential to how computation is done in the computer - they are not, especially in the form proposed by Dijkstra. He is proposing formal methods as a way of thinking ab…

> What I am saying in the comment is that I do not believe many people benefit that much from a formal approach to program development

A lot of systems would benefit from formal (or more formal) methods. I worked in aviation software, formal methods would have saved us so much trouble, especially since the code size is often relatively small (10k-200k LOC) and because we're dealing with other systems the IO spec was reasonably complete. Sure there'd be issues, but feature creep was not one of them (except on one project). Feature creep makes formalisms difficult, but only when you're looking at whole program formalisms. So certainly safety critical systems benefit.

What else might? How about medical systems (see Therac-25 for faulty UI leading to deaths). Network code, especially fundamentals like routers, switches and core services like DNS that so much depends on. Cryptographic and other security systems. Compilers, obviously, similar to network code they're too ubiquitous to be left to error prone ad hoc approaches. Anything handling money. Anything handling privacy (ensuring HIPAA and whatever European privacy rights). Software handling production automation or managing warehouses/inventory, failures there mean lost production time, wasted inventory, lots of money and productivity gains to be had by having software that works.

If you accept formal methods on the small scale (essentially the promise of functional programming a la Haskell and the ML family), you can be confident in composing large systems out of smaller, formally verified systems.

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

#58

As someone who focused on proof based mathematics in collage and is largely a self taught programer I think this proposal has merit. Begin forced to confront abstraction and formalism without any crutches as a freshman in college changed and expanded the way I thought. Learning to write down a correct proof without an external way of verifying it is an experience everyone should have. However I think this needs to be…

For me Charlie Parker sums up the necessity of a formal education even if it is not explicitly used in practice: "Master your instrument, master the music & then forget all that & just play."

How very true across so many aspects of life!

Science doesn't happen through formalism. People learn the body of material that's been proven, then they get new intuitions, then afterwards they try to formally prove their insight. This isn't entirely inconsistent with EDW either. A lot of his point is that programmers need to know how to think symbolically, and if you truly prove the correctness of things, you can build the base of knowledge on top of it. If not, you're frequently wondering why things don't work.

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

#59
post #7

I think people are attracted more to the form of the EWDs and to it's melancholic tone, rather than to the content itself, which is confirmed by the huge popularity of the EWDs as compared to "The discipline of programming", which is the technical exposition of what Dijkstra really is proposing in the EWDs. As almost all of Dijkstra's writing, this piece here is a plea for teaching formal methods. It's nicely written…

I had a student of EDW as my Programming Languages instructor. Someone asked my prof, "How do you debug?" His response, "I don't. I prove that the code is correct before I type anything."

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

#60
post #56

Earlier quoted context omitted.

>Do you understand the difference between "formalizing all reasoning" and just formalizing something? Thanks for the condescending tone. But, you need to start somewhere. Be realistic. Are you sitting and complaining that since physicists don't have a theory of everything already they should stop their work? Are you sitting and complaining that since we have not yet gone to Mars, NASA should be shut down? Are you als…

I didn't claim anywhere formal methods are worthless or have zero real world impact. I said that the dream of formalizing all reasoning turned out to be a pipe-dream, and it did, as in: http://en.wikipedia.org/wiki/Hilbert%27s_program#G.C3.B6del.... Is that superstition and folk science? I also don't see mathematicians using mathematical logic to prove theorems in "ordinary" mathematics, hence the comment about "busi…

> I also don't see mathematicians using mathematical logic to prove theorems in "ordinary" mathematics, hence the comment about "business as usual".

You don't know does not equal to that not existing.

http://www.cs.miami.edu/~tptp/OverviewOfATP.html

People are even making money using formal reasoning. So please, take time to learn more before disparaging entire fields.

Btw, I know about the incompleteness theorems. I teach a course centered around that.

Let me ask you a related question: do you stop programming because many of the tasks associated with programming are Turing-uncomputable? (checking if a program halts, checking if two programs compute the same function etc.)

Post reply on HN