“He who loves practice without theory is like the sailor who boards ship without a rudder and compass and never knows where he may be cast.” Leonardo da Vinci (1452–1519) Computer programming has been, largely, an intuitive activity. Programmers are taught to understand programming in operational terms, i.e., how a computer executes a program. As the field has matured, we see many effective theories for designing and reasoning about computer programs in specific domains. Such theories reduce the mental effort, and the amount of experimentation needed to design a product. They are as indispensable for their domains as calculus is for solving scientific and engineering problems. I am attracted to effective theories primarily because they save labor (for the human and the computer), and secondarily because they give us better assurance about the properties of programs. The original inspiration to design a computer science course which illustrates the applications of effective theories in practice came from Elaine Rich and
To submit an update or takedown request for this paper, please submit an Update/Correction/Removal Request.