Structure And Interpretation Of Computer Programs →

: Introduces the fundamental elements of programming, including expressions, naming, and the "substitution model" for evaluating procedures. It explores recursion and higher-order procedures (functions that take other functions as arguments).

: Teaches how to design new programming languages to solve specific problems. This includes building a "meta-circular evaluator"—an interpreter for a language written in that same language. Structure and Interpretation of Computer Programs

The book is organized into five major sections that progress from basic elements to the building of entire computing systems: Structure and Interpretation of Computer Programs