De beste boeken over software ontwikkeling die ik in 2025 las
Na 2020, 2021, 2022, 2023 en 2024, mag ik nu eindelijk weer zeggen: daar gaan we weer! (Zie ook mijn verre van complete lijst aan boekentips)
Top 1 - 5
1. Diana Montalion - Learning Systems Thinking: Essential Nonlinear Skills and Practices for Software Professionals
A leidt tot B en B leidt tot C, dus als we C willen, moeten we A. Dat is hoe ons denken er normaal gesproken ongeveer uitziet, en dat is helemaal prima. Maar ja, weet je, de werkelijkheid werkt dus niet zo. Want in de werkelijkheid leidt A niet alleen tot B maar ook tot D, E en F, en dat zijn dingen die een negatieve impact op C (en B en misschien ook op A) hebben. Soms is het zelfs beter om A en B helemaal niet te doen, of juist het tegenovergestelde, als we C willen bereiken. Dat is hoe de werkelijkheid wél werkt. Maar ja, ga dat maar eens aan je collega’s uitleggen.
De werkelijkheid is een systeem dat zo complex is dat we niet (meer?) vanuit onze leunstoel kunnen beredeneren wat de gevolgen van ons handelen zullen zijn. Onze traditionele, lineaire manier van denken, kan ons maar zoveel verder helpen. Wat we nodig hebben is een nieuw perspectief, die van het systeemdenken, dat ons in staat stelt om – niet om grip te krijgen op de systemen waarin we opereren, maar om, in de woorden van Donella Meadows, ermee te kunnen dansen.
Dat klinkt erg vrij en dichterlijk en dat is het ook. Learning Systems Thinking kan regelmatig een frustrerende leeservaring zijn voor softwareontwikkelaars die graag een rigide logica hooghouden en naar afvinklijstjes verlangen. Maar er schuilt iets ontegenzeggelijks waars over de context waarin we opereren, in de bespiegelingen van Montalion.
Hoewel ik moeilijk onder woorden kan brengen waarom, kan ik me niet aan de indruk onttrekken dat dit boek het afgelopen jaar mijn gedrag en mijn denken het meest heeft beïnvloed – misschien niet door me nieuwe ideeën aan te reiken, maar door woorden te geven aan een richting die ik al eerder op bewoog. (In mijn filosofisch retrospectief over testen nam ik bijvoorbeeld, zonder het te weten, al een systeemperspectief in.)
2. Vlad Khononov - Balancing Coupling in Software Design: Universal Design Principles for Architecting Modular Software Systems
Wie afhaakt bij de al te vrije Montalion komt echter meer dan genoeg aan zijn trekken bij de extreem lucide Khononov. Het eerste wat opvalt aan dit boek is hoe vreselijk goed het geschreven is. Hoewel het onderwerp behoorlijk fundamenteel van aard is, raak je als lezer nooit verstrikt in moeilijke abstracties. Khononov maakt zijn onderwerp concreet en praktisch, zonder in te boeten aan diepgang.
In Balancing Coupling in Software Design bespreekt hij de begrippen koppeling en cohesie. De meeste boeken over het ontwerp van software besteden daar niet meer dan een alinea of hoofdstuk aan, dus je zou je af kunnen vragen: kun je dat 200 pagina’s lang interessant houden? Het antwoord is een overtuigend – ja!
Khononovs bespreking is theoretisch sterk onderbouwd. Wanneer hij stelt dat een goed begrip van dit begrippenpaar dient om complexiteit te beteugelen, dan volgt daarop een uitgebreide analyse van wat complexiteit nu eigenlijk betekent. En als het hoofdonderwerp daarna aan bod komt, presenteert hij niet één model van koppeling-en-cohesie, maar wel drie. En daarbij laat hij het niet na om na te gaan hoe de zwakke plekken van het ene de inspiratiebron vormden voor de sterke kanten van het nieuwste model.
Maar het boek is geen zuiver theoretische denkoefening. De ideeën erin worden uitgebreid geïllustreerd met praktische voorbeelden. Ik twijfel er niet aan dat wie dit boek leest, betere classes zal schrijven, betere componenten zal ontwerpen, en een beter inzicht in (legacy) systemen zal ontwikkelen. Dit is zonder twijfel een moderne klassieker in ons vakgebied.
3. Valentina Servile - Continuous Deployment: Enable Faster Feedback, Safer Releases, and More Reliable Software
Ik meen dat ik het Daniel Terhorst-North in dit praatje heb horen zeggen, maar mijn geheugen kan me bedriegen – hoe dan ook, het praatje is sowieso de moeite waard. Maar wat ik dus wou zeggen, hij had het over bedrijven waarin junior ontwikkelaars op hun eerste dag, meteen al zonder problemen code naar de productieomgeving pushen. En ik hoorde het en dacht: ja-ja, dat zal wel.
Maar dankzij dit uitstekende naslagwerk van Valentina Servile geloof ik dat dat ook echt mogelijk is. Het is gewoon (lees: niet gewoon; zie #1 op deze lijst) een kwestie van de juiste gewoonten ontwikkelen als team en als organisatie. Onder andere maar niet uitsluitend: feature flagging, pair programming en Test-Driven Development (TDD). En dat betekent ook het afleren van niet-productieve gewoontes: feature branches, de opvatting van programmeren als eenzame bezigheid, en het overlaten van testen aan de tester. (Ook hier: zie #1 op deze lijst.)
Continue deployment is een haalbaar doel, je hebt alleen iemand nodig die je stap voor stap uitlegt hoe je daar komt. Een betere gids dan Servile kan ik me daarin niet wensen.
We bespraken deze voor onze boekenclub, en hoewel het boek geen voer is voor hoog oplopende discussies, is deze denk ik wel heel geschikt wanneer je als team op één lijn wil komen om sneller en beter waarde te leveren.
4. Mark Seemann - Code That Fits In Your Head: Heuristics for Software Engineering
Ook deze bespraken we in de boekenclub, maar deze is dus wél geschikt om over te discussiëren. Seemann zet in dit boek de bril van een cognitieve wetenschapper op en vraagt zich af: hoe kunnen we code op zo’n manier schrijven dat het ons brein niet overweldigt? Het resultaat is een prettig leesbare verzameling goede gewoonten die je onmiddellijk toe kunt passen.
Enkele van mijn persoonlijke favorieten: wijzig je code in kleine commits, behandel waarschuwingen als fouten, laat componenten niet meer dan zeven elementen bevatten, en structureer je start-upcode als een inhoudsopgave van de functionaliteit van je applicatie.
5. Mary Poppendieck & Tom Poppendieck - Lean Software Development: An Agile Toolkit
Een stukgelezen exemplaar van dit boek heeft letterlijk jarenlang in (of op) de kast gestaan bij mijn werkgever, het stond er al toen onze werkplekken nog op de eerste verdieping waren en onze softwarebibliotheek uit niet meer dan een handvol managementboeken bestond. De oubollige cover heeft me altijd afgeschrokken en dat is jammer, want Lean Software Development is absoluut een klassieker en staat vol met wijze lessen die vandaag de dag nog van toepassing zijn. Het minimaliseren van work in progress is er bijvoorbeeld zo eentje die ik uit dit boek opdeed.
Maar het belangrijkste inzicht dat Mary en Tom Poppendieck me gaven, zat ’m in de praktijk van value stream mapping. Daarbij wordt in beeld gebracht wat het proces is van idee naar implementatie – en wat de verhouding is tussen de tijd dat er daadwerkelijk wat gebeurt en de tijd dat men op elkaar zit te wachten. Wanneer je vanuit die invalshoek naar het werk kijkt, wordt ineens duidelijk hoe zinloos het is om je werk zo te organiseren dat iedereen altijd maar bezig is. Verstandiger is om je af te vragen: hoe organiseer je je werk zodanig dat je het snelst waarde levert?
Laat het een waarschuwing zijn: wie Lean Software Development eenmaal heeft gelezen kan de enorme hoeveelheid verspilling in zijn of haar team nooit meer ont-zien!
Eervolle vermeldingen
- John Ousterhout - A Philosophy of Software Design
- Kent Beck - Test-Driven Development: By Example
- Cate Huston - The Engineering Leader: Strategies for Scaling Teams and Yourself
- Piotr Sarna & Cynthia Dunlop - Writing for Developers: Blogs that get read
- Mark Cole - Being at Work: Using Existentialism to Make Sense of Your Organisational Life.