This book provides students with a deep, working understanding of the essential concepts of programming languages. Most of these essentials relate to the semantics, or meaning, of program elements, and the text uses interpreters (short programs that directly analyze an abstract representation of the program text) to express the semantics of many essential language elements in a way that is both clear and executable. The approach is both analytical and hands-on. The book provides views of programming languages using widely varying levels of abstraction, maintaining a clear connection between the high-level and low-level views. Exercises are a vital part of the text and are scattered throughout; the text explains the key concepts, and the exercises explore alternative designs and other issues. The complete Scheme code for all the interpreters and analyzers in the book can be found online through The MIT Press Web site.
For this new edition, each chapter has been revised and many new exercises have been added. Significant additions have been made to the text, including completely new chapters on modules and continuation-passing style. Essentials of Programming Languages can be used for both graduate and undergraduate courses, and for continuing education courses for programmers.
Daniel P. Friedman is Professor of Computer Science in the School of Informatics, Computing, and Engineering at Indiana University and is the author of many books published by the MIT Press, including The Little Schemer and The Seasoned Schemer (with Matthias Felleisen); The Little Prover (with Carl Eastlund); and The Reasoned Schemer (with William E. Byrd, Oleg Kiselyov, and Jason Hemann).
I have not yet finished this book, so this review is a work in progress as I read through the book. This is a review of the 3rd edition.
I have already read SICP cover to cover, and I have written a partial r7rs scheme implementation (I eventually abandoned the effort to write a compiler to explore type theory). I am reading this book as a step towards reading TaPL and PFPL.
I was hoping this book would be a more modern SICP, and at times it felt like it could be. I was also hoping to use this book to cover grammars and induction - both of which this book has delivered on.
I expected this book to be quite simple, and for my background it has been, at times tedious. This book however doesn't actually introduce or teach scheme, it is taken as a given that the reader either knows scheme or can muddle their way through it.
Most of the examples are very briefly explained, and I found many of them ambiguous. This text also lacks any solutions or hints section, which is frustrating as I am not reading this within a classroom environment. Likewise there aren't many online solutions for the 3rd edition, the only set I could find that was of any quality only goes up to the end of chapter 3.
For these reasons I find this book very odd - it seems to want to target beginners in a classroom environment, meanwhile it doesn't cover things that I think are needed to help beginners along. Outside of a classroom environment it is almost entirely useless to a beginner (due to lack of scheme tutorial and solution section), and many of the exercises (at least so far) are quite tedious for an experienced programmer.
I wish there was a solutions section, or at the least an online collection of solutions. I also wish that the exercises were more verbose, or at the least that there was an online collection of the exercises in more verbose form - some of the questions are very gating, either you get it (likely because you already knew the answer) or you wont get it without asking for help.
I am only up to chapter 3 so far, so I expect the difficulty of the exercises to increase, I will update this as I make further progress.
Good explanation of concepts, but a bit difficult to understand because of the choice of programming language (Scheme). It's a good read, as long as you don't get discouraged by the code.
I already know a lot of stuff that the book has covered before reading it, so reading the book didn't make me super excited. But I have nothing to complain about the contents of the book. People without any programming language theory knowledge can use this book for introduction.