Designed for the introductory computer science subject at MIT, this book presents a unique conceptual introduction to programming that should make it required reading for every computer scientist. The authors' main concern is to give their readers command of the major techniques used to control the complexity of large software systems: building abstractions, establishing conventional interfaces, and establishing new descriptive languages. Structure and Interpretation of Computer Programs covers a wide range of material, from simple numerical programs, through symbol manipulation, logic programming, interpretation, and compilation. Main sections of the book are: Building Abstractions with Procedures; Building Abstractions with Data; Modularity, Objects, and State, Meta-Linguistic Abstraction; and Computing with Register Machines. Each chapter includes numerous exercises and programming projects. As a programming language, the book uses Scheme, a modern dialect of LISP, which incorporates block structure and lexical scoping. This book inaugurates the MIT Electrical Engineering and Computer Science series, copublished with McGraw Hill.