Een (verre van complete) lijst boekentips
Ter voorbereiding op een praatje over de boekenclub, heb ik de lijst aan softwareboeken die ik de afgelopen jaren heb gelezen eens goed doorgelopen. Het resultaat zou als referentiemateriaal kunnen dienen voor een opleidingstraject van junioren binnen een organisatie, of kan als inspiratie worden gebruikt voor een boekenclub, of als gewoon een lijst goede boeken voor wie zijn kennis over softwareontwikkeling bij wil spijkeren.
Dit is geen complete lijst van alle boeken die de moeite waard zijn om te lezen; integendeel. De lijst is verre van compleet: hij beperkt zich tot boeken die ik zelf gelezen heb. (Maar: hier en daar heb ik de tweede editie gepakt van boeken waarvan ik zelf alleen de eerste editie heb gelezen.)
In wat volgt heb ik ze geordend in drie categorieën: junior, medior en senior (zie ook deze blog). Binnen de categorieën houd ik een alfabetische volgorde aan op achternaam van de (eerstgenoemde) auteur. De grenzen tussen de categorieën zijn in de praktijk uiteraard vaag.
Zelf heb ik de boeken niet in deze volgorde gelezen. Je hoeft niet per se een senior te zijn om de boeken in de senior-categorie te lezen, en omgekeerd kan het voor senioren ook geen kwaad om boeken in de junior-categorie te (her)lezen.
Junior
De boeken in deze categorie focussen zich op de basis: (goede) code schrijven, testen en refactoren (maar niet per se in die volgorde!). Wat opvalt is dat Kent Beck en Robert “uncle Bob” Martin goed vertegenwoordigd zijn in deze categorie. Ze zijn belangrijk geweest voor de verhouding die ik tot mijn code en mijn werk heb. Wengrow biedt een zeer leesbare inleiding in basale datastructuren; Skoulikari maakt een junior op een visuele manier wegwijs in de basis van Git.
- Maurício Aniche - Effective Software Testing: A Developer’s Guide
- Kent Beck & Cynthia Andres - Extreme Programming Explained: Embrace Change (Second Edition)
- Kent Beck - Tidy First?: A Personal Exercise in Empirical Software Design1
- Kent Beck - Test-Driven Development: By Example
- Dustin Boswell & Trevor Foucher - The Art of Readable Code: Simple and Practical Techniques for Writing Better Code
- David Farley - Modern Software Engineering1
- Martin Fowler - Refactoring: Improving the Design of Existing Code (Second Edition)2
- Robert C. Martin - Clean Agile: Back to Basics2
- Robert C. Martin - Clean Code: A Handbook of Agile Software Craftsmanship3
- Robert C. Martin - Clean Craftsmanship: Disciplines, Standards, and Ethics4
- Robert C. Martin - The Clean Coder, The: A Code of Conduct for Professional Programmers
- Mark Seemann - Code That Fits in Your Head: Heuristics for Software Engineering
- Anna Skoulikari - Learning Git: A Hands-On and Visual Guide to the Basics of Git1
- David Thomas & Andrew Hunt - The Pragmatic Programmer: Your Journey to Mastery (20th Anniversary Edition)3
- Jay Wengrow - A Common Sense Guide to Data Structures and Algorithms (Second Edition)3
Medior
In deze categorie worden de vaardigheden van een softwareontwikkelaar verbreed. Er is veel aandacht voor agile ontwikkelmethoden (Cohn, de Poppendiecks, Shore) en het ontwerp van code (Van Deursen & Seemann, Freeman & Robson, Lelek & Skeet), en het wordt tijd om een mening te ontwikkelen over architectuur (Martin, Richards & Ford). De opdracht van de ontwikkelaar wordt verbreed via het werk van Khononov en Wiegers, en vanuit nieuwe invalshoeken bekeken door Groeneveld en Hermans.
- Mike Cohn - Succeeding with Agile: Software Development Using Scrum4
- Steven van Deursen & Mark Seemann - Dependency Injection: Principles, Practices, and Patterns5
- Ola Ellnestam & Daniel Brolund - The Mikado Method5
- Michael C. Feathers - Working Effectively with Legacy Code4
- Eric Freeman & Elisabeth Robson - Head First Design Patterns: Building Extensible & Maintainable Object-Oriented Software (Second Edition)
- Tom Greever - Articulating Design Decisions: Communicate with Stakeholders, Keep Your Sanity, and Deliver the Best User Experience (Second Edition)2
- Wouter Groeneveld - The Creative Programmer1
- Felienne Hermans - The Programmer’s Brain4
- Vlad Khononov - Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy4
- Vladimir Khorikov - Unit Testing: Principles, Practices, and Patterns2
- Tomasz Lelek & Jon Skeet - Software Mistakes and Tradeoffs: How to make good programming decisions4
- Maude Lemaire - Refactoring at Scale: Regaining Control of Your Codebase2
- Robert C. Martin - Clean Architecture: A Craftsman’s Guide to Software Structure and Design3
- Mary Poppendieck & Tom Poppendieck - Lean Software Development: An Agile Toolkit
- Mark Richards & Neal Ford - Fundamentals of Software Architecture: An Engineering Approach (Second Edition)3
- James Shore - The Art of Agile Development (Second Edition)4
- Saleem Siddiqui - Learning Test-Driven Development: A Polyglot Guide to Writing Uncluttered Code4
- Karl Wiegers - Software Development Pearls: Lessons from Fifty Years of Software Experience5
Senior
De boeken in deze categorie onderscheiden zich niet zozeer van de rest door hun moeilijkheidsgraad, maar door het feit dat ze over onderwerpen gaan die voor veel ontwikkelaars in vroege stadia van hun carrière waarschijnlijk nog niet heel aantrekkelijk zijn.
De reikweidte van onderwerpen is opvallend. Deze categorie bevat onder andere historische (Brooks, Highsmith) en fundamentele bespiegelingen (Khononov, Montalion), de uitbreiding naar nieuwe ontwikkelparadigma’s (Buonanno, Wlaschin) – in elk geval voor een van huis uit objectgeoriënteerde ontwikkelaar zoals ik –, softwarearchitectuur in perspectief van tijd (Ford et al., Newman) en kijkjes in de keuken van grote techbedrijven (Adkins et al., Forsgren et al., Winters et al.).
– De hoeveelheid et al.’s vallen ook op, nu je het zegt.
- Heather Adkins, Betsy Beyer, Paul Blankinship, Piotr Lewandowski, Ana Oprea & Adam Stubblefield - Building Secure and Reliable Systems: Best Practices for Designing, Implementing and Maintaining Systems2
- Frederick P. Brooks - Mythical Man-Month, The: Essays on Software Engineering, Anniversary Edition (Second edition)1
- Enrico Buonanno - Functional Programming in C# (Second Edition)4
- Neal Ford, Rebecca Parsons, Patrick Kua & Pramod Sadalage - Building Evolutionary Architectures: Automated Software Governance (Second Edition)
- Nicole Forsgren, Jez Humble & Gene Kim - Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations1
- Jim Highsmith - Wild West to Agile: Adventures in Software Development Evolution and Revolution1
- Vlad Khononov - Balancing Coupling in Software Design: Universal Design Principles for Architecting Modular Software Systems
- Cyrille Martraire - Living Documentation: Continuous Knowledge Sharing by Design4
- Cary Millsap - How to Make Things Faster: Lessings in Performance From Technology & Everyday Life1
- Diana Montalion - Learning Systems Thinking: Essential Nonlinear Skills and Practices for Software Professionals
- Sam Newman - Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith5
- Valentina Servile - Continuous Deployment: Enable Faster Feedback, Safer Releases, and More Reliable Software
- Titus Winters, Tom Manschreck & Hyrum Wright (eds.) - Software Engineering at Google: Lessons Learned from Programming Over Time2
- Scott Wlaschin - Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#1
*
Welke boeken ontbreken nog in het lijstje, volgens jou?