The authors and publishers here must not have heard that when you write one of the best texts on the market in a subject area, at nearly 1,000 pages, you're supposed to hose students and shoppers with the price! THANK YOU for CARING about our budgets!
As other reviewers have stated, this is NOT a beginner's book, as it assumes you know the basics of programming paradigms and structures. HOWEVER, if you know coding relatively well in at least one language, and understand the basics of compilers and machine-code interfaces, you CAN PROFIT GREATLY from this text with Wiki close at hand. For example, want to explore how name binding and scope differ between imperative and functional? This will give you the answers, but you'll need to re-study the concepts themselves to follow the logic, as the descriptions are both broad ranging and detailed.
We recommend this text to technical libraries along with two others: Engineering a Compiler, Second Edition and Programming Language Processors in Java: Compilers and Interpreters. Why? Because the ACADEMIC approach to this topic is almost always functional (read: Lisp, Scheme, Racket, Clojure, etc.) because those languages, although tough, make great IDE's/SDK's for creating an entire development environment, from machine language to compiler/interpreter, all virtual.
I'm into it and love Lisp, but if you then mention the word "practical" you and I both know that we're not going to be asked to solve a problem in Racket, even though we might model it there! And this text is WAY practical, favoring object orientation as well as concurrent/parallel problems because: that's where the problems ARE today! You can certainly model and solve them in Lisp, but we have to face reality-- companies and customers will want it in C, C++, C# Java, Python, etc. at a minimum.
But given that, this text also has extreme inductive value-- generalizing those language concepts to non specific principles you'll need from the 30,000 foot view in selecting mixed paradigms, stack vs. heap choices, data structure decisions, etc. NOT an easy read, but every page is packed with relevant insights, and is an eye opener about very recent research in numerous interface areas (memory, compiler, queueing, calls, binding strategies, etc.). Recommended at the normal publisher's usurious price of over $200, a MUST have with an author/publisher willing to price this fine a text within reach of those of us on a budget, or the parents of students on a budget. I sure wish other authors/publishers would take a lesson from this title. I kid you not, a similar but dated title from Springer is going for $251 used here on Amazon, and is good, but not nearly as good as this one!
CD NOTE: The publisher's review comments on the "companion CD" even for the third edition, which is incorrect. ALL CD materials for the new/paperback edition have been moved to the elsevierdirect dot com companion site (/ISBN 13). So DO NOT RETURN THIS BOOK BECAUSE YOU THINK THEY FORGOT THE CD! It still talks all about the "companion CD" in the intro and at the end, but you have to read the tiny box at the very bottom of the very last page (911) to see the message that the CD is no longer included! Just didn't want you to think you were ripped off.
Library Picks reviews only for the benefit of Amazon shoppers and has nothing to do with Amazon, the authors, manufacturers or publishers of the items we review. We always buy the items we review for the sake of objectivity, and although we search for gems, are not shy about trashing an item if it's a waste of time or money for Amazon shoppers. If the reviewer identifies herself, her job or her field, it is only as a point of reference to help you gauge the background and any biases.