Practical Object Oriented Design in Ruby
by Sandi Metz
This book was the best thing I read about software development all year. I had avoided reading it for a while because I'm not fond of Ruby, but decided to make a go of it after hearing Sandi speak on a couple of podcasts and conference talks she gave on the same topic. This book has made me much more conscious of the design decisions I make in my code, and how to write unit tests that are a help, not a hindrance. I'm looking forward to seeing how things evolve as I try to apply the techniques in production code.
With clear examples and explanations, Sandi covers how to design unit tests to make code easy to change; composition versus inheritance; designing good APIs for your objects; how to avoid writing big, hard to change classes by writing lots of small, easy to change classes; and more, all while weaving in all the SOLID principles using concrete examples. This book has excellent content and delivery; in my mind it's a model example for how to write a technical book that is engaging and useful.
by Ryan Roemer
Nothing in this book is extraneous; you are given a list of tools to use and shown how to use them to test your code. If you're starting to do more front end development and want to be effective quickly, pick up this book and get started.
I also started several technical books but didn't finish them.
Building Backbone Plugins
by Derick Bailey and Jerome Gravel-Niquet
Derick Bailey wrote the Marrionette.js framework, which sits on top of backbone.js, taking care of some of the boilerplate code that you often need when working directly with backbone.js. I may yet finish this book before the end of the year, which is a pretty good sign considering I'm meant to be on vacation. The book takes you through examples of extracting code from applications written with backbone.js into plugins. It basically exposes the author's thinking as he wrote Marrionette.js. Tentatively recommended, as I haven't finished reading it yet.
by Tom Stuart
I dropped this book because I was reading a lot of stuff related to my dayjob, and I didn't have the time or mental bandwidth to follow all the threads simultaneously. I plan to complete this one in 2015. Again, it's a book written in Ruby, but I was working on the exercises using Python. This actually helped me understand the content better. The translation from Ruby to Python meant I wasn't so fixated on the implementation, and I learned some things about Python, too. Great book so far.
by Nicholas C. Zakas
Mastering Object Oriented Python
by Steven F. Lott
Another long, dry but complete book. This was recommended as a good way to level up my Python skills. I put it down after reading the first couple of chapters because I was already familiar with the material. However, I think it's worth giving it another more serious shot. It looks like later chapters deal with some more obscure material.
I am very surprised to find I have only finished two programming books this year (out of a total of thirty-something books). I feel like I've done so much technical reading this year. I think the fact is that I just read a lot of blog posts and news. Also, I started several technical books and never finished them. I think there are two reasons for this: either I dropped a book for something more directly related to my dayjob, or the barrier to reading and taking notes was just too high. Turns out, I really don't like reading technical books in a digital format. I want to highlight, make notes in the margin and engage with the material. I need a physical book to do that. Next year I'll try to buy more physical copies of technical books in the hope that I get through more of them.