I'll end up writing a review of each of these eventually, but I thought I'd just share the titles:
- The Little Schemer, The Seasoned Schemer (both by by Daniel P. Friedman and Matthias Felleisen), and The Reasoned Schemer (by Daniel P. Friedman, William E. Byrd, and Oleg Kiselyov). I've been wanting to buy the "Schemer" books for quite some time: they're probably the strangest and best books on programming available. They're an introduction to software programming in Scheme (a Lisp dialect) written almost entirely as Socratic dialogues. I bought A Little Java, A Few Patterns by Felleisen and Friedman last year, which is an attempt to do something similar with Java. These books are brilliant. I can hardly wait to get going on them. We don't use Scheme at work, but the whole point of these books is not the learn a language, but to learn how to think about programming. That's definitely worth the investment of time and effort.
- Programming Erlang: Software for a Concurrent World by Joe Armstrong. Erlang is not a new language, but has been getting press and buzz in the last couple years. It's all about massive concurrency and distributed systems: it was developed by Ericsson to program telecom switches. I don't use Erlang in day-to-day work, but I wanted to get into some of the Erlang philosophy on concurrency, so I bought the book. Interestingly, Erlang seems to force you into doing what you're supposed to do in concurrent Java. I'm not expert on Java concurrency, but I'm above-average, concurrency being an interest of mine. Maybe I'll figure out a way to start using Erlang at work, but even if I can't, getting a glimpse at how Erlang does it is really helping me see how I ought to use Java in the context of concurrency.
- Higher-Order Perl: Transforming Programs with Programs by Mark Jason Dominus. Wow. My Perl is good (even "very good" or "fluent"), but this is a whole new level. Admittedly, I've figured out a lot of his tricks on my own, but this is an incredible book describing how to use functional programming techniques in Perl. It's almost like "How to use Perl like it's Lisp." This is an amazing book. I've been wanting to buy this for several months, and it was worth the wait. I do use Perl day-to-day, and my Perl is really very good. But this book will really help me ratchet up the level of my daily Perl grind.
- Expert Spring MVC and Web Flow by Seth Ladd, Darren Davison, Steven Devijver, and Colin Yates. I use Spring daily, and we've been slipping some Spring MVC in here and there at work. This book is supposedly the best on the subject, and I've been wanting to pick it up.
- Refactoring: Improving the Design of Existing Code by Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts. I end up with a lot of refactoring assignments at work, I finally decided to buy the definitive book on the subject. This is one I intend to read cover-to-cover.
So I have a lot of fun reading to do.
By the way, if you like books and you haven't tried it, you might want to check out LibraryThing. It's a great online application to track and maintain a virtual catalogue of all your books. I love it.