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