Books by Hridesh Rajan
An Experiential Introduction to Principles of Programming Languages
A textbook that uses a hands-on approach to teach principles of programming languages, with Java as the implementation language.