This textbook offers a deep understanding of the essential concepts of programming languages. The approach is analytic and hands-on. The text uses interpreters, written in Scheme, to express the semantics of many essential language elements in a way that is both clear and directly executable. It also examines some important program analyses. Extensive exercises explore many design and implementation alternatives.
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.