Design Patterns in Ruby and over one million other books are available for Amazon Kindle. Learn more


or
Sign in to turn on 1-Click ordering.
or
Amazon Prime Free Trial required. Sign up when you check out. Learn More
Sell Back Your Copy
For a $15.75 Gift Card
Trade in
More Buying Choices
Have one to sell? Sell yours here
Design Patterns in Ruby
 
 
Start reading Design Patterns in Ruby on your Kindle in under a minute.

Don't have a Kindle? Get your Kindle here, or download a FREE Kindle Reading App.

Design Patterns in Ruby [Hardcover]

Russ Olsen (Author)
4.5 out of 5 stars  See all reviews (21 customer reviews)

List Price: $54.99
Price: $39.27 & this item ships for FREE with Super Saver Shipping. Details
You Save: $15.72 (29%)
  Special Offers Available
o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
In Stock.
Ships from and sold by Amazon.com. Gift-wrap available.
Want it delivered Friday, May 18? Choose One-Day Shipping at checkout. Details
Textbook Student FREE Two-Day Shipping for students on millions of items. Learn more

Formats

Amazon Price New from Used from
Kindle Edition $29.69  
Hardcover $39.27  
Sell Back Your Copy for $15.75
Whether you bought it on Amazon or somewhere else, you can sell it back through our Book Trade-In Program at the current price of $15.75.
Used Price$23.99
Trade-in Price$15.75
Price after
Trade-in
$8.24

Book Description

December 20, 2007 0321490452 978-0321490452 1

Praise for Design Patterns in Ruby

"Design Patterns in Ruby documents smart ways to resolve many problems that Ruby developers commonly encounter. Russ Olsen has done a great job of selecting classic patterns and augmenting these with newer patterns that have special relevance for Ruby. He clearly explains each idea, making a wealth of experience available to Ruby developers for their own daily work."

—Steve Metsker, Managing Consultant with Dominion Digital, Inc.

"This book provides a great demonstration of the key 'Gang of Four' design patterns without resorting to overly technical explanations. Written in a precise, yet almost informal style, this book covers enough ground that even those without prior exposure to design patterns will soon feel confident applying them using Ruby. Olsen has done a great job to make a book about a classically 'dry' subject into such an engaging and even occasionally humorous read."

—Peter Cooper

"This book renewed my interest in understanding patterns after a decade of good intentions. Russ picked the most useful patterns for Ruby and introduced them in a straightforward and logical manner, going beyond the GoF's patterns. This book has improved my use of Ruby, and encouraged me to blow off the dust covering the GoF book."

—Mike Stok

"Design Patterns in Ruby is a great way for programmers from statically typed objectoriented languages to learn how design patterns appear in a more dynamic, flexible language like Ruby."

—Rob Sanheim, Ruby Ninja, Relevance

Most design pattern books are based on C++ and Java. But Ruby is different—and the language's unique qualities make design patterns easier to implement and use. In this book, Russ Olsen demonstrates how to combine Ruby's power and elegance with patterns, and write more sophisticated, effective software with far fewer lines of code.

After reviewing the history, concepts, and goals of design patterns, Olsen offers a quick tour of the Ruby language—enough to allow any experienced software developer to immediately utilize patterns with Ruby. The book especially calls attention to Ruby features that simplify the use of patterns, including dynamic typing, code closures, and "mixins" for easier code reuse.

Fourteen of the classic "Gang of Four" patterns are considered from the Ruby point of view, explaining what problems each pattern solves, discussing whether traditional implementations make sense in the Ruby environment, and introducing Ruby-specific improvements. You'll discover opportunities to implement patterns in just one or two lines of code, instead of the endlessly repeated boilerplate that conventional languages often require.

Design Patterns in Ruby also identifies innovative new patterns that have emerged from the Ruby community. These include ways to create custom objects with metaprogramming, as well as the ambitious Rails-based "Convention Over Configuration" pattern, designed to help integrate entire applications and frameworks.

Engaging, practical, and accessible, Design Patterns in Ruby will help you build better software while making your Ruby programming experience more rewarding.


Special Offers and Product Promotions

  • Buy $50 in qualifying physical textbooks, get $2 in Amazon MP3 Credit. Here's how (restrictions apply)

Frequently Bought Together

Design Patterns in Ruby + Eloquent Ruby (Addison-Wesley Professional Ruby Series) + Metaprogramming Ruby: Program Like the Ruby Pros
Price For All Three: $91.45

Show availability and shipping details

Buy the selected items together
  • In Stock.
    Ships from and sold by Amazon.com.
    This item ships for FREE with Super Saver Shipping. Details

  • Eloquent Ruby (Addison-Wesley Professional Ruby Series) $32.13

    In Stock.
    Ships from and sold by Amazon.com.
    This item ships for FREE with Super Saver Shipping. Details

  • Metaprogramming Ruby: Program Like the Ruby Pros $20.05

    In Stock.
    Ships from and sold by Amazon.com.
    Eligible for FREE Super Saver Shipping on orders over $25. Details



Editorial Reviews

About the Author

Russ Olsen has been building software for more than twenty-five years. He has led projects through several generations of programming technologies, from FORTRAN to C to C++ to Java, and now Ruby. He has been using and teaching Ruby since 2002. Olsen writes the popular technology blog Technology As If People Mattered (http://www.russolsen.com).

Excerpt. © Reprinted by permission. All rights reserved.

A former colleague of mine used to say that thick books about design patterns were evidence of an inadequate programming language. What he meant was that, since design patterns are the common idioms of code, a good programming language should make them very easy to implement. An ideal language would so thoroughly integrate the patterns that they would almost disappear from sight.

To take an extreme example, in the late 80's I worked on a project that produced object oriented code in C. Yes, C, not C++. We pulled this off by having each "object" (actually a C structure) point off to a table of function pointers. We operated on our "objects" by chasing the pointer to the table and calling functions out of the table, thereby simulating a method call on an object. It was awkward and messy, but it worked. Had we thought of it, we might have called this technique the "object oriented" pattern. Of course with the advent of C++ and then Java, our object oriented pattern disappeared, absorbed so thoroughly into the language that it vanished from sight. Today, we don't usually think of object orientation as a pattern—it is too easy.

But many things are still not easy enough. The justly famous Gang of Four book, (Design Patterns: Elements of Reusable Object-Oriented Software by Gamma, Helm, Johnson, and Vlissides) is required reading for every software engineer today. But actually implementing many of the patterns described in Design Patterns with the languages in widespread use today, Java and C++ and perhaps C#, looks and feels a lot like my 1980s vintage handcrafted object system. Too painful. Too verbose. Too prone to bugs.

The Ruby programming language takes us a step closer to my old friend's ideal, a language that makes implementing patterns easy, so easy that sometimes they fade into the background. Building patterns in Ruby is easier for a number of reasons:

  • Ruby is dynamically typed. By dispensing with static typing, Ruby dramatically reduces the code overhead of building most programs, including those that implement patterns.
  • Ruby has code closures. Ruby allows us to pass around chunks of code and associated scope without having to laboriously construct entire classes and objects that do nothing else.
  • Ruby classes are real objects. Since a class in Ruby is just another object, we can do any of the usual runtime things to a Ruby class that we can do to any object. At runtime we can create totally new classes. We can also modify existing classes by adding or deleting methods. We can even clone a class and change the copy, leaving the original alone.
  • Ruby has an elegant system of code reuse. In addition to garden variety inheritance, Ruby provides also allows us to define mixins, which are a simple but flexible way to write code that can be shared among several classes.

All of this makes code in Ruby compressible: In Ruby, like Java and C++, you can implement very sophisticated ideas, but with Ruby it is possible to hide the details of your implementations much more effectively. As you will see on the pages that follow, many of the design patterns that require many lines of endlessly repeated boiler plate code in traditional static languages require only one or two lines in Ruby. You can make a class into a singleton with a simple include Singleton. You can delegate as easily as you can inherit. Since Ruby enables you to say more interesting things in each line of code, you end up with less code.

This is not just a question of keyboard laziness, it is an application of the DRY (Don't Repeat Yourself) principal. I don't think anyone today would mourn the passing of my old object oriented pattern in C—it worked for me, but it made me work for it, too. In the same way, the traditional implementations of many design patterns work, but they make you work too. Ruby is a real step forward to be able to do that work only once and compress it out of the bulk of our code. In short, Ruby allows us to concentrate on the real problems that we are trying to solve instead of the plumbing. I hope that this book will help you see how.

Who Is This Book For?

Simply put, this book is for developers who want to know how to build significant software in Ruby. I assume that you are familiar with object oriented programming, but you don't really need any knowledge of design patterns —you can pick that up as you go through the book.

You also don't need a lot of Ruby knowledge to read this book profitably: you can find a quick introduction to the language in Chapter 2 and I do try to explain any Ruby specific language issues as we go.

How Is This Book Organized?

This book is divided into three parts. First there are a couple of introductory chapters, starting with the briefest outline of the history and background of the whole Design Patterns movement and ending with a quick tour of the Ruby language, at the "just enough to be dangerous" level.

The second section, which takes up the bulk of these pages, looks at a number of the original Gang of Four patterns from a Ruby point of view. What problem is this pattern trying to solve? What does the traditional implementation of the pattern, the implementation given by the Gang of Four look like in Ruby? Does the traditional implementation make sense in Ruby? Does Ruby provide us with any alternatives that will make solving the problem easier?

The final section of this book looks at a three patterns that have emerged from the Ruby.

A Word of Warning

I cannot sign my name to a book about design patterns without repeating the mantra that I have been muttering for many years now: design patterns are little spring loaded solutions to common programming problems. Ideally, when the appropriate kind of problem comes along, you should trigger the design pattern and the problem is solved. It is that first part, the bit about waiting for the appropriate problem to come along, that some engineers have trouble with. You cannot say that you are correctly applying a design pattern unless you are confronting the problem that the pattern is supposed to solve.

The reckless use of every design pattern on the menu to solve nonexistent problems has given design patterns a bad name in some circles. I would contend that Ruby makes it easier to write an adapter that uses a factory method to get a proxy to the builder which creates the command which coordinates the operation of adding two plus two. Ruby will make that easier, but even in Ruby it will not make any sense.

Nor can you look at program construction as a simple process of piecing together some existing design patterns in new combinations. Any interesting program is going to have unique sections, bits of code that fit that specific problem perfectly and no other. Design patterns are meant to help you recognize and solve the common problems that arise over and over when you are building software. The advantage of design patterns is that they let you rapidly get past the problems that someone has already solved, so that you can get on to the hard stuff, the code that is unique to your situation. Design patterns are not the universal elixir, the magic potion that will fix all of your design problems. They are simply one technique, albeit a very useful technique, that you can use to build programs.


Product Details

  • Hardcover: 384 pages
  • Publisher: Addison-Wesley Professional; 1 edition (December 20, 2007)
  • Language: English
  • ISBN-10: 0321490452
  • ISBN-13: 978-0321490452
  • Product Dimensions: 7.2 x 1 x 9.6 inches
  • Shipping Weight: 1.6 pounds (View shipping rates and policies)
  • Average Customer Review: 4.5 out of 5 stars  See all reviews (21 customer reviews)
  • Amazon Best Sellers Rank: #347,960 in Books (See Top 100 in Books)

More About the Author

Discover books, learn about writers, read author blogs, and more.

Customer Reviews

Most Helpful Customer Reviews
32 of 32 people found the following review helpful
Format:Hardcover
Warning: This book is not a reference!!!
Well, it could be but it probably won't need to be as each concept is explained so well that you will remember when to apply this pattern or that pattern for every situation. The author is engaging and funny making this quite a book turner for a technical book. I almost read half the book on the 2 hour commuter flight between Perth and Karatha. Every chapter starts with a little anectode about the author's past life events and how these are related to the use of a particular pattern. The examples are well thought out and the author also discusses Ruby specific implementation details as well as providing valuable insights into how each pattern is used in the existing Ruby codebase.

I come from a Python/C/C++/Java background and have been tinkering around with ruby for a while but without really "getting it" and understanding what the fuss was about. The same could be said about design patterns. After reading this book I have finally grokked, not only Ruby but the value and power of design patterns. I can now say that I truly understand exactly why there is such a hype about Ruby. The whole method_missing thing, singleton support, ability to clone classes, etc. This language really represents the future of programming - today - and this book delivers on its intent.

This is simply one of the best technical books that I have read in a long time and I thoroughly recommend it, especially for an intermediate Ruby programmer and even those who know OO concepts and principles but may be new to Ruby.
Comment | 
Was this review helpful to you?
19 of 19 people found the following review helpful
Valuable Resource January 13, 2008
Format:Hardcover
I just finished this book, cover to cover. I rarely read books like this all the way through. I scan them and keep them around in case they help me out of a jam. But this book is different. It is formative in the sense that the original Gang of Four (GoF) book on patterns was formative: it asks us to think about our problems in fresh ways.

One important part of this book, however, stresses the use and overuse of these patterns. Olsen emphasizes that this isn't a competition to use all the patterns. Whoever has the most patterns doesn't necessarily win. Whoever uses code gracefully and simply does. It reminds me of the talk by Marcel Molina Jr. at RubyConf 07, speaking about what makes code beautiful. It's the proportion, integrity, and clarity that makes beautiful code. I.e., we keep the code as simple as we can, keep it focused on the problem at hand, and we do it clearly. This book warns against misuse or abuse of patterns as much as it teaches the patterns themselves.

Another thing that I found very useful about this book is it suggests simpler ways for my existing code. This tells me that, though I was happy with the function of what I could do once, the form can improve that it doesn't fall apart in the face of future iterations.

Finally, I enjoy how each chapter evolves. We start with a rigorous interpretation of the GoF patterns, then Olsen introduces simpler ways to implement the ideas that take into account Ruby's available economies. So, we write simpler code, understand the tradoffs of the various alternative implementation methods, and understand the patterns themselves more concretely.

Other than the occasional loose editing that come up from time to time, I really wouldn't change what was written. I would have enjoyed more chapters on other patterns, even some that are outside the scope of the GoF book. But that's just a reflection of my respect for Olsen's love of the material and skill in teaching it.

If you're picking up Ruby to write Rails code, maybe start with the Agile Development book. If you've finished your first personal Rails project, or you have other uses of Ruby in mind, I'd suggest this as the next book you pick up. After this book, I'd next suggest The Ruby Way by Hal Fulton. That's probably the fastest way to pick up Ruby in a professional context.
Comment | 
Was this review helpful to you?
10 of 11 people found the following review helpful
Format:Hardcover
At first glance, Ruby looks like any other dynamically typed language. Statements are sequential, it boast strong support for Object Oriented Programming, and it has all the basic control structures with which are are intimately familiar. After working with Ruby, and the constantly evolving Rails web framework, it's clear that Ruby is different from Python or Java, and that its differences make it very special.

That's why Design Patterns in Ruby is a great reference book, not because it discusses the Gang of Four patterns that any experienced developer knows by heart after years of practice, but because it demonstrates practical usages of many of the more advanced topics in the Ruby language. Extending an Object or Class at runtime, on-the-fly? Check. Magic methods? Check. Blocks, Procs and lambdas? Check. DSLs? Metaprogramming? Check, check. This book is short, but it has everything needed for a developer to understand the advanced concepts of Ruby.

Take warning, though. If you are just starting in Ruby, this is NOT the book for you, and many concepts will go over your head.
Comment | 
Was this review helpful to you?
Most Recent Customer Reviews
1-star for e-book version: Completely unformatted for readibility
The content of this book may very well be useful. But opening it in the Kindle reader reveals a huge flaw in the e-book version: the text is largely unformatted. Read more
Published 1 month ago by D. NGUYEN
It's ok
If you already have a good command of Ruby and either know the typical design patterns or are an experienced developer already, then you don't need this book. Read more
Published 6 months ago by David Barri
Phenomenal
Coming from another language, I found this book to be a fantastic initiation into Ruby. The quality of the book makes it feel like a more modern and practical version of the... Read more
Published 8 months ago by Joel in Somerville
Excellent resource for novice and expert alike!
This is the kind of technical book that comes along maybe once a decade or so: absorbing, informative, and useful to both a novice and expert alike. Read more
Published 19 months ago by S. Hirsch
A worthwile addition to your library
Russ Olsen delivers an approachable introduction to design patterns using Ruby in a book that is as good for those unfamiliar with design patterns as it is for those unfamiliar... Read more
Published on October 14, 2009 by Z. Adams
Concise explanation of design patterns, in Ruby.
If you have been programming for any extended period of time, I am sure you have started to see different patterns emerging out of your tasks. Read more
Published on April 2, 2009 by Nate Klaiber
An entertaining way to read about Ruby
This book is about using Ruby to implement most of the Design Patterns described in the GoF book ([... Read more
Published on December 27, 2008 by Alessio Marchetti
Excellent introduction to Ruby for existing programmers
If you're already a programmer, this book an excellent way to learn Ruby. It shows how to apply a variety of common and largely language-independent programming structures... Read more
Published on August 4, 2008 by D. Brent Chapman
Advanced Ruby programming styles and idioms
This is a marvelous book, ideal if you're an experienced object-oriented programmer who wants to learn to use Ruby with the idioms particular to it, and not remain frozen in the... Read more
Published on July 30, 2008 by Adam Wasserman
Design Patterns make sense with this book in Ruby
I never really understood the need for Design Patterns. After reading several blogs, and listening to other programmers, I thought that Design Patterns might even somehow be... Read more
Published on July 27, 2008 by Craig Maloney
Search Customer Reviews
Only search this product's reviews

Inside This Book (learn more)
First Sentence:
It's funny, but design patterns always remind me of a certain grocery store. Read the first page
Key Phrases - Statistically Improbable Phrases (SIPs): (learn more)
template method, convention over configuration, creating custom objects, command def initialize, forwardable module, elsif token, end def deposit, def evaluate, def withdraw, def initialize super, adapter writer, obj ectspace, external iterators, singleton module, def execute, internal iterators, singleton methods, authorization class, wrong interface, initialize method, def run, duck typing, virtual proxy, command pattern, adapter class
Key Phrases - Capitalized Phrases (CAPs): (learn more)
Getting Started, Picking the Right Class, Assembling Your System, Front of Your Object, Getting Things Done, Making Sure There Is Only One, Assembling the Whole, Replacing the Algorithm, Factory Method, Varying the Algorithm, Building Better Programs, Improving Your Objects, Easier Object Construction, Opening Up Your System, Classes Are Just Objects, Conjuring Up Brand-New Methods, Eliminating That Proxy Drudgery, Duck Duckl, Better Way, Dynamic Alternatives, First Try, Being Undone, Digging Deeper, File-Finding Interpreter, Domain-Specific Languages
Browse Sample Pages:
Front Cover | Table of Contents | First Pages | Index | Back Cover | Surprise Me!
Search Inside This Book:

What Other Items Do Customers Buy After Viewing This Item?


Tags Customers Associate with This Product

 (What's this?)
Click on a tag to find related items, discussions, and people.
 
(20)
(9)

Your tags: Add your first tag
 

Customer Discussions

This product's forum
Discussion Replies Latest Post
No discussions yet

Ask questions, Share opinions, Gain insight
Start a new discussion
Topic:
First post:
Prompts for sign-in
 


Active discussions in related forums
Search Customer Discussions
Search all Amazon discussions
   
Related forums



So You'd Like to...


Create a guide


Look for Similar Items by Category


Look for Similar Items by Subject