Structure and Interpretation of Computer Programs, a book by Harold Abelson