When I went to school, my languages and compilers class used the dragon book. I think I ended up opening it four times. It’s a great book, and when it comes to compiler/parser design, it’s definitely a classic. But it’s not really an undergraduate text. It’s also dated, and not in the timeless way of K&R. But it makes a cameo in Hackers, and as such I’ll never get rid of it.
By comparison, Programming Language Pragmatics is much more broad, while at the same time accessible. Weighing in with just short of 900 pages (with another 500 or so on the CD), it covers a lot of material, but does a decent job of trying to keep it accessible. It is perhaps the perfect introductory text in computer language design; it offers a good survey of what’s out there, and does a good job of getting one thinking about language design and mechanics. The bibliographical references are excellent, and provide plenty of room for further exploration.
It’s not perfect; it gives an awful lot of focus to languages that are historically significant or influential, despite their current irrelevance. I think it spends way too much time focusing on specific scripting language/shell functionality. I think some of the discussion of the front and back end is too high-level — it tries to overly simplify a rather difficult topic. It is full of a ton of pointless metadata, which we know I’m not fond of: Huge introductions, summaries, and numerous instances of “we’ll talk about this in section X.”
Still, I think it’s probably hard to beat for what it does. 8/10.