
. . .
For imperative programming:
D. Gries, The Science of Programming. Springer Verlag, New York, 1981.
E.W. Dijkstra, A Discipline of Programming. Prentice-Hall, 1975.
These are two excellant sources; I've learned from each and taught from each. However, they are both a bit stiff for the student with little background in logic or mathematics. Several texts did come out in the late 80's that taught the same approach from a more elementary starting point. Three such are E.W.Dijkstra and W.H.J. Feijen, A Method of Programming, Addison-Wesley, 1988, ISBN 0-201-17536-3 Geoff Dromey, Program Derivation/The Development of Programs from Specifications, Addison-Wesley, 1989, ISBN 0-201-41624-7 Edward Cohen, Programming in the 1990s, Springer-Verlag, 1990, ISBN 0-387-97382-6
For functional programming:
R. Bird, Introduction to Functional Programming using Haskell, 2nd edition. Prentice-Hall, 1998.
I'd like to hear abut more sources here as well. I've started in on Richard Bird and Oege de Moor, Algebra of Programming, Prentice Hall,1997, ISBN 0-13-507245-X but it is hardly elementary! Another very interesting text is John Cooke, Constructing Correct Software/the basics, Springer-Verlag, 1988, ISBN 3-540-76156-X which almost combines imperative and functional programming (and logical) by presenting a method of transforming (logical) specifications through functions into imperative programs. -- Bill Wood wtwjek@winternet.com