Required Books

Practical Object-Oriented Design in Ruby: An Agile Primer
by Sandi Metz

Practical O-O Design in Ruby


Book available: Amazon or Informit

Published by Pearson.
ISBN-10:            0321721330
ISBN-13:            9780321721334
Author:              Sandi Metz
Edition:              First or Second

This is an excellent book.  I recommended it to the PSU bookstore, but they say that they can't get it.  Fortunately, it's available both in print and as PDF, from Amazon, Powell's and the publisher.  It's so good that I plan to use it as a basis for class discussions, and I'm going to assign required reading from it.  Informit sells electornic editions in a variety of formats, while Amazon sells them only in Kindle format.

A second edition came out in the summer of 2018.  The differences between the first and second editions are minor.   I suggest that you buy whichever you can find at the lower price.  

There are a few errata to the 1st Edition.


Recommended Textbooks

Smalltalk Best Practice Patterns
by Kent Beck


Kindle Version: $42.66 at Amazon.com
Paper Book Price: $41 used or $58 new from Amazon.com

Prentice Hall; ISBN 013476904X; 1997

This book presents a set of patterns that organize much of the experience that successful Object-oriented programmers have learned the hard way. Understand these patterns, and you can write much more effective code. Most of the patterns can be transferred to other languages such as Grace, Ruby and Java, so even if you never use again, this book is a great buy.

Smalltalk with Style
by Suzanne Skublics, Edward J. Klimas, David A. Thomas


Available free as a PDF

Prentice Hall; ISBN 0-13-165549-3, 1996

An excellent and inexpensive resource for learning to read and write impeccable object-oriented code in any language.

Complete page images are here and are also available at Stéphan Ducasse's free book site




The Design Patterns Smalltalk Companion
by Sherman Alpert, Kyle Brown, and Bobby Woolf


Used Book Price: $10 at Amazon.com
Softcover New Book Price: $26–$33 at Amazon.com

Prentice Hall; ISBN 978-0201184624, 1998

The Design Patterns Smalltalk Companion is intended to be a companion volume to Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides — the so-called “Gang of Four”. Their book has had an extraordinary impact on the field of object-oriented software design. Yet it has a decided C++ orientation. This works well for C++ developers, but it makes understanding and applying the Design Patterns material more difficult for others.

The Design Patterns Smalltalk Companion assumes that readers are familiar with the material in Design Patterns, but that they want to understand the material better, especially from a Smalltalk development perspective. The Smalltalk Companion is designed to be read along with Design Patterns. It does not repeat material that the Gang of Four has already explained well. Rather, it clarifies and adds to the ideas that their book already expresses, doing so from the viewpoint of the Smalltalk developer.

Domain Driven Design
by Eric J. Evans

Domain-Driven Design Book Cover

Publisher: Prentice Hall, 2003
ISBN-13: 978-0321125217

This is a highly regarded-book about making the design of your software match your mental model of the problem domain you are addressing.  The book talks about how to think about the domain, the language you use to talk about it, and how you organize your software to reflect your improving understanding of it.   Because you continue to learn about the problem domain as development progresses,  refactoring is a big part of the technique that Evans advocates.

Refactoring: Improving the Design of Existing Code
by Martin Fowler and Kent Beck

Cover of Fowler's
              "Refactoring"

Publisher: Addison-Wesley Professional; 1st edition (2002)

ISBN-10: 0201485672
ISBN-13: 978-0201485677


The classic book, but rather Java-centric. Importantly, it talks about code smells and the problems that they may foreshadow, before going on to talk about how to refactor the code to remove the smell.  A working knowledge of refactoring ought to be a prerequisite for this course.

Test Driven Development: By Example
by Kent Beck

Cover of
              Beck's "TDD by Example"

Publisher: Addison-Wesley Professional; 1st edition (2002)

ISBN-13: 078-5342146530
ISBN-10: 0321146530

I'm assuming that you know the rudiments of test-driven development.  If you don't, this book will guide you through the process step-by-step.  As a reviwer notes: "The level of learning involved in doing TDD is profound. The best way to read the book is to do the book. Skills come from doing, not reading. I did the examples (in another language) and it made all the difference in what I learned."

This book is an introduction. It's light on the more difficult situations that you may meet in testing, such as legacy code without tests, or testing UIs.  You may want to consider Growing Object-Oriented Software, Guided by Tests, by Freeman & Price, as a follow-on.

Growing Object-Oriented Software, Guided by Tests
by Steve Freeman and Nat Pryce

Cover of Growing OO Software, Guided by Tests

Publisher: Addison-Wesley Professional; 1st edition (2009)

ISBN-13: 978-0321503626
ISBN-10: 0321503627

An advanced book on TDD.  Drawing on a decade of experience building real-world systems, two TDD pioneers show how to let tests guide your development and "grow" software that is coherent, reliable, and maintainable. Steve Freeman and Nat Pryce describe the processes they use, the design principles they strive to achieve, and some of the tools that help them get the job done. Through an extended worked example, you'll learn how TDD works at multiple levels, using tests to drive the features and the object-oriented structure of the code, and using Mock Objects to discover and then describe relationships between objects. Along the way, the book systematically addresses challenges that development teams encounter with TDD — from integrating TDD into your processes to testing your most difficult features.


Most recently modified sometime in the past


Andrew P. Black