How to Design Programs
September 2003 Version