Over boeken en boekenclubs (3/3)

Dus: je wil een boekenclub starten, maar je weet niet waar je moet beginnen. Dit is een suggestie: begin eens na te denken over een geschikt boek. De ervaring heeft bewezen dat Clean Craftsmanship, Code That Fits in Your Head, Continuous Deployment en Head First Design Patterns het bespreken waard zijn.


*

Maar je zou ook kunnen denken aan Modern Software Engineering van Dave Farley (mijn op één na favoriete boek van 2024). Dit boek biedt een hoogover antwoord op de vraag: wat doen we nu eigenlijk wanneer we software ontwikkelen? Dat lijkt misschien een triviale vraag – zeker voor in een boekenclub voor en door softwareontwikkelaars! Maar in de praktijk zie je juist vaak dat er (subtiele en minder subtiele) verschillen in opvatting hierover bestaan tussen ontwikkelaars. Een ontwikkelaar dat zijn werk ziet als louter code schrijven, zal een andere aanpak kiezen dan een ontwikkelaar die meent dat het zijn taak is problemen op te lossen. En iemand die is gefocust op (business)waarde leveren op korte termijn, maakt andere afwegingen dan iemand die een toekomstbestendige architectuur probeert te definiëren. En een team waarin al deze verschillende zienswijzen sluimeren maar niet worden uitgesproken, zal niet half zo effectief zijn als een team dat deze discussie diepgaand heeft gevoerd.

Een andere optie: The Art of Agile Development van James Shore. Dit boek biedt een toegankelijk overzicht van alle verschillende praktijken – procesmatige, technische, sociologische – waar een team mee aan de slag moet, wil het de valkuil van waterval-met-een-scrum-sausje ontwijken en werkelijk wendbaar zijn in het ontwikkelen van software. Agile ontwikkeling vraagt van ontwikkelaars om structureel hun eigen werkwijzen kritisch te bevragen, en dit boek is een fantastische gids bij die onderneming. Agile ontwikkelen is geen alles-of-niets-verhaal: Shore biedt de handvaten om een team stapje voor stapje te laten groeien tot wasdom. Het was mijn op één na favoriete boek van 2022.

Ook deze is erg goed: Learning Domain-Driven Design van Vlad Khononov. (Het boek kreeg een eervolle vermelding in 2022.) Bij Domain-Driven Design (DDD) denken mensen vaak aan services en repositories (zie ook deze blog) en aggregates en value objects en nog een heleboel andere terminologie. Maar Khononov legt heel goed uit: DDD is niets anders dan begrijpen wat jouw organisatie probeert te bereiken, en je code optimaliseren om dat te bereiken. Learning Domain-Driven Design is vooral een aanrader voor ontwikkelaars en ontwikkelteams die geneigd zijn zich in technische uitdagingen te verliezen. Dit boek zorgt ervoor dat je je ogen gericht houdt op de belangrijke zaken: waarde leveren voor de organisatie middels een diepgaand begrip van hun probleemdomein.


*

Eén van de belangrijkste (en door ontwikkelaars meest onderschatte) onderdelen van softwareontwikkeling is testen. Het beste boek dat ik over dit onderwerp heb gelezen is Unit Testing van Vladimir Khorikov (mijn favoriete boek van 2021). Met name Khorikovs inzichten over de verschillende betekenissen van “unit” in “unittest” (zie deze blog) heeft een aanzienlijke invloed gehad op de manier waarop ik mijn tests opzet. Maar het boek opende ook mijn ogen voor de architecturele informatie die tests kunnen overbrengen (zie deze blog). Kort door de bocht: infrastructurele code (bijvoorbeeld code die met een database communiceert) test je met integratietests; domeinlogica met unittests. Wanneer je domeinlogica alleen kunt testen via integratietests, dan wijst de test je daarmee op een ontwerpfout in je code. (Ik sprak erover in dit praatje.)

Effective Software Testing van Maurício Aniche is minder diepgravend, maar biedt een heel goede inleiding in de praktijk van testen voor ontwikkelaars. Dit boek is denk ik erg geschikt voor een boekenclub binnen een team waarin testen een ondergeschoven kindje voor ontwikkelaars is. Vaak betekent dat dat het schrijven van tests wordt gezien als de verantwoordelijkheid van de tester, en dat beperkt de verantwoordelijkheid van de ontwikkelaar tot het uitschrijven van logica. Hoe intuïtief dit ook mag klinken, het is een schadelijke taakverdeling die ik uitgebreid bespreek in dit praatje. Goede code is geteste code.

