Goodreads helps you keep track of books you want to read.
Start by marking “Practical Object Oriented Design in Ruby” as Want to Read:
Practical Object Oriented Design in Ruby
Enlarge cover
Rate this book
Clear rating
Open Preview

Practical Object Oriented Design in Ruby

(Addison-Wesley Professional Ruby Series)

4.55  ·  Rating details ·  2,070 ratings  ·  151 reviews
The Complete Guide to Writing More Maintainable, Manageable, Pleasing, and Powerful Ruby Applications Ruby's widely admired ease of use has a downside: Too many Ruby and Rails applications have been created without concern for their long-term maintenance or evolution. The Web is awash in Ruby code that is now virtually impossible to change or extend. This text helps you so ...more
Paperback, 1st edition, 247 pages
Published August 19th 2012 by Addison-Wesley Professional (first published July 2nd 2012)
More Details... edit details

Friend Reviews

To see what your friends thought of this book, please sign up.

Reader Q&A

To ask other readers questions about Practical Object Oriented Design in Ruby, please sign up.

Be the first to ask a question about Practical Object Oriented Design in Ruby

Community Reviews

Showing 1-30
4.55  · 
Rating details
 ·  2,070 ratings  ·  151 reviews

Sort order
Steve Klabnik
Oct 30, 2012 rated it it was amazing
Shelves: ruby, own
Full disclosure: I helped contribute early reviews of much of the content of this book.

Sandi does a really great job, but not for the reason you'd expect: POODR is more pragmatic than one would expect. Especially in the Rails world, where OO design is looked down upon as 'academic' and 'not actually worthwhile,' one would expect all the usual explanations and reasonings.

But not this book. Sandi does a great job of explaining the tensions between all of these different maxims, and acknowledges th
Apr 23, 2014 rated it liked it
While this book starts out being excellent, it just turns out as yet another of those "static typing is wrong because type casts are dangerous and you need to write type annotations everywhere". Then in the last chapter it basically re-implements a type system via tests, by checking if a class has certain methods.

That, dear reader, is exactly what static typing is for, and in 2014, we do have type inference even in C++.
Bjoern Rochel
Oct 01, 2012 rated it it was amazing
Shelves: 2013
This book is spot on when it comes to object orientation. It contains many of the lessons I had to learn the hard way during the last 8 years while extensively studying books & blogs on oo. Though POODR certainly doesn't come up with a lot of new ideas (at least I've heard most of them before), it compiles the ideas into a wonderful whole, where each part fits nicely with the rest of the book. Although definitely opinionated, the book shines by never being dogmatic and clearly explaining the ...more
Magnus Lidbom
Apr 23, 2015 rated it really liked it  ·  review of another edition
Shelves: development
This book is an excellent book on good OO design. I would recommend it to anyone. But I would not recommend it to anyone without a large warning sign stuck to it:

"Warning: The portions about statically vs dynamically types languages show a very marked lack of balance, objectivity and depth of knowledge. Safest to simply not believe anything said about statically typed languages in this book. Most of it is not exactly wrong, but still very misleading."

Sandi: Should you happen to read this I would
Robson Castilho
Aug 10, 2015 rated it it was amazing
Great book about object-oriented design, tackling the main principles of OO.
Very well written, it explains how to manage dependencies, how to implement duck types and how to use inheritance and composition. It finishes with a great chapter about testing.
I do recommend!

(ps.: if you're a beginner with Ruby - like me - and you want to learn more about the language features FIRST, you should pick another book. This one is focused in OOD!)
Oana Sipos
Apr 19, 2017 is currently reading it
Chapter 3: Managing Dependencies

An object has a dependancy when it knows:
- 1) The name of another class.
- 2) The name of a message that it intends to send to someone other than self.
- 3) The argument that a message requires.
- 4) The order of those arguments.

Writing Loosely Coupled Code techniques
- Inject dependencies
- Isolate dependencies: isolate instance creation, isolate external vulnerable messages, explicitely define defaults, isolate multiparameter initialization
- Choosing the dependency d
Michał Szajbe
Oct 14, 2016 rated it really liked it
The book is full of valuable insights and good, elaborate explanations. Well worth the read.

The only thing I didn't like are code examples with real-world objects like Bike, Gear and Mechanic. You can write two or three good examples that way, but trying to adhere to it throughout the whole book make these examples worse and worse. The further into the book, the worse the code is.
May 24, 2013 rated it really liked it
Having been a Ruby programmer full-time for a year now, this book finally made "click" many of the Best Practices I've seen and used in code but haven't really been able to articulate. It got a little long-winded and redundant at some points, probably because it's geared more towards people who haven't been exposed much to OO, but overall it was definitely worth reading.

These are some of the parts that were most valuable to me:

"Sometimes the value of having the feature right now is so great that
May 16, 2016 rated it it was amazing
Took me long enough to finish, but it's absolutely phenomenal. Metz writes with extreme clarity, and this is a resource that I will no doubt be revisiting over and over agin.
Nov 09, 2013 rated it it was amazing
This book helped tie together my understanding of OOP best practices in Ruby and has produced immediate benefits in the quality of code I'm writing. It contains great examples of refactoring code, along with checklists, red flags and questions to ask yourself throughout the design process.

The author does a great job of following the development and improvement of a sample app throughout the book (an app for a bike shop). The continuous narrative helps you see how the pieces fit together, though
Robert Postill
Aug 30, 2014 rated it it was amazing
I loved it. The thing about Sandi Metz is she has that wonderful mix of good communication and years of experience. This book is a great demonstration of the power of that combination. It's got a laid back style that makes it feel like you and Sandi are pairing on the code under examination. As Sandi's explaining to you why she's thinking what she's thinking you spend the length of the book saying "yes, I hand't thought about it like that but now it's obvious". There aren't many programming book ...more
Apr 18, 2014 rated it it was amazing
Starting with a story about technical debt, sandi metz lead us step by step through obstacles we have to face when designing a program. This book shows us when to use different kinds of designing techniques such as :inherit, duck-typing, composition. At the last chapter, Sandi tells us a fresh view about testing, with concepts of inbound message, outbound message. I highly recommend this book for any ruby-ist who want to write code better.
Leandro López
Jan 26, 2016 rated it it was amazing
Excellent read, no matter how much experience you have or if you use Ruby or not.

I was a bit skeptical at first, 'cause I thought the book was going to tell me things that I already knew. Boy was I wrong! I already feel that I've learn a lot and can't wait to apply all this new knowledge on my next and existing projects.

I think it's definitely a must have in your library as a reference. Very well written, simple yet very understandable examples, and lots of insights.
Rafael George
Oct 25, 2012 rated it really liked it  ·  review of another edition
This is a good book for learning about object oriented design using the Ruby programming language. From a pragmatic point of view, it could be better with some exercises; but from a conceptual one it's great. I'll be referencing this book a lot every time I'm working in a new app till I get everything in it right. Even if the design of good unit tests can be a book on itself, Sandi manage to provide enough information to start creating better tests on your Ruby applications. A must read.
Federico Saravia
Feb 13, 2017 rated it it was amazing
I read this book in a time where functional programming is gaining a lot of traction and it was both refreshing and reassuring to read it.

This book approaches OOP with grace and simplicity, showing the strength of Ruby and OOP in small but concrete examples. As much experience I have on the field, this book taught me a lot and I think everyone who takes programming seriously and loves Ruby must read it. I'll definitely read it again a couple of times.
Paul Kuruvilla
Jan 03, 2018 rated it really liked it
Well-crafted analogies that really drive the point home. The last section on testing is gold. There's a 30 min talk based on it (by the author) that is available for free:

Would've rated 5 stars if it wasn't for the unnecessary dissing of statically typed languages.
Nov 25, 2016 rated it really liked it
This is a really good book, and I liked it a lot, but it feels weird to give a programming book 5 stars
Gabriele Tondi
Oct 30, 2014 rated it really liked it
In my opinion is one of the best books about object oriented design.
Svetlio Blyahoff
Mar 28, 2015 rated it it was amazing
Shelves: ebook
A very good read in deed. Adds a great understanding of OO design and ways of using different design patterns appropriately.
May 19, 2015 rated it really liked it
Shelves: programming
Very approachable tone, pretty clear examples.
Apr 06, 2016 rated it it was amazing
I wish I read this years ago, but I think it hits home more for me because I can relate to design headaches I've already experienced.
Mar 28, 2014 rated it it was amazing
I am going to make this book compulsory reading for every Ruby developer I work with from here on out, and if I need to compel them too hard, I probably won't stay working with them for much longer.
Aaron Wolfson
Mar 03, 2014 rated it it was amazing
This is the gold standard for practical programming texts.
Andrés Quilodrán
Oct 19, 2017 rated it really liked it
Shelves: programming
I love the Ruby language and I have loved it pretty much from the first time I found out about it. My brain loves creating connections between concepts, and coming up with abstractions to depict situations, problems and solutions. This book gave me a dose of both Ruby and abstractions that was very soothing.

Sandi has a very engaging way of writing, very much like the way she talks at conferences. She's neither patronizing nor overly complicated when explaining topics, but rather finds a great ba
Túlio Ribeiro dos Anjos
In my humble opinion, this book's greatest strength lies in its advice to think first not of objects themselves and their responsibilities, but as actors and messages passed between them. Perhaps you already knew this; I didn't, and doing so has been a tremendous new tool in my arsenal to tackle problems. Seeing and defining public interfaces and abstractions has become a lot easier. It's become so much clearer now, it's like the idea just popped into my head.

Chapter 4: Creating Flexible Interfa
Isidro López
Mar 06, 2018 rated it it was amazing
Again: this is the kind of book that, after having read it, you understand why it is considered "a must".

I can only recommend it. I have never worked with Ruby, but that's not a problem for getting all its value.

On the other hand, I'm really happy that I read it now and not 5 or 10 years ago: I wouldn't have the experience I have now and most of it would have stayed just as "theory" on my mind.

The book contains great advices, reflections and insights about OO and testing. Which doesn't mean that
Zack Frank
Nov 23, 2018 rated it it was amazing
Essential reading for anyone looking to improve their skills in building applications in Ruby (though the concepts could likely be applied to any dynamically typed language).

This book has tangibly and immediately helped me improve as a programmer and increased my chances of advancing in my career by giving me higher levels of knowledge of important concepts in coding. Those concepts revolve around creating extensible applications via tools like duck-typing, inheritance, composition, managing dep
Adrian Cuadros
May 13, 2017 rated it it was amazing
I recommend this book as a must read for any novice to intermediate developer and as a communication tool for more experienced folks. The core is really about design and much less about ruby specifics. It touches on design best practices and concepts really clearly and gives easy to understand examples of subjects like: Single responsibility principle, the law of Demeter, duck typing, inheritance, composition, testing and more.

The big selling point is that Sandi writes from a highly practical po
Martin Beták
Aug 04, 2016 rated it it was amazing
Highly recommend to anyone doing any sort of professional programming. Whatever your relationship to Ruby as a programming language, the principles outlined in this book cut deeply and across all areas of day-to-day work of a developer and provide profound insight on things that might have seemed to a novice or a developer initiate as trivial (or not even worth attention). Especially when designing their object hierarchies and patterns of interaction between various components of the application ...more
Nov 01, 2018 rated it it was amazing
Shelves: programming
No matter what language you primarily code in, this book is a great Object Oriented primer/refresher. I wish I would have read it years ago when I started working with Java. Some things are specific to Ruby, but the concepts are universal. Sandi writes very clearly and doesn't add content just for the sake of doing so. The book is full of practical examples using a domain we're all familiar with. She explains the rules, when to break them and why and what you should be looking out for so you don ...more
« previous 1 3 4 5 6 7 8 9 next »
topics  posts  views  last activity   
Læsegruppe for ud...: Snart tid til at snakke om resten af bogen 8 3 May 13, 2013 06:11AM  
Læsegruppe for ud...: Forslag til næste bog 23 6 Apr 22, 2013 04:57AM  
  • Eloquent Ruby
  • Metaprogramming Ruby
  • Exceptional Ruby: Master the Art of Handling Failure in Ruby
  • The Well-Grounded Rubyist
  • Refactoring: Ruby Edition, Adobe Reader
  • The RSpec Book
  • Ruby Best Practices
  • Ruby Under a Microscope
  • Rails Antipatterns: Best Practice Ruby on Rails Refactoring
  • Working with UNIX Processes
  • The Rails 3 Way
  • Smalltalk Best Practice Patterns
  • Programming Ruby: The Pragmatic Programmers' Guide
  • The Ruby Way: Solutions and Techniques in Ruby Programming (Addison-Wesley Professional Ruby Series)
  • Understanding Computation: From Simple Machines to Impossible Programs
  •  Crafting Rails Applications: Expert Practices for Everyday Rails Development
  • The Ruby Programming Language
  • Tmux: Productive Mouse-Free Development

Goodreads is hiring!

If you like books and love to build cool products, we may be looking for you.
Learn more »

Other books in the series

Addison-Wesley Professional Ruby Series (1 - 10 of 14 books)
  • Eloquent Ruby
  • Ruby on Rails 3 Tutorial: Learn Rails by Example (Addison-Wesley Professional Ruby Series)
  • The Rails 3 Way
  • Rails Antipatterns: Best Practice Ruby on Rails Refactoring
  • Service-Oriented Design with Ruby and Rails
  • Distributed Programming with Ruby
  • Refactoring: Ruby Edition, Adobe Reader
  • Design Patterns in Ruby
  • The Rails Way
  • Professional Ruby Series Writing Efficient Ruby Code
“You don’t send messages because you have objects, you have objects because you send messages.” 6 likes
“Novice programmers don’t yet have the skills to write simple code.” 6 likes
More quotes…