I’m currently reading Programming Ruby (2nd edition) in my pursuit to learn Ruby. This book, known as the PickAxe because of the tool on the front cover, is part tutorial, part language reference, part best-Ruby-practices, and part API/Library reference.
The tendency with a reference book like this is to lump everything about a particular topic into long, boring sections. However, Dave Thomas and co-authors have managed not to do this. The book is good at switching gears frequently enough to keep my focus. Notes comparing Ruby to Perl, Java, and C++ add perspective if you are familiar with those languages. The code samples in this book also set it apart from similar programming books: the examples are concise–giving just enough information to illustrate the point in question.
As I read through the book, I find myself thinking: “Wow, it would’ve taken me so much more code to do that in Java (or C++ or …)!”
I’ve recently been reading Linux Kernel Development (2nd Edition) by Robert Love.
I’m not a kernel hacker, and it’s been a while since I’ve coded in C, but I picked this up to learn more about the nitty gritty details of the operating system I use everyday. I like the special attention given to overall concepts and how certain aspects of the kernel came into being. A good read.