1. |
Title: |
A Discipline of Programming. |
2. |
Author: |
Edsger W.Dijkstra (Ph.D., Amsterdam), Burroughs Research Fellow and Professor Extraordinarius at the Technological University Eindhoven, the Netherlands. |
3. |
About the book: |
Presents programming for automatic computers as a scientific discipline. Stresses the formal aspects of correctness proving and program derivation as well as the informal aspects of problem solving. |
4. |
Outstanding features: |
1. |
It introduces "predicate transformers" as a means of defining the semantics of programming languages. |
2. |
About alternative and repetitive constructs theorems are derived which are of actual assistance in the act of program composition. |
3. |
It stresses total correctness over partial correctness. |
4. |
The treatment is not restricted to fully deterministic programming languages. |
5. |
In a series of worked-out examples great attention is given to the intertwined processes of problem solving and program development; for a longer program that solves a more difficult problem, the true design history is fully recorded. |
6. |
It uses a sober but well-chosen notation technique for programs and the reader, whose attention is no longer side-tracked by a wealth of fancy programming language features, can now concentrate upon the more fundamental aspects of the programming task. |
|
5. |
Teaching and learning aids in the book: |
The book does not contain the usual type of confusing diagrams (it contains, as a matter of fact, hardly any illustrations). |
6. |
Supplementary teaching material: |
None. |
7. |
Table of contents: |
Table of contents: Preface. Executional abstraction. The role of programming languages. States and their characterization. The characterization of semantics. The semantic characterization of a programming language. Two theorems. On the design of properly terminating constructs. Euclid's algorithm revisited. The formal treatment of some small examples. On non-determinacy being bounded. An essay on the notion: "The scope of variables". Array variables. The Linear Search Theorem. The problem of The Next Permutation. The problem of The Dutch National Flag. Updating a sequential file. Merging problems revisited. An exercise attributed to R.W.Hamming. The pattern matching problem. Writing a number as the sum of two squares. The problem of the smallest prime factor of a large number. The problem of the most isolated villages. The problem of the shortest subspanning tree. Rem's algorithm for the recording of equivalence classes. The problem of the convex hull in three dimensions. Finding the maximal strong components in a directed graph. On manuals and implementations. In retrospect. |
8. |
Competing books: |
Richard Conway, David Gries, "An Introduction to Programming" (Winthrop Publishers Inc., 1973) paperback, 460 pp. $??.??. More than 220 pages are devoted to the description of the idiosyncrasies of the programming language of their choice, leading to complicated treatment of simple problems, compared to Dijkstra's simple treatment of complicated problems.
Niklaus Wirth, "Systematic Programming: An Introduction" (Prentice-Hall, 1973), hard cover, 167 pp. $??.??. Only one sixth (25 pp) of this book deals explicitly with the act of programming, and much of its space is devoted to truly introductory material, in contrast to Dijkstra's more advanced treatment that does not deal with things such as number systems, the ASCII character code, etc., which can be found in any other book on computers and programming. |