De laatste boekentip die ik heb over testen, gaat eigenlijk niet over testen. Software Engineering at Google (mijn op één na favoriete boek uit 2021) gaat over software engineering bij Google – in de volledige breedte, van het aannemen van nieuwe mensen tot het reviewen van code. Toch neem ik ’m op in deze lijst, om de bijzondere rol die testen heeft in het boek. Daar waar elk ander onderwerp één hoofdstuk toebedeeld krijgt, krijgt testen er drie. Dat op zichzelf toont al aan hoe belangrijk het thema is. Dit boek leerde me eerst en vooral de waarde van testen via de voordeur. Het boek is een aanrader, met name voor senior ontwikkelaars.


*

Ik zou het hierbij kunnen laten, maar omdat ik nu eenmaal ik ben (een filosoof), wil ik ook nog een drietal filosofieboeken aanstippen die een belangrijke invloed hebben gehad op mijn werk als softwareontwikkelaar.

Het idee van betekenis als gebruik dat Ludwig Wittgenstein uiteenzet in zijn fenomenale Philosophical Investigations, is van behoorlijke invloed op hoe ik domeinmodellen modelleer (zie deze blog). De ideeën van Wittgenstein echoën na in bijvoorbeeld de bounded contexts van DDD. Het is daarom niet toevallig dat ik op deze blog nog regelmatig over hem schrijf.

The Human Condition van Hannah Arendt heeft mijn houding jegens refactoren fundamenteel veranderd. Ik heb er in het verleden al meer dan genoeg over geschreven, dus ik verwijs graag naar deze, deze en deze blog.

Het laatste filosofieboek dat ik aan kan raden, laat zich misschien beter als een wetenschapsboek omschrijven, maar het is geschreven door één van mijn favoriete filosofen, dus ik reken ’m er gewoon bij: Darwin’s Dangerous Idea van Daniel Dennett. Het boek biedt een geweldige uiteenzetting van de evolutietheorie en haar verklarende waarde, en is relevant voor softwareontwikkelaars omdat softwaresystemen – in zekere zin – ook evoluerende entiteiten zijn. Zie deze en deze blog voor een (schetsmatige) uitwerking van dat idee.


*

Zijn we er dan? Nou – nee, want omdat ik nu eenmaal ik ben (pedant), wil ik ook nog een paar literatuurtips voor softwareontwikkelaars droppen.

Het Bureau van J.J. Voskuil is zonder twijfel de meest herkenbare en hilarische beschouwing uit het Nederlands taalgebied van wat het betekent om samen te moeten werken met mensen waar je niet per se een klik mee hebt. De roman in zeven delen verslaat een periode van dertig jaar aan arbeid, waarin er van alles verandert en toch alles hetzelfde blijft. Het enige nadeel: in totaal beslaat Het Bureau 5000 pagina’s, en ik kan me voorstellen dat niet iedereen daar zin in heeft.

Ik heb daarom ook een wat bescheidener roman in de aanbieding: Oorlog en vrede van Leo Tolstoj. Dit is niet controversieel: Tolstoj is een waanzinnig goede schrijver met een ongekend psychologisch inzicht. Als je een boek van hem uitleest, dan is dat met het gevoel gegroeid te zijn als persoon, het gevoel iets geleerd te hebben over jezelf en over je medemens. Oorlog en vrede bevat daarnaast een uitstekend voorbeeld van systeemdenken in zijn verklaring van de brand van 1812 in Moskou. En het moment waarop Pierre in een idealistische bui allerlei verbeteringen op zijn landgoed door probeert te voeren die het leven van zijn boeren alleen maar zwaarder en ingewikkelder maken, kwam voor mij wel even érg dichtbij.

Goed, Oorlog en vrede is met ruim 1600 pagina’s ook niet iets wat je in een weekendje uitleest, dus ik doe nog één poging: het verzameld werk van Franz Kafka – níet omdat het het beste verhaal over bugs allertijden bevat (hoewel dat ook het geval is), maar omdat software ontwikkelen een verwarrende en vervreemdende aangelegenheid kan zijn, waarin je geen idee hebt wat er gebeurt of waarom en waarin je maar niet dichter bij je einddoel lijkt te komen hoe hard je het ook probeert. Ik heb in mijn leven geen boek gelezen wat dat gevoel zo goed vangt als het werk van Kafka. Zijn werk lezen is troostrijk, niet omdat het oplossingen biedt voor dat gevoel, maar omdat het je laat weten dat je daarin niet alleen bent.

Veel leesplezier!

boeken · boekenclub · filosofie · literatuur