Structure and Interpretation of Computer Programs 2nd Edition by Harold Abelson