At the Forge

2011 Book Roundup

Reuven M. Lerner

Issue #211, November 2011

Reuven's annual list of recommended books and podcasts for open-source developers.

Each year, I like to step back and write an article describing and recommending some of the computer-related books I have most enjoyed during the previous 12 months. I'm fortunate to come across a very wide variety of books, as well as journals and podcasts, and I enjoy sharing the best of what I've found. I believe that everyone in our industry should try to keep their skills up to speed not only by practicing software development, but also by learning more about it.

My rules for these reviews are pretty simple. If I discovered and read a book during the past 12 months or so, it's fair game for me to mention it. It's possible that some of the books I discuss here were written and published long ago, but if it's new to me, I include it. I don't promise to be comprehensive. I can judge only the books that came my way. And, I obviously have my favorite technologies, which tend to get more of my attention.

Ruby and Rails

Ruby continues to be my favorite programming language, one I use every day, and it pleasantly continues to surprise me. Much of my work in Ruby is as a Web developer, using the Ruby on Rails framework. I do share the concerns some have expressed—that Rails is becoming too complicated for newcomers, in part because of its adoption of many new, unusual or Rails-specific technologies in recent versions. However, I still think that if you're writing a Web application, you would be wise at least to consider Ruby on Rails.

I'm not the only person who feels this way, which is why a torrent of Ruby books continues to be published. One of the best I've seen in the past year is Eloquent Ruby by Russ Olsen (Addison-Wesley, ISBN 978-0321584106). This book is aimed at intermediate-to-advanced Ruby programmers who want to write code that's not only functional, but also takes advantage of the language's best characteristics. Some of the techniques are a bit advanced, but I'm all in favor of learning such techniques, even if I never use them, because they deepen my understanding of the language. This book has deservedly received a great deal of praise.

For people new to Ruby and who want to learn how to develop Web applications using Rails, Michael Hartl has produced a book, “Ruby on Rails 3 Tutorial” (Addison-Wesley, ISBN 978-0321743121) and an accompanying video. I must admit I haven't yet watched the video, but the book is a great introduction to the environment, spirit and techniques of Rails development. The book has the attitude that you can learn the Ruby language while you're also learning Rails, and although I think that a better foundation probably is appropriate before jumping into Web development, it's far from a fatal flaw. The book, which is aimed explicitly at beginners, is full of useful tidbits and hints on Ruby, includes hosting an application on Heroku, and also is about Rails and Web development in general.

One of the first books about Ruby to be published is The Ruby Way by Hal Fulton, and a second edition was published several years ago. In the wake of this success, Obie Fernandez published The Rails Way, an almost encyclopedic description of Ruby on Rails and the way it can (and should) be used. This past year, Fernandez published an updated version of this book, The Rails 3 Way (Addison-Wesley, ISBN 978-0321601667), and although there are many improvements and interesting tidbits in this book, it's no longer as extensive and encyclopedic as the previous edition. Now, that's not necessarily a bad thing, given that Fernandez is well known in the Rails community, and he's trying to show what technologies he uses, as opposed to the ones that others might use. That said, I learn something new every time I read through this book, typically saving me time in the future. So, I recommend that Rails developers read this book, but only after they've had sufficient grounding in Rails.

Two more books, both from the Pragmatic Programmers, are worth a look for Rails developers: Continuous Testing with Ruby by Ben Rady and Rod Coffin (ISBN 978-1934356708) gives a step-by-step introduction to the world of automated testing and how you can incorporate it into your Ruby development environment. Meanwhile, Jose Valim, author of the popular “Devise” gem for authentication in Rails, has written Crafting Rails Applications (ISBN 978-1934356739), which is less an introduction to Rails applications than a tour of interesting projects you can do with Rails, using advanced techniques that might well come in handy.

Finally, I read at least two nice short, independently published books during the past year. Rails 3 Upgrade Handbook by Jeremy McAnally (www.railsupgradehandbook.com) is a short but extremely useful guide to moving your Rails applications from version 2 to version 3. If you haven't yet made this change, McAnally walks you through many of the necessary steps to get it done. Separately, Avdi Grimm, an independent developer, blogger and podcaster, published a great little book about exceptions and how to use them called Exceptional Ruby (exceptionalruby.com). Unless you're thoroughly schooled in the way Ruby exceptions work, this is a great book to read through, understand and then put into practice in your own projects.

JavaScript

It seems I'm not the only programmer whose feelings about JavaScript have changed dramatically during the years. First, I dismissed it as a toy language that wasn't good for much. Next, I cursed it every time I had to deal with it, because of the strange syntax and conditions, and then I cursed the implementations of the language, which were slow, buggy and incompatible with one another. Then, almost overnight, JavaScript changed—or at least, my attitude toward it did. The differences between browsers were easily ignored, thanks to libraries like Prototype and jQuery. Bugs were fixed, and JavaScript engines were tuned and re-tuned, making it a very fast-executing language. And libraries grew over time, such that you now can do amazing things with JavaScript. I still find the language to be a bit verbose and annoying in some ways, but there's no doubt that JavaScript development is an integral part of any modern Web developer's toolbox, and understanding the way it works is essential.

Two great books that can help push you forward are Eloquent JavaScript by Marijn Haverbeke (ISBN 978-1593272821, and at eloquentjavascript.net), which introduces programming at a basic level, but does so by showing many powerful and interesting techniques JavaScript has to offer. Even if you're a seasoned JavaScript hacker, it's worth looking at this book. A nice thing about the on-line edition, available for free at the URL listed above, is that you can run the code right in your browser. I've also seen many mentions of the JavaScript Cookbook by Shelley Powers (O'Reilly, ISBN 978-0596806132). It doesn't aim to be a JavaScript tutorial, but rather a collection of short techniques, ideas and articles describing common tasks that JavaScript coders might need. If you're using JavaScript—and nearly all Web developers are doing so nowadays—you probably will get a lot out of this book.

Now that JavaScript executes so quickly and is universally available in browsers, we've seen the beginning of two new trends: Web frameworks that operate within the browser, using only JavaScript, and languages that compile into JavaScript, rather than into byte code or binary executables. For now, the only reference to Backbone.js that I have seen is a screencast from Peepcode (https://peepcode.com/products/backbone-js), which I enjoyed and from which I learned quite a bit. Meanwhile, if you're interested in trying CoffeeScript—a language that compiles into JavaScript, which is mandatory in Rails 3.1, and which has taken the JavaScript world by storm—you probably should read Trevor Burnham's CoffeeScript: Accelerated JavaScript Development (Pragmatic Programmers, ISBN 978-1934356784), which introduces the language and describes how you can use it.

Other Technologies

Although my main language is Ruby, I still like and appreciate Python quite a bit, and I still get to use it in some of my projects. Mark Lutz, who has written many editions of Learning Python and Programming Python for O'Reilly has come out with his latest book, Programming Python 4th edition (ISBN 978-0-596-15810-1). If you're using Python, you probably want to have this book on your shelf, so that you can refer to it on a regular basis. More-advanced Python programmers would do well to read Pro Python (Apress, ISBN 978-1430227571), which describes the behind-the-scenes implementation of many Python idioms, such as metaclasses and common protocols, which really can come in handy.

HTML and CSS form the foundation of the Web, and HTML5 includes so many new features that learning them can take some time. From the Pragmatic Programmers comes HTML5 and CSS3 by Brian Hogan. This book is written well, providing (I think) a gentler introduction to the subject than many other books. Another great introduction, but one that focuses on other aspects of HTML5, is Mark Pilgrim's on-line Dive into HTML5 (diveintohtml5.org), also available as a print book, HTML5: Up and Running (O'Reilly, 978-0596806026).

Regular readers of my articles know that I have long used PostgreSQL for all of my relational database needs. Although I believe that PostgreSQL is a better fit for most projects than MySQL and offers a powerful host of features that is a serious match for open-source and commercial databases alike, it's a sad fact that there aren't very many books about PostgreSQL on the market. Fortunately, Packt Press has released two very high-quality books in the past year: PostgreSQL 9 Administration Cookbook by Simon Riggs and Hannu Krosing (ISBN 978-1849510288) and PostgreSQL 9.0 High Performance by Gregory Smith (ISBN 978-1849510301). I personally refer to these books all the time when working on clients' projects, and I always learn something from them.

Other Languages

Lisp is one of those languages that people either swoon over and dream about or despise with a passion. I'm strongly in the first category, and, thus, I continue to enjoy the fact that Lisp books still are published. A hilarious and excellent introduction to Lisp, Land of Lisp, teaches Lisp programming and concepts by writing games. I really enjoyed reading this book, and I think it's worth the time even if you don't write programs or plan to develop in Lisp.

I'm still working my way through it, but I want to mention Learn You a Haskell for Great Good! (No Starch Press, ISBN 978-1593272838), which is both funny and interesting, and it finally has managed to keep my attention for a while on learning Haskell. I'm not sure if I'll ever use Haskell in a real project, but I feel like at least I'm in a better position to understand its strengths and weaknesses.

R is a statistics language that I've been using for many years, and it seems to be getting more popular over time. O'Reilly has published the R Cookbook (ISBN 978-0596809157), which, in contrast to the many free books available on-line, takes a very practical approach to doing things in R, whose data types and functions are a bit different from other languages I've used.

Podcasts

I've become quite a fan of podcasts during the past few years, in part because I tend to sit on the train a great deal, as well as walk to clients' offices from the nearest train stop, which isn't always nearby! Fortunately, many high-quality, interesting podcasts exist—far more than I have time to listen to. I'm listing here those that have to do with open-source and Web development; obviously many others are available on-line on a variety of other interesting topics.

Two of my staples are done by the pair of Jason Seifer and Peter Cooper: “The Ruby Show” (rubyshow.com) and its younger sibling “The JavaScript Show” (javascriptshow.com) are half-hour, weekly news updates on the state of each of these languages and the development frameworks built on them. I imagine their humor is not for everyone, but I find Jason and Peter to be entertaining as well as informative, and regret when they (or I) miss a week.

Another good open-source podcast is the “Changelog” (thechangelog.com), a weekly hour-long interview podcast hosted by Adam Stacoviak and Wynn Netherland.

Finally, one of the most thought-provoking and interesting podcasts I've started to listen to is “Ruby Rogues” hosted by Charles Max Wood (rubyrogues.com) with a panel of distinguished Rubyists every week. Now, it's true that the panel comes from the Ruby world, and the discussion centers around the Ruby language, but the panelists are serious and clever software engineers who take pride in their craft and always are learning how to do things better, which means the discussion is deeper than most other blogs and podcasts I follow. If you're interested in hearing how truly great software engineers think, this is a great weekly one-hour dose.

Non-Computer Books

It's true that I tend to read a great many computer-related books during the year, but I'm happy to report that I read about other subjects as well. Two of the most interesting books I've read in the past year are Country Driving by Peter Hessler (ISBN 978-0061804090), the former China correspondent for the New Yorker, who provides an interesting and nuanced picture of modern China.

Another book about that area of the world, which was haunting and disturbing more than anything else, was Nothing to Envy by Barbara Demick (ISBN 978-0385523912), in which she describes what life is like in North Korea. The stories she tells in this book, based on interviews with North Koreans who escaped, are beautifully told but horrifying to read all the same.

I also read two books by Gail Collins, the New York Times columnist, about the history of women in America: When Everything Changed (covering the 1960s through the present) and America's Women (ISBN 978-0060185107), describing the history of the United States from colonial times through the 1960s, but from a woman's perspective.

Finally, I'm currently in the middle of How Rome Fell by Adrian Goldsworthy (ISBN 978-0300137194). My high-school history classes didn't go into much detail on most subjects, and I'm learning through this book just how much I don't know about an empire that ruled the part of the world in which I currently live, and whose influence still can be felt today by a very large number of people. Although the book is about how the Roman empire fell, I'm using it as a way to better understand how it worked when it did, and I'm enjoying having that opportunity.

I'm sure I could recommend many other books, but these were the first that came to mind. My next article will return to our regularly scheduled program, looking more at open-source Web technologies that can help us put the ideas from these books into practice for ourselves and our clients.

Reuven M. Lerner is a longtime Web developer, architect and trainer. He is a PhD candidate in learning sciences at Northwestern University, researching the design and analysis of collaborative on-line communities. Reuven lives with his wife and three children in Modi'in, Israel.