TL;DR: Three essential books for understanding object-oriented design and agile development: (1) “Agile Software Development, Principles, Patterns, and Practices” by Robert C. Martin (Uncle Bob). (2) “Refactoring: Improving the Design of Existing Code” by Martin Fowler. (3) “Working Effectively with Legacy Code” by Michael Feathers. These remain foundational texts for software developers decades later.
You often hear it stated by very bright people that they thought they understood object oriented design until they began practicing Test Driven Development (TDD). I definitely include myself in that group (the misunderstanding OOD part anyway!).
Here is a list of the very best books I have found that helps bridge the divide between OOD and Agile for those of you who are currently making that transition. They are highly recommended.
Agile Software Development, Principles, Patterns, and Practices [defunct link: http://www.amazon.com/exec/obidos/redirect?link_code=ur2&tag=michackennesw-20&camp=1789&creative=9325&path=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0135974445%2Fsr%3D8-1%2Fqid%3D1144195976%2Fref%3Dpd_bbs_1%3F%255Fencoding%3DUTF8][IMAGE NO LONGER AVAILABLE]
by Robert C. Martin
Refactoring: Improving the Design of Existing Code [defunct link: http://www.amazon.com/exec/obidos/redirect?link_code=ur2&tag=michackennesw-20&camp=1789&creative=9325&path=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0201485672%2Fsr%3D8-1%2Fqid%3D1144196485%2Fref%3Dpd_bbs_1%3F%255Fencoding%3DUTF8][IMAGE NO LONGER AVAILABLE]
by Martin Fowler
Working Effectively with Legacy Code [defunct link: http://www.amazon.com/exec/obidos/redirect?link_code=ur2&tag=michackennesw-20&camp=1789&creative=9325&path=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0131177052%2Fsr%3D8-1%2Fqid%3D1144196575%2Fref%3Dpd_bbs_1%3F%255Fencoding%3DUTF8][IMAGE NO LONGER AVAILABLE]
by Michael Feathers
