Structure and Interpretation of Computer Programs, 2nd Edition by Harold Abelson & Gerald Jay Sussman