A method of programming

by Edsger Wybe Dijkstra, W. H. J. Feijen

An introduction to computer programming motivated by successively transforming mathematical characterizations of program state.