Harold Abelson Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)