Computer scientists often need to learn new programming languages quickly. The best way to prepare for this is to understand the foundational principles that underlie even the most complicated industrial languages. This text for an undergraduate programming languages course distills great languages and their design principles down to easy-to-learn 'bridge' languages implemented by interpreters whose key parts are explained in the text. The book goes deep into the roots of both functional and object-oriented programming, and it shows how types and modules, including generics/polymorphism, contribute to effective programming. The book is not just about programming languages; it is also about programming. Through concepts, examples, and more than 300 practice exercises that exploit the interpreter, students learn not only what programming-language features are but also how to do things with them. Substantial implementation projects include Milner's type inference, both copying and mark-and-sweep garbage collection, and arithmetic on arbitrary-precision integers.
By far the worst book I've ever had to use to understand concepts. It already doesn't help that there are no resources for understanding the programming languages that are in this book, and on top of that it completely fails to prove the point on how learning languages with a weird syntax within a week is beneficial for a computer scientist. Learning existing programming languages makes sense but why make unnecessary modified versions of other languages with the most out-of-world syntax? On top of that the approach this book uses to explain concepts (for example, environments, expressions, etc.) is utterly counter-intuitive. The use of complex symbols and mathematical equations, AGAIN created from scratch, to illustrate simple ideas becomes even more confusing and defeats the purpose of "simplicity over complexity". I honestly can't understand why this book exists, 0/10 would not recommend.