Long ago~ the welfare of a sooiety used to depend heavily on the skill and dedioation of its oraftsmen - the miller~ the blaok smith~ the oobbler and the tailor. These oraftsmen aoquired their skill by a long and poorly paid apprentioeship to some master of their oraft. They learned by imitation and experienoe~ and by tri al and error. They did not read books or study soienoe~ they knew nothing of the theory of their subjeot~ the geometry of their ru dimentary drawings~ nor the mathematios underlying their primitive oaloulations. They oould not explain how or why they used their methods; yet they worked effeotively by themselves or in small teams to oomplete their tasks at a predioted oost~ to a fairly well predioted timesoale~ and usually to the satisfaotion of their olients. The programmer of today shares many of these attributes of a oraftsman. He learns his oraft by apprentioeship in an existing team of programmers - but his apprentiaeship is highZy paid and usually very short. He develops his skill by trial; but mostly by error. He does not study theory~ or even read books on Computer Soience. He knows nothing of the logical and mathematical founda tions of his profession; and he hates to explain or justifY~ or even to dooument what he has done.