Title: The Ruby Programming Language
Authors: David Flanagan & Yukihiro Matsumoto with drawings by why the lucky stiff
Publisher: O'Reilly, First Edition, January 2008
Book's Website: http://www.oreilly.com/catalog/9780596516178/
(Sample Ruby code is also at http://www.davidflanagan.com/rpl/
Reviewer: Brian DeLacey
ISBN 10: 0-596-51617-7
Summary: A classic and comprehensive guide to Ruby.
Book Review: The Ruby Programming Language
In January 2008, just in time for Ruby's 15th birthday, O'Reilly published The Ruby Programming Language
. The co-authors make a strong writing team. Yukihiro (Matz) Matsumoto created Ruby. David Flanagan previously wrote Java In a Nutshell
— he has a CS degree from MIT with a concentration in writing. Drawings are the work of Rubyist-extraordinaire why the lucky stiff and technical reviewers include well known Rubyists David A. Black, Charles Oliver Nutter, and Shyouhei Urabe.
According to the Preface, Flanagan and Matz modeled this book after the K&R "white book" — The C Programming Language
by Brian Kernighan and Dennis Ritchie. Like the "white book", The Ruby Programming Language
has a simple structure and provides complete coverage. Just as K&R served as the de facto
standard for "C", The Ruby Programming Language
will likely be seen as the most authoritative language book for Ruby. Flanagan and Matz provide the following guidance for their readers:
"Because this book documents Ruby comprehensively, it is not a simple book (though we hope that you find it easy to read and understand). It is intended for experienced programmers who want to master Ruby and are willing to read carefully and thoughtfully to achieve that goal. ... [T]his book takes a bottom-up approach to Ruby: it starts with the simplest elements of Ruby's grammar and moves on to document successively higher-level syntactic structures from tokens to values to expressions and control structures to methods and classes. This is a classic approach to documenting programming languages." (p. 17)
You'll read all about boolean flip-flops, duck typing, lambdas, maps, metaprogramming, reflection and patterns of rhyming methods (collect, select, reject, and inject!). You'll also learn about new features in Ruby 1.9, like fundamental changes to text for Unicode support and the introduction of fibers fo coroutines. If it's in Ruby, it's almost certainly in this book. Chapters flow together nicely, although some could even stand on their own as educational materials for a computer science course (e.g. Chapter 7: Classes and Modules
covers object-oriented programming and Chapter 8: Reflection and Metaprogramming
elaborates on concepts like hooks, tracing, and thread safety).
In Ruby programming, difficult tasks are typically not only possible but often easy. It seems the authors take the same approach in their writing. For example, the complex topic of Domain Specific Languages (DSLs) sometimes creeps into deep discussions involving Ruby. Flanagan and Matz describe it simply and clearly: "A DSL is just an extension of Ruby's syntax (with methods that look like keywords) or API that allows you to solve a problem or represent data more naturally than you could otherwise." (p. 296)
During Ruby's first ten years, nearly two dozen books were in print in Japan but very few were available in English. That changed in 2004 when the introduction of Ruby on Rails created momentum for the language. A flood of new books followed, including Programming Ruby
(2004, 2nd edition), The Ruby Way
(2006, 2nd edition), Ruby for Rails
(2006), and Learning Ruby
, with lead author Dave Thomas, is self-described as a "tutorial and reference for the Ruby programming language." The Ruby Way
, by Hal Fulton, was intended to complement Programming Ruby
. Fulton noted: "There is relatively little in the way of introductory or tutorial information." Ruby for Rails
, by David A. Black, has a clearly defined audience: "This book is an introduction to the Ruby programming language, purpose-written for people whose main reason for wanting to know Ruby is that they're working with, or are interested in working with, the Ruby on Rails framework." Learning Ruby
, by Michael Fitzgerald, is a 238-page survey for "experienced programmers who want to learn Ruby, and new programmers who want to learn to program."
and The Ruby Way
each weigh in at over 800 pages. The binding on my copy of The Ruby Way
came unglued and split in the middle after a year of use. The Ruby Programming Language
is a slim, more manageable 444 pages and, in contrast, is the only one to cover Ruby version 1.9. In general, this is a great example of "less is more". Informative text boxes are sprinkled across the book with brief highlights on key technical thoughts. The first chapter's text box on "Other Ruby Implementations" (e.g. JRuby, IronRuby, Rubinius) could, however, be expanded into a several-page discussion of Ruby's various interesting architectures. Inclusion of IDEs and development tools (e.g. Eclipse, NetBeans, and TextMate) might also be helpful. These topics would nicely round out Chapter 10: The Ruby Environment
The Ruby Programming Language
has excellent cross-referencing. Section signs () feel like embedded HTML links that enable you to easily follow your coding curiosity around the book. Or you can just read it the old fashioned way, straight through. As an example, Chapter 3: Datatypes and Objects
has subheadings (e.g. 3.1 Numbers) and well defined sections (e.g. 3.1.3 Arithmetic in Ruby.) The page-footers, table of contents and index also provide efficient navigational aids.
Artwork at the "edge of abstract expressionism" is something you might expect from The New Yorker
magazine, but a computer book? The Ruby Programming Language
introduces readers to "the edge of graphite expressionism". Original "smudgy residue" pencil drawings by why the lucky stiff
creatively start each chapter.The Beatles' album cover for Sgt. Pepper's Lonely Hearts Club Band
sparked intrigue and investigations into coded messages with hidden meanings. The same could happen here.
In Words and Rules: The Ingredients of Language
, author Steven Pinker asks a simple question: "How does language work?" When I think about a new programming language, I have the same type of question in mind: "How does this
language work?" Flanagan and Matz provide the answers in outstanding fashion. The Ruby Programming Language
should help seasoned programmers who want to master Ruby. In addition, there is enough structure and sample code for determined novices to begin their programming explorations. Better than any other, this book defines the language. It is a classic and comprehensive guide for Ruby and a great 15th birthday present.
One long-time Rails developer sent me an email with their first impressions of The Ruby Programming Language
: "I have been finding the book very useful, and I'm glad I did get it sooner rather than later." Matz said "Ruby is designed to make programmers happy." It looks like similar design thinking went into this book.
Brian DeLacey volunteers for the Boston Ruby Group