Programming is a fascinating and challenging subject. Unfortunately, it
is rarely presented as such. Most often it is taught by "induction"
features of some famous programming languages are given operational
meaning (e.g. a loop "goes round and round"), a number of examples are
shown, and by induction, we are asked to develop other programs, often
radically different from the ones we've seen. Basically we are taught to
guess our programs, and then to patch up our guesses. Our errors are
given the cute name of "bugs". Fixing them becomes puzzle-solving, as
does finding tricks that exploit or avoid poorly designed features of
the programming language. The entire process is time-consuming and
expensive. And even so, we are never quite sure if our programs really
work in all cases. When approached in this way, programming is indeed a
dull activity. There is, however, another approach to programming, an
approach in which programs can be developed reliably, with attention to
the real issues. It is a practical approach based on methodically
developing programs from their specifications. Besides being practical,
it is exciting. Many programs can be developed with relative ease.
Problems which once were difficult can now be solved by beginners.
Elegant solutions bring great satisfaction. This is our subject. We are
interested in making programming an exciting topic!