When I started at Intelliware many years ago, it was common practice for new employees to be given one or more books to read. In my case, I received Extreme Programming Explained, by Kent Beck. It was 2005, and the way that Intelliware worked was almost verbatim by the book, “the book” being Extreme Programming Explained. The influence of extreme programming, its values and practices continues today at Intelliware. Every day, our project teams Refactor, Pair, write Automated Unit Tests, work on Short Releases, assume Collective Code Ownership, and Continuously Integrate. Over time, we’ve drifted away from handing out recommended reading on day one for new employees, but we still have a bookish culture.
Earlier this year, I was wondering what other books have influenced Intelliware, so I asked my colleagues to vote. I went into the exercise assuming “Extreme Programming Explained has got to be number one, but what are the next few on the list?” I put out a call for nominations, organized some interviews to talk about the books, and wrapped up with some voting. To my surprise, XP Explained was not voted number one, although it was in the top five. As Churchill said, “Democracy is the worst form of government, except for all the others.”
See the end of this post for a sorted list of all the nominated books. After the voting, Intelliware’s Top Three books were:
1. Clean Code, by Robert Martin
2. Refactoring, by Martin Fowler
3. Clean Architecture, by Robert Martin
Our top picks by Robert Martin and Martin Fowler are detail-oriented books that deal directly with the mechanics of software development. All three of these books use the “Boy Scout Rule” metaphor, encouraging software developers to leave the codebase cleaner than we found it, and give catalogues of methods to do that cleanup and many examples of how. Over the years, my colleagues and I have gathered in study groups and labs to discuss and learn from these books.
Our second choice, Refactoring by Martin Fowler, describes a core practice from Extreme Programming. Refactoring is defined as a change made to the internal structure of software (to make it easier to understand or cheaper to modify) without changing its observable behaviour. As my colleague, Diego Correa said when I was interviewing him, “If we don’t pay attention to what we are doing, just changing code, not trying to improve it…it will get more complex, more confusing, creating more bugs and increasing the cost to maintain this code.” Refactoring can make it easier to add a feature, or it can improve your understanding of the code. Most of Refactoring is a catalogue of techniques. Each entry describes the steps to execute a refactoring safely and efficiently, but also describes the motivations to choose that refactoring. The book is packed with examples.
Our first and third choices, both by Robert Martin, are Clean Code and Clean Architecture. Clean Code gives advice and direction at the most detailed levels of software development. It helps with naming things, choosing the right responsibilities for functions, concurrency, and unit testing. Focusing on the details and improving code differentiates clean code from bad code. This book attracts practitioners who want to get better at the craft of software. Clean Architecture moves from the low-level details up to the higher-level structure of software. Martin points out that design exists on a continuum from low to high level, so there is not a clear distinction between code design and architecture.
So, what’s next? I expect that we will revisit many of our top books over the next few years with study groups, talks, and labs. I am also looking forward to getting a list of our top blogs, videos, and other non-books. I will report back, but until then, keep reading and talking about software development.
Intelliware’s Top Books
1. ‘Clean Code’, by Robert Martin
2. ‘Refactoring ‘, by Martin Fowler
3. ‘Clean Architecture’, by Robert Martin
4. ‘Extreme Programming Explained: Embrace Change’, by Kent Beck
5. ‘The Phoenix Project’, by Gene Kim et al.
6. ‘The Mythical Man Month’, by Fred Brooks
7. ‘The Pragmatic Programmer’, by Hunt and Thomas
8. ‘Effective Java’, by Joshua Bloch
9. ‘Design Patterns: Elements of Reusable Object-Oriented Software’, by Erich Gamma et al.
10. ‘Crucial Conversations: Tools for Talking When Stake are High’, by Kerry Patterson et al.
11. ‘Domain Driven Design’, by Eric Evans
12. ‘Code Complete’, by Steve McConnell
13. ‘Planning Extreme Programming’, by Kent Beck and Martin Fowler
15. ‘Implementing Domain Driven Design’, by Vaughn Vernon
16. ‘Domain Modeling Made Functional’, by Scott Wlaschin
17. ‘Continuous Delivery’, by Jez Humble et al.
18. ‘Agile Retrospectives’, by Esther Derby and Diana Larsen
19. ‘The Visual Display of Quantitative Information’, by Edward Tufte
20. ‘The Design of Everyday Things’, by Donald Norman
21. ‘The Culture Code: The Secrets of Highly Successful Groups’, by Dan Coyle
22. ‘Test Driven Development: By Example’, by Kent Beck
23. ‘Java Concurrency in Practice’, by Brian Goetz
24. ‘Effective Feature Management’, by John Kodumal
25. ‘User Stories Applied’, by Mike Cohn
26. ‘Turn the Ship Around’, by L David Marquet
27. ‘The DevOps Handbook’, by Gene Kim et al.
28. ‘Pair Programming Illuminated’, by Laurie Williams and Robert Kessler
29. ‘Object-Oriented Analysis and Design with Applications’, by Grady Booch
30. ‘Lean Startup’, by Eric Ries
31. ‘Getting Things Done’, by David Allen
32. ‘Functional Programming in Scala’, by Paul Chiusano and Rúnar Bjarnason
33. ‘Don’t Make Me Think’, by Steve Krug
34. ‘The Productive Programmer’, by Neal Ford
35. ‘Programmers at Work’, by Susan Lammers
36. ‘Now, Discover Your Strengths’, by Donald O. Clifton and Marcus Buckingham
37. ‘Joel on Software’, by Joel Spolsky
38. ‘Crossing the Chasm’, by Geoffrey Moore
39. ‘Analysis Patterns’, by Martin Fowler
40. ‘Agile Estimation and Planning’, by Mike Cohn
41. ‘Women Don’t Ask: Negotiation and the Gender Divide’, by Babcock and Laschever
42. ‘The Timeless Way of Building’, by Christopher Alexander
43. ‘The One Minute Manager’, by Ken Blanchard
44. ‘The Goal’, by Eliyahu Goldratt
45. ‘Set Phasers on Stun’, by S. M. Casey
46. ‘Multipliers’, by Liz Wiseman and Greg McKeown
47. ‘Lean In: Women, Work, and the Will to Lead’, by Sheryl Sandberg
48. ‘If I Understood You, Would I Have This Look on My Face?’, by Alan Alda
49. ‘Grokking Algorithms’, by Aditya Y. Bhargava
50. ‘Critical Chain’, by Eliyahu Goldratt
51. ‘A Pattern Language’, by Christopher Alexander