How to Design Programs: An Introduction to Programming and Computing - Felleisen (IEEE, 2003)