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