A few people have asked for recommendations of good foundational Object Oriented Programming texts. The truth is I’m kind of behind on my formal OOP reading, and some of the early texts I read I wouldn’t recommend. My first proper OOP book was Object-Oriented Analysis and Design with Applications by Booch, and while it’s not a bad book, I remember it being awfully dry.
Honestly, most of what I know I learned from surfing WikiWiki. It’s still the best source of collected software development thought on the planet, albeit not the most organized. I highly recommend killing an hour or hundred link-surfing WikiWiki.
I haven’t read all of it yet, but Object-Oriented Software Construction, by Bertrand Meyer, is probably one of the better guides out there about how to think of the world in terms of objects with well-defined responsibilities.
I can wholeheartedly recommend Kent Beck’s Smalltalk Best Practice Patterns. It masquerades as a book about Smalltalk, but it’s really a book about how to write clean OO code all the way down at the method level.
I have a long list of OO books I’ve been meaning to get to. I hear good things about both Domain-Driven Design and Growing Object-Oriented Software, Guided by Tests. I’ve always wanted to read some of Rebecca Wirfs-Brock’s work, such as Object Design: Roles, Responsibilities, and Collaborations, as well as Uncle Bob’s take on the subject. Speaking of Uncle Bob, his Ruby Midwest keynote piqued my interest in Ivar Jacobson’s book on use-case driven OOP.
Obviously, this list is far from comprehensive. So I’d like to open the floor: what books do you consider essential first-level Object Oriented reading material?
I enjoyed Uncle Bob’s PPP book that you linked to, and I recommend the articles he has at http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod (so much so that I’ve had them linked on the side of my blog since I put it up).
You mentioned all the important OOP books from my list.
I would add “Lean Architecture” as well. It describes the DCI architecture approach, also called FullOOP sometimes. It’s the only one book that focuses strictly on objects, not on classes.
+1 for mentioning c2 wiki 🙂
I just LOVE the idea of an OO book focusing on objects rather than classes. That book is also on my reading list.
The first book that opened it up to me was Robert C. Martin’s Designing Object Oriented C++ Applications (http://www.amazon.com/Designing-Object-Oriented-Applications-Method/dp/0132038374/sr=1-1/qid=1161361582/ref=sr_1_1/102-5628847-5032158?ie=UTF8&s=books)
I really like his updated Agile version of that with its TDD focus
I also gained a huge amount from Gang of four Design Patterns, Jesse Liberty’s Clouds to Code (http://www.amazon.com/Clouds-Code-Jesse-Liberty/dp/1861000952/ref=sr_1_1?s=books&ie=UTF8&qid=1324059729&sr=1-1) and Martin Fowler’s Refactoring (http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=sr_1_1?s=books&ie=UTF8&qid=1324059802&sr=1-1)
A really interesting book was by Peter Coad on business patterns – color coded UML I think it was, and I found that useful because it talked a lot about common design patterns as they occurred in business logic (eg moment-interval, item-item description) rather than the more general and technical Gang of Four ones.
There were some earlier ones in the early 90s when I started learning OO that were a big help transitioning from C. I recall one good one was the quick start guide to an early microsoft visual C++ compiler (probably v1.52!). Oddly, a book on Modula 2 and ADA helped me get into the idea of objects, if not OO. Don’t recall which though – was loaned from Manchester central library (UK). And kudos to Yourdon’s structured design book, which I think was an important step for me from code-and-fix C hacking to objects to OO.
Special mention to Alexandrescu’s book on C++ template metaprogramming: compile time design patterns using templates. A bit too much for me as a practical programmer, but amazing none the less.
And if I had my time again, I wouldn’t have read the SSADM version 4 book as my first introduction to ‘proper’ software engineering!
Regards, @almellor Al from Yuuguu
“Clouds to Code” is completely new to me, thanks for that!
Man, this answer takes me back to my C/C++ days. I still like C++, but some of the OO that was taught based on C++ constraints took a while to un-learn.
Oh yes – Fowler series one : patterns of enterprise application architecture. Very useful.
DDD is definitely worth reading but not necessarily entery level OO, I guess for that topic I originally got a lot of Craig Larman’s book and then Robert Martins book.
Are you referring to this book?
Sorry yeah I am indeed. I read it years ago and do remember liking it, the GRASP patterns seemed pretty clear to me. However it is quite long and I do know other people haven’t enjoyed it as much as I did, so I’m not sure if in this day and age I’d start with it or go straight to something a little more advanced (such as one of Robert Martins’ books).
The Art of the Metaobject Protocol blows every other OOP book out of the water. Alan Kay called it the best book anyone’s written in ten years.
But it’s more like a tenth OOP book you read. 🙂
I really love The Object Oriented Thought Process by Matt Weisfeld http://www.informit.com/store/product.aspx?isbn=0672330164
I can also definitely thumbs up DDD by Eric Evan [though I haven’t finished the last section on large scale integrations patterns], but the building block patterns are tremendously useful.
Object Thinking by Michael West is very interesting and different, though I haven’t finished it yet, so I’m reserving judgement until then.
On Object Thinking, I read it quite a few years ago and I felt the main lesson the author wanted you take away was that they were very very clever. Not sure I really got much practical value out of it, but I’d be interested to hear if its better than I remember.
On top of my list is “Applying UML” by C. Larman. He explains General Responsibility Assignment Software Patterns really good which are kind of high level GoF or other patterns. Lots of useful stuff – analysis, design, assigning responsibilities etc. Let title not scare you, it’s in fact not any UML reference;)
Rebecca Wirfs-Brock’s “Designing Object-Oriented Software” was a good one back in the day and it’s still available:
She talks about the venerable CRC card method (Class, Responsibility, and Collaboration) of doing OO design. It’s been quite a while since I’ve read this, so I’m not sure how it stands up to today’s thinking, but I remember it being a good book when I was learning how to think in an OO way.
Thanks for the link. We owe a lot to Rebecca Wirfs-Brock, so I can recommend Object Design too.
Incidentally, @Andrzej there are quite a few books that do objects rather than classes. That’s always been our emphasis. If you’re really serious you could try A Theory of Objects by Martin and Cardelli 🙂
There are several:
* Kent Beck @KentBeck http://www.threeriversinstitute.org/
– Test Driven Development: By Example http://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530/ref=ntt_at_ep_dpt_2
– Implementation Patterns http://www.amazon.com/Implementation-Patterns-Kent-Beck/dp/0321413091/ref=ntt_at_ep_dpt_6
– Analysis Patterns: Reusable Object Models http://www.amazon.com/Analysis-Patterns-Reusable-Object-Models/dp/0201895420/ref=ntt_at_ep_dpt_5
– PEEA http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420/ref=ntt_at_ep_dpt_1
– Domain-Specific Languages http://www.amazon.com/Domain-Specific-Languages-Addison-Wesley-Signature-Fowler/dp/0321712943/ref=ntt_at_ep_dpt_4
– UML Distilled: A Brief Guide to the Standard Object Modeling Language http://www.amazon.com/UML-Distilled-Standard-Modeling-Language/dp/0321193687/ref=ntt_at_ep_dpt_3
– Refactoring: Ruby Edition http://www.amazon.com/Refactoring-Ruby-Jay-Fields/dp/0321603508/ref=sr_1_1?s=books&ie=UTF8&qid=1325339817&sr=1-1
* Grady Booch @kwbeam:disqus Grady_Booch http://computingthehumanexperience.com/
– Object-Oriented Analysis and Design with Applications (3rd Edition) http://www.amazon.com/Object-Oriented-Analysis-Design-Applications-3rd/dp/020189551X/ref=sr_1_1?s=books&ie=UTF8&qid=1325340388&sr=1-1
– Object Solutions: Managing the Object-Oriented Project http://www.amazon.com/Object-Solutions-Managing-Object-Oriented-Project/dp/0805305947/ref=sr_1_3?s=books&ie=UTF8&qid=1325340388&sr=1-3
– Object-Oriented Modeling and Design with UML (2nd Edition) http://www.amazon.com/Object-Oriented-Modeling-Design-UML-2nd/dp/0130159204/ref=ntt_at_ep_dpt_2
– Unified Modeling Language Reference Manual, (paperback), The (2nd Edition) http://www.amazon.com/Unified-Modeling-Language-Reference-paperback/dp/032171895X/ref=ntt_at_ep_dpt_4
Ivar Jacobson @ivarjacobson http://blog.ivarjacobson.com/ivarblog/
– Use-Case 2.0 ebook http://www.ivarjacobson.com/Use_Case2.0_ebook/ (FREE ebook)
– Aspect-Oriented Software Development with Use Cases http://www.amazon.com/Aspect-Oriented-Software-Development-Use-Cases/dp/0321268881/ref=ntt_at_ep_dpt_5
– The Unified Software Development Process http://www.amazon.com/Unified-Software-Development-Process/dp/0201571692/ref=ntt_at_ep_dpt_3
* Bertrand Meyer http://bertrandmeyer.com/
– Touch of Class: Learning to Program Well with Objects and Contracts http://www.amazon.com/Touch-Class-Learning-Program-Contracts/dp/3540921443/ref=sr_1_2?s=books&ie=UTF8&qid=1325343565&sr=1-2 Available online: http://www.springerlink.com/content/978-3-540-92144-8#section=110925&page=1&locus=0
– Reusable Software : The Base Object-Oriented Component Libraries http://www.amazon.com/Reusable-Software-Object-Oriented-Component-Libraries/dp/0132454998/ref=sr_1_6?s=books&ie=UTF8&qid=1325343565&sr=1-6
* Peter Coad
– Object-Oriented Programming http://www.amazon.com/Object-Oriented-Programming-Peter-Coad/dp/013032616X/ref=ntt_at_ep_dpt_1
– Object Models: Strategies, Patterns, and Applications (2nd Edition) http://www.amazon.com/Object-Models-Strategies-Patterns-Applications/dp/0138401179/ref=ntt_at_ep_dpt_2
– Object-Oriented Design http://www.amazon.com/Object-Oriented-Design-Peter-Coad/dp/0136300707/ref=ntt_at_ep_dpt_3
– Object Thinking http://www.amazon.com/Object-Thinking-DV-Microsoft-Professional-David/dp/0735619654/ref=sr_1_1?s=books&ie=UTF8&qid=1325341960&sr=1-1
– Object-Oriented Construction Handbook: Developing Application-Oriented Software with the Tools & Materials Approach http://www.amazon.com/Object-Oriented-Construction-Handbook-Developing-Application-Oriented/dp/1558606874/ref=sr_1_1?s=books&ie=UTF8&qid=1325342151&sr=1-1
– The Object-Oriented Thought Process http://www.amazon.com/Object-Oriented-Thought-Process-Matt-Weisfeld/dp/0672330164/ref=sr_1_1?s=books&ie=UTF8&qid=1325342394&sr=1-1
– Foundations of Object-Oriented Languages: Types and Semantics http://www.amazon.com/Foundations-Object-Oriented-Languages-Types-Semantics/dp/026202523X/ref=sr_1_1?s=books&ie=UTF8&qid=1325342707&sr=1-1
– Interface-Oriented Design http://www.amazon.com/Interface-Oriented-Design-Pragmatic-Programmers/dp/0976694050/ref=sr_1_1?s=books&ie=UTF8&qid=1325342905&sr=1-1
– Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) http://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0131489062/ref=sr_1_43?s=books&ie=UTF8&qid=1325344517&sr=1-43
– Pattern-Oriented Software Architecture Volume 1: A System of Patterns http://www.amazon.com/Pattern-Oriented-Software-Architecture-System-Patterns/dp/0471958697/ref=sr_1_1?s=books&ie=UTF8&qid=1325340037&sr=1-1
– Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects http://www.amazon.com/Pattern-Oriented-Software-Architecture-Concurrent-Networked/dp/0471606952/ref=sr_1_2?s=books&ie=UTF8&qid=1325340037&sr=1-2
– Pattern-Oriented Software Architecture Volume 3: Patterns for Resource Management http://www.amazon.com/Pattern-Oriented-Software-Architecture-Patterns-Management/dp/0470845252/ref=sr_1_4?s=books&ie=UTF8&qid=1325340037&sr=1-4
– Pattern-Oriented Software Architecture Volume 4: A Pattern Language for Distributed Computing http://www.amazon.com/Pattern-Oriented-Software-Architecture-Distributed-Computing/dp/0470059028/ref=sr_1_5?s=books&ie=UTF8&qid=1325340037&sr=1-5
– Pattern Oriented Software Architecture Volume 5: On Patterns and Pattern Languages http://www.amazon.com/Pattern-Oriented-Software-Architecture-Languages/dp/0471486485/ref=sr_1_3?s=books&ie=UTF8&qid=1325340037&sr=1-3
– Patterns for Parallel Software Design (Wiley Software Patterns Series) http://www.amazon.com/Patterns-Parallel-Software-Design-Wiley/dp/0470697342/ref=sr_1_6?s=books&ie=UTF8&qid=1325340037&sr=1-6
Head First Serie http://headfirstlabs.com/
– Head First Design Patterns http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_3?s=books&ie=UTF8&qid=1325341526&sr=1-3
– Head First Software Development http://www.amazon.com/Head-First-Software-Development-Pilone/dp/0596527357/ref=sr_1_10?s=books&ie=UTF8&qid=1325341526&sr=1-10
* Rebecca Wirfs-Brock both books
Uncle Bob Clean books and the Agile Software Development, Principles, Patterns, and Practices (I prefer the C# edition)
Also recommended as several topics covered
The Addison-Wesley Signature Series (Beck) http://www.informit.com/imprint/series_detail.aspx?ser=2175138
The Addison-Wesley Signature Series (Fowler) http://www.informit.com/imprint/series_detail.aspx?ser=2629220
A one of the best for the end:
* Meilir Page-Jones – What Every Programmer Should Know About Object-Oriented Design http://www.amazon.com/Every-Programmer-Should-Object-Oriented-Design/dp/0932633315/ref=ntt_at_ep_dpt_3 or the updated version Fundamentals of Object-Oriented Design in UML http://www.amazon.com/Fundamentals-Object-Oriented-Design-Meilir-Page-Jones/dp/020169946X/ref=sr_1_1?s=books&ie=UTF8&qid=1325345794&sr=1-1
I haven’t looked at it properly yet, but there is a book that teaches you Java with the emphasis on OOP. It’s called Objects First with Java: http://www.bluej.org/objects-first/
There is also a Youtube series on it (for those who have problems concentrating on books): https://www.youtube.com/user/objectsfirstwithjava/videos?sort=dd&live_view=500&flow=list&view=0