Programming is usually taught by examples.
I have never designed a language for its own sake.
My duty as a teacher is to train, educate future programmers.
Program construction consists of a sequence of refinement steps.
Software development is technical activity conducted by human beings.
It is evidently necessary to generate and test candidates for solutions in some systematic manner.
But active programming consists of the design of new programs, rather than contemplation of old programs.
Experience shows that the success of a programming course critically depends on the choice of these examples.
A good designer must rely on experience, on precise, logic thinking; and on pedantic exactness. No magic will do.
The possible solutions to a given problem emerge as the leaves of a tree, each node representing a point of deliberation and decision.