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...