When we had no computers, we had no programming problem either.
When we had a few computers, we had a mild programming problem.
Confronted with machines a million times as powerful, we are faced with a gigantic programming problem.
The programming problem is gigantic because
viewed as string of operations on a collection of variables, each individual computation is a gigantic object;
the individual computation depending on the input, a single program has to be able to control a gigantic number of different possible computations.
As a result, programming has become one of our most demanding intellectual activities, requiring great clarity of expression and the utmost economy of reasoning.
This conclusion has never been refuted; it is, however, regularly denied because of its uncomfortable implications.
It is vigorously denied by the computer industry, which would sell you its products rather as solutions to your old problems than as the source of terrifying new ones.
It is vigorously denied by those customers that otherwise would have to admit that their computer manufacturer has fooled them.
[Remember that computers are preferably sold by dealing with such a high level of the customer's hierarchy that incompetence in computing is assured and objections from the technically competent can be overruled.]
It is vigorously denied by those in computing that by its implications would be demoted to the rank of amateur.
[Remember: the surest way of making software design prohibitively expensive is viewing it as a production job to be done by cheap labour.]
It is denied in those companies whose top management consists of lawyers and accountants, as their management lore has all its roots predating the advent of the high-technology industry.
It is also denied by the personal-computer enthusiast that fails to distinguish between a barber and a team of surgeons.
Back to the irrefuted conclusion that programming is very difficult; its acceptance gave rise to Programming Methodology as a topic of explicit scientific concern.
In 15 years of Programming Methodology we have seen the combination of spectacular progress and sharp limitations.
Many formerly notoriously opaque algorithms now have "ingeniously simple and effective" explanations, which are jewels of clarity.
Sophisticated new algorithms are being derived which, 15 years ago, would have been absolutely impossible to conceive. But.....
Current mathematical style —which grew in response to other challenges— limits the applicability to relatively small programs.
The circumstances shaping the challenge, we try to redefine Mathematics from "The abstract science of space, number, and quantity" (COD) to "The (art and) science of effective reasoning".
We have learnt that calculi of all sorts have a major role to play.
We have learnt that it pays to design, for each calculus to be used, with great care a notation geared to one's manipulative needs.
We have learnt that most philosophers (those of mathematics included) are eminently ignorable.
We have learnt that a formalism's major purpose can be to free us from the shackles of our native language and the reasoning patterns induced thereby.
[Being "counter-intuitive" should not be held against any formalism that enables us to accomplish what is beyond the unaided mind.]
We have learnt that programming methodology and mathematical methodology in general are not so far apart at all. (For instance, a conscious separation of concerns is equally valuable for both.)
We have learnt that a purely syntactic analysis of the formal requirement can give heuristic guidance to the point of generating the best possible solution.
We have learnt that the potential for improvement can be dramatic, e.g. reducing a formal proof of two dozen steps to an equally formal proof of one step.
(Example.)
We have learnt that it pays to be ruthlessly pragmatic, but.....
We have also learnt that it is still very hard to sell to industry the economic value of mathematical elegance.
Austin, 5 June 1986
prof. dr. Edsger W. Dijkstra
Department of Computer Sciences
The University of Texas at Austin
Austin, TX 78712-1188
USA
transcribed by Martijn van der Veen
revised Fri, 28 May 2010