2013 Book Roundup

I'm always amazed to hear about the death of the publishing industry.
True, books and (gulp) magazines are often fighting for their lives,
and the state of journalism is in tatters. But at the same time, we
continue to see a large number of high-quality books being published.
This past year was no exception; I read many books that really
enlightened me, giving me new ideas in areas of technology, business
and life in general.

So as I do at roughly this time every year, here's a roundup of
the most interesting books I've read during the last year. This is
not a representative sample; it reflects a combination of books that I
bought and received for review, generally because I saw or noticed
them. I expect there are many good books I haven't
read, but that just means they'll likely be on the list for next
year. This also means there almost certainly are some books on
this list that I saw for the first time in the past year, but which
were published before then.

Programming Languages

As someone who develops software on a regular basis, and also teaches
programming to a large number of people, programming languages
still are a subject that I enjoy reading and learning about. The
languages I use most often—Ruby, Python and JavaScript—are
the subjects of a constant stream of books, many of which are no
longer simple tutorials, but explorations of specific topics that will
be of interest to many developers working with the language.

Python for Data Analysis by Wes McKinney (O'Reilly,
ISBN:
978-1-449-31979-3) is an introduction to manipulating data with two
well-known Python libraries, NumPy (for numeric analysis and some
highly efficient data structures) and Pandas (for data analysis).
Reading through the description of these libraries reminded me greatly
of the excellent R language for data analysis and manipulation, as
well as the relational algebra that we know (and love!) in SQL. The
advantage of Pandas is that it allows you to integrate the analysis into
a language you are already using, rather than having to learn a new
one. The
book is full of examples and practical hints; if you ever have wanted
to learn how to analyze, manipulate and plot your data, this is
a great way to get started, in an excellent and readable language.

Python is remarkable in numerous ways, among them the fact that it is
an excellent language for beginning programmers, as well as for
experienced professionals. Jason Briggs has written Python for
Kids
(No Starch Press, ISBN: 978-1593274078), which introduces programming
to children aged ten and up through playful examples, including
GUI-based programs using the Tk library. The use of child-friendly
examples and humor (for example, "Want to hear a dirty joke? A pig fell in
the mud!") makes me want to re-start the programming lessons that I've
given my own children.

Ruby, the language I use most often in my day-to-day work, has
been the focus of several excellent books through the last year. Perhaps
the most celebrated book is Practical Object-Oriented Design in
Ruby
by Sandi Metz (Prentice Hall, ISBN: 978-0321721334). If you are
familiar with object-oriented programming principles, the
ones Metz mentions will not be new. However, the examples
that Metz provides are so clear, and the practical guidelines and
suggestions that stem from these ideas so compelling, that this book
is a must-read for everyone in the Ruby community, and even
for those using other object-oriented languages.

In a similar vein is Confident Ruby, a
self-published e-book by Avdi Grimm. Grimm
starts off with the
assertion that Ruby makes software so easy to write, and to write
quickly, that we do so too quickly, creating impossible-to-understand
libraries. Grimm's writing is always clear and interesting, and in
this book, he breaks down the types of code we are likely to write
most often—classes and methods—and gives us guidelines for doing
so faster and better.

My last choice on the Ruby front is another self-published book,
Working with Ruby Threads by Jessie Storimer. I must
admit that I'm one of those programmers who hasn't worked much with
threads over the years (since Web applications tend not to use them
much), so I've gained a bit of an aversion to threads.
This book really opened my eyes to issues regarding
threading, the differences between Ruby implementations in this area
and alternative solutions to the problems.

As a Web developer, the third language that I tend to use a fair
amount is JavaScript. JavaScript is an increasingly popular language,
both because it is ubiquitous and implementations have
been increasingly speedy. JavaScript, for all of its flaws, is here
to stay, and all Web developers need to understand how it works,
rather than treat it as a language they're forced to work with.

Two books that came out in the last year from O'Reilly provide
examples and information that you can use to improve your understanding
and methodology of working with JavaScript. Testable
JavaScript by
Mark Ethan Trostler (ISBN: 978-1449323394) shows a number of
different techniques for testing JavaScript code and describes how to
put them in action, using such tools as PhantomJS. Learning from
jQuery by Callum Macrae (ISBN: 978-1-4493-3519-9) is aimed at those
developers who know how to do things from within jQuery, but don't
understand how to do those same things from the underlying JavaScript.
For someone who has been working in JavaScript for a while, this book
probably will be unnecessary, but if you are a "jQuery
developer"
rather than a "JavaScript developer", it might well help make
the transition and deepen your understanding of JavaScript.

JavaScript has a number of quirks that make it difficult for
programmers to move, conceptually, from other languages. As such,
a number of books have been aimed at helping programmers make
the transition. A great book on this front is JavaScript
Allonge
by Reginald Braithwaite,
available both as a purchased PDF and as a free HTML version for
on-line reading. The book is funny, interesting and helps programmers
really understand why JavaScript works the way it does. I have
been using JavaScript since it was invented, in a number of different
ways, and I still enjoyed the style and content of Braithwaite's book.

You might also want to consider JavaScript Enlightenment by Cody
Lindley (ISBN: 978-1-4493-4288-3), which is organized more as a
cookbook of programming paradigms in JavaScript, as opposed to
JavaScript Allonge, which has more of a narrative style.

Of course, other programming languages exist, and I've
been trying to dip my toes into those waters. I've played a little
bit with Erlang in the past few years, and although I'm not convinced
I'll do a lot of work with it, I do like many of its ideas and
find it useful and enlightening to try it out. Learn You
Some Erlang for Great Good by Fred
Hebert (No Starch Press, ISBN: 978-1-59327-435-1) is a large book (600+ pages), which
introduces the Erlang language and its many facets, including a great
emphasis on testing.

Several months ago, I covered the basics of Web development using the
Clojure language, a modern Lisp that runs on the JVM. Web
Development with Clojure by Dmitri Sotnikov (Pragmatic Programmers,
ISBN: 978-1-937785-64-2) is a gentle introduction to
creating Web applications in Clojure, using such libraries as
Compojure. The book is aimed at beginners, and it seems to do a solid
job of introducing the features of the language that will be useful
for Web development. If you are interested in this area and haven't
found the on-line tutorials to be sufficiently detailed or helpful,
this book probably will serve you well.

Concepts and Techniques

A number of books aim not at discussing a particular language, but
rather ideas and techniques for working with them. Most intriguing among
them is Seven Concurrency Patterns in Seven Weeks by
Paul Butcher
(Pragmatic Programmers, ISBN: 978-1-93778-565-9). It
assumes that threading is difficult and bad, and looks at alternatives
to threading to enable safe, concurrent execution. I would say that
this book is a good followup to Jessie Storimer's book on Ruby and
threads, but this is likely a good read for anyone who is working with
threads and wants to find a better way for programs to remove the
dangers and frustrations of thread-based programs.

Avdi Grimm's second book of the year, Much Ado about
Naught, is a
surprisingly interesting read about a subject I quite frankly
never expected to think or talk about. The fact that the book is
written using TDD techniques also is a good introduction to the
subject for people who are new to testing.

Finally, Facebook and LinkedIn might be well known social networks,
but the world of social-network analysis has existed for many years
and provides techniques that can help you understand your users
better. Social Network Analysis for Startups by Maksim Tsvetovat
and Alexander Kouznetsov (ISBN: 978-1449306465) introduces the core
ideas of SNA and then demonstrates how to apply them using Python
code. If your Web applications involve groups of people, you
might well be able to benefit from this book to see how they are
connected.

Frameworks

Increasingly, Web developers don't create applications with just a
programming language, but in a framework as well. Nowadays, Web
developers typically use two different frameworks, one for the server
(such as Ruby on Rails or Django) and another for the browser, written
in JavaScript (such as AngularJS or Backbone).

The Pragmatic Programmers, continuing its Seven ___ in Seven
Weeks
series (including the book on concurrency patterns mentioned above),
have come out with Seven Web Frameworks in Seven Weeks by Jack
Moffitt and Fred Daoud (ISBN: 978-1-93778-563-5), which covers some
server-side frameworks and some client-side ones. The idea, as with
their other books, is to give you experience and understanding of the
frameworks—not to become an expert in them, but rather to gain an
appreciation for the ways they work. Just as learning a new
programming language can be a useful and enlightening experience, so
too can learning a new Web application framework. Experienced Web
developers who are eager to learn new paradigms definitely should take
a look at this book.

Die-hard Rails developers will be delighted to see that the Pragmatic
Programmers have released an update to Crafting Rails 4
Applications by Jose Valim
(ISBN: 978-1-937785-55-0). This book doesn't even pretend to
teach MVC, Rails conventions or anything else that nearly every Rails
book starts with. Instead, the first chapter starts with the creation
of a Rails plugin, and things get hairier and more interesting from
there. If you are working on complex Rails applications, or just want
to gain a better appreciation and understanding of the framework, you
likely will want to read this book.

Client-side frameworks, written in JavaScript, continue to be popular.
But in the last year or two, we have seen growing interest in
full-scale MVC frameworks, beyond the bare-bones capabilities that
Backbone and its ilk offer. The two titans here are Ember.js and
AngularJS, both of which I intend to review and discuss in this column
in coming months. There doesn't yet seem to be a book about Ember,
but there is a short book called AngularJS by Brad Green and
Shyam Seshadi (O'Reilly,
ISBN: 978-1-449-34485-6). This book gives a good,
quick introduction that is easier (for me, at least) to understand
than the official documentation and tutorials.

Other Reads

Although I do read (and listen, and watch) a great deal about technology,
I also try to find time to read on other subjects as well.

My first recommendation isn't for a book, but rather a magazine. I
grew up hearing about The New Yorker as a source of witty cartoons
but not much else. I can now tell you, having subscribed for a bit
more than a year, that the magazine itself is fun, interesting and
thought-provoking, with some of the best writing I've ever had the
chance to enjoy. If you want to read about all sorts of interesting
topics—as well as tickle your funny bone with the cartoons—I
heartily suggest reading The New Yorker.

My favorite nontechnical book of the year is Thank You For
Arguing by
Jay Heinrichs (Three Rivers Press, ISBN: 978-0385347754).
I found this book to be amazingly insightful and interesting, as well
as funny, and it taught me the basics of rhetoric—the art of
persuasion. The author breaks rhetoric into a number of basic tools
and then uses those building blocks to demonstrate how to make a
convincing argument.

I continue to be fascinated by China, now that I've been there twice.
Three interesting China-related books I read during the summer
were: Factory Girls by Leslie Chang (ISBN: 978-0385520188), which
describes the reality of the young women who leave the countryside in
search of a better future; China Airborne by James
Fallows (ISBN:
978-0375422119), which uses aviation as a way to understand modern
Chinese decision-making; and Last Days of Old Beijing by Michael
Meyer (ISBN: 978-0802717504), a bittersweet book about how the Chinese
government is removing historic, old buildings and putting new ones in
their place.

I hope that you enjoyed this year's book roundup. I'm always on the lookout
for new book suggestions, so if you have any titles to offer, I'd be
delighted to hear about them.

Sponsored by:

Geek Guides

Pick up any e-commerce web or mobile app today, and you’ll be holding a mashup of interconnected applications and services from a variety of different providers. For instance, when you connect to Amazon’s e-commerce app, cookies, tags and pixels that are monitored by solutions like Exact Target, BazaarVoice, Bing, Shopzilla, Liveramp and Google Tag Manager track every action you take. You’re presented with special offers and coupons based on your viewing and buying patterns. If you find something you want for your birthday, a third party manages your wish list, which you can share through multiple social- media outlets or email to a friend. When you select something to buy, you find yourself presented with similar items as kind suggestions. And when you finally check out, you’re offered the ability to pay with promo codes, gifts cards, PayPal or a variety of credit cards.