Quite possibly the best mix of theory and practice I've ever encountered in a book on the guts of programming languages. It provides a mathematical foundation without getting bogged down in self-congratulation or formality and focuses on practical compilers and features of languages we use, including foundations of object oriented inheritance and how it's implemented. Also provding a look at the historical P-machine, virtual machine design and chapters on functional programming that are widely applicable, this book is particularly relevant now that most languages synthesize imperative, functional and deductive aspects.
Probably the biggest mark "Compiler Design" made on me was that, in its practicality it allowed me to write some toy compilers easily and think and build on what I'd seen, due to the practical approach and smooth conceptual layering of the chapters about actual compilation. In turn, I applied its ideas in places I didn't expect, such as thinking of interfaces between language environments and program modules as programs in a small language, and being able to think of production of metadata and execution of the program itself as different kinds of program interpretation. In some cases, programs one might not expect, such as real time information processing systems, lend themselves well to treatment using language like tools, despite expectations.