How to design programs: an introduction to programming and computing - Felleison, Matthias (Prentice-Hall of India pvt ltd, 2004)