How to design programs : an introduction to programming and computing - Felleisen, Matthias,; Findler, Robert Bruce,; Flatt, Matthew,; Krishnamurthi, Shriram, (The MIT Press APA, 2018)