Two thumbs up to TaPL, Benjamin Pierce’s richly informative and surprisingly readable guide to the world of type systems and programming languages. After reading through the first couple of hundred pages, I can now plausibly claim to know something about operational semantics and the difference between the call-by-name and call-by-value reduction strategies.
I now need to sit down and work through some of the exercises, so that I have some chops worked up for dealing with the later stuff.
TaPL and CTM are both big, heavy books full of big, heavy ideas. Unlike some of the big heavy books full of big heavy ideas I used to read as an undergraduate, they have a clear sense of pedagogical purpose: their job is to get you from A to SUCC A, rather than to completely wow you with how amazingly complex all that stuff is. (I’m being slightly unfair to Derrida here, who can’t really be faulted for failing to produce a handy undergraduate guide to western metaphysics and the closure of the logocentric epoch when that wasn’t what he was trying to do in the first place…)
Having asked my colleague Tosh to bring me back a cheap Indian edition of the famous “Dragon” book (Aho, Sethi and Ullman, on compilers) last time he went back to Mumbai, I’m ashamed to admit I’ve hardly read it beyond the early chapters on parsing. It’s thorough, but very dry. Comparison with TaPL really highlight’s Pierce’s skill as a writer - by which I don’t mean literary flourish, but ability to find a clear path through thickets of material, and to guide the reader along that path.