Question

I am on the quest to be a good OO-developer. OO intrigues me, because I understand the patterns, know why composition gives you more flexibility then inheritance, and more of such wisdom. However, I came to the conclusion that I know how to implement a factory of a singleton, but that I do not know how to come up with a robust OO design.

I have a bunch of books

  1. Design Patterns by the GoF
  2. AntiPatterns Brown et al.
  3. Refactoring by Fowler
  4. Code complete 2

They might be very good books, but they don't teach you to architect an application. I am often paralysed by some very basic decisions (example). I am looking for a book that teaches the when and why. There are many books about hammers and nails, but I have yet to find a book that tells you something about their practical relationship.

What book was most instrumental in making you a confident OO-architect/designer?

Was it helpful?

Solution

The best book I ever read about OO is Bertrand Meyer Object Oriented Software Construction.

Its huge but it was very useful for me. It covers every single aspect of OO design IMVHO.

OTHER TIPS

  1. "Object-oriented software construction" by Bertrand Meyer

Most fundamental work about object-orientation ever published. This is absolutely must have book for every "object-oriented" programmmer.

2. "Object-Oriented Analysis and Design with Applications" by Grady Booch et al

Not so formal as Meyer's book, but this book can open your eyes on many questions in object-oriented world and in software development in general

3. "Design Patterns: Elements of Reusable Object-Oriented Software" by Erich Gamma et al.

This is famous "Gang of Four" book about design patterns

4. "Refactoring: Improving the Design of Existing Code" by Martin Fowler et al.

This is another classical book. First part perfectly describe many problem that modern software developer may faced during his work: code smells, readability vs performance, premature optimization drawbacks and many other topics.

5. "Thinking in Java" by Bruce Eckel

This book may help many beginners not only in Java language but in object-oriented way of thinking too.

6. "Touch of Class: Learning to Program Well with Objects and Contracts" by Bertrand Meyer

Excellent textbook by famous author.

I fully understand your situation. Also own three of those books ;) I'd suggest the Head First edition. Object-Oriented Analysis and Design. This will get you on the right tracks. The GoF book is great but of no use until you get the basics through your head and the Head First book will take care of that. Cheers :)

Actually doing programming is a bigger help than reading about doing programming.

"paralysed by some very basic decisions" is a symptom of a deeper problem -- over-engineering. Until you build a lot of stuff, you don't really know which decisions matter and which don't matter.

The best way to get the necessary experience is to build a lot of stuff.

Code Kata is very, very important. http://slott-softwarearchitect.blogspot.com/search/label/code-kata

Also, I collected a bunch of code kata that I have used into a single, large project. http://homepage.mac.com/s_lott/books/oodesign.html

Robert C. Martin "Agile Software Development: Principles, Patterns and Practices" that explains you the principles of OO

Eric Evans: "Domain Driven Design" deals with how to make a good design that corresponds to your business problem

Martin Fowler: "Patterns of Enterprise Application Architecture" for basic principles on enterprise architecture

The only way to find out if a design is robust is to implement it. There is no single book that will teach you how to produce implementable designs, it comes down to experience and talent. However, I do second the vote for Bertrand Meyer's book - just be aware it won't turn you into an OO design god.

Craig Larman's Applying UML and Patterns summarized a lot about what I had learned from experience. What I like about it is that it addresses all the aspects of software design -- which includes things like iterative design and development. Don't stare too hard at the use of UML: design descriptions are a means towards an end, and I found Larman's approach fairly pragmatic. You can't just code: you have to communicate your intentions (and understand what is needed). UML and cleanly designed, well commented code are some of the means towards that end.

And, of course, as others mention: no book will make you a good developer or designer. But it might help accelerate the process.

For a starter, I suggest Head First Object Oriented Analysis and Design. It guides you to build an OO application in a simple intuitive step by step method.

Although leaning towards Rational UP I've found these two to offer a lot of insight into OO design.

  • Applying UML and Patterns - Craig Larman
  • UML 2 and the Unified Process: Practical Object-Oriented Analysis and Design - Jim Arllow & Ila Neustadt
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top