Answers To Questions From Students Of Software Engineering

Some quotations from "Answers to Questions From Students of Software Engineering", a note by Ew Dijkstra, the Grumpiest Computer Scientist In The World. See www.cs.utexas.edu

A programmer has to be able to demonstrate that his program has the required properties. If this comes as an afterthought, it is all but certain that he won't be able to meet this obligation:
only if he allows this obligation to influence his design, there is hope that he can meet it. Pure a posteriori verification denies you that wholesome influence and is therefore putting the cart before the horse, but that is exactly what happens in the software houses where "programming" and "quality assurance" are done by different groups. Needless to say, those houses deliver without warranty.

The required techniques of effective reasoning are pretty formal, but as long as programming is done by people that don't master them, the software crisis will remain with us and will be considered an incurable disease. And you (know) what incurable diseases do:
they invite the quacks and charlatans in, who in this case take the form of Software Engineering Gurus.

Some of you doubt that the aforementioned "techniques of effective reasoning", nice as they are for small programs, will scale up, I quote "given the daunting size and sheer complexity of most programs". Well, they will be powerless if you try to use them to disentangle the horrendous mess produced by a group of incompetent, unorganized programmers. Their power manifests itself in the construction phase where (i) they tend to lead to much shorter texts than would be produced otherwise and(ii) lengths of program derivations tend to grow not much more than linearly with the lengths of the programs derived. Finally, the programs produced are infinitely better than the usual junk.

We should never forget that programmers live in a world of artefacts, a fact that distinguishes them from most other scientists. The programmer should not ask how applicable the techniques of sound programming are, he should create a world in which they are applicable:
it is his only way of delivering a high-quality design. To which I should add a quotation from EWD898 (1984)

Machine capabilities now give us room galore for making a mess of it. Opportunities unlimited for fouling things up! Developing the austere intellectual discipline of keeping things sufficiently simple is in this environment a formidable challenge, both technically and educationally.

No, I'm afraid that Computing Science has suffered from the popularity of the Internet. It has attracted an increasing -- not to say:
overwhelming! -- number of students with very little scientific inclination and in research it has only strengthened the prevailing (and somewhat vulgar) obsession with speed and capacity.

Yes, I share your concern:
how to program well -- though a teachable topic -- is hardly taught. The situation is similar to that in mathematics, where the explicit curriculum is confined to mathematical results; how to do mathematics is something the student must absorb by osmosis, so to speak. One reason for preferring symbol-manipulating, calculating arguments is that their design is much better teachable than the design of verbal/pictorial arguments. Large-scale introduction of courses on such calculational methodology, however, would encounter unsurmountable political problems.


I write as a current student who studies the formal techniques while programming for fun. I have yet to integrate the two. Why? Because programs have to deal with people. They are written by people, read by people and used by people. Most of these people are not mathematicians, and the math people like to pretend they don't exist. The focus is on numbers and notation, instead of function and communication. I find software shares more with theater or traditional writing than math, how ever cool the math is. It can certainly be taught, but I think a "writer's workshop" format would work better than the "here's the tools" method now used. Does anyone know if this has been tried? --Bethany Andres Beck


There's also The Feyerabend Project, which has a lot of cross-pollination with the Software-MFA stuff, since they're largely run by the same people. -- Jonathan Tang


See original on c2.com