Over boeken en boekenclubs (1/3)
Het beste werkgerelateerde advies dat ik ooit heb gekregen, kreeg ik van mijn eerste manager. Ik was nog maar net begonnen als softwareontwikkelaar en worstelde met de enorme complexiteit die kwam kijken bij het onderhouden van een legacy codebase. Hij zei (ik parafraseer): “Je hebt de ballen verstand van softwareontwikkeling. Houd de vrijdagen vrij voor zelfstudie, en lees eens een boek.”1
*
Al zo lang als ik me kan herinneren, hou ik van lezen. – Hoewel, dat is niet waar. Ik herinner me dat mijn moeder me meenam naar de bibliotheek en me aanspoorde een boek uit te zoeken. Maar ik zeurde: ik wil niet, lezen is stom. Maar mijn moeder hield vol, en om er vanaf te zijn nam ik onder luid protest het kleinste en dunste boekje mee dat ik kon vinden.
Eenmaal thuis las ik het in een oogwenk uit. Schoorvoetend vond ik de weg naar mijn moeder en vroeg of we terug konden naar de bibliotheek. Stiekem bleek ik lezen toch wel best leuk te vinden. – Sindsdien hou ik van lezen. Jeugdboekjes ontgroeide ik al gauw en tegen de tijd dat de middelbare school op zijn eind liep, verorberde ik Anna Karenina en Misdaad en Straf – niet omdat het moest, maar omdat ik het leuk vond.
*
Boeken hebben mijn levensloop bepaald. Voor mijn profielwerkstuk las ik A History of Western Philosophy van Bertrand Russell. Ik was op zoek naar info over de stoïcijnen en epicuristen, maar las op een onbewaakt ogenblik het hele boek uit. Zonder die ervaring had ik nooit filosofie gestudeerd – en god weet wat er dan van me terecht zou zijn gekomen. (Zie ook deze blog.)
*
Dat je ook over je werk kunt lezen, was iets wat ik tot dan toe nooit serieus overwogen had. Programmeren was iets wat je moest doen, in mijn beleving, niet iets om over na te denken. De enige boeken die ik tot dan toe over programmeren had gelezen, was Programmeren voor Dummies en haast onleesbaar naslagwerk over C# ter voorbereiding op de certificering waarmee ik mijn traineeship afsloot.
Achteraf denk je: het is niet meer dan logisch dat je de noodzaak van werk combineert met je leeshobby – maar die stap is niet onvermijdelijk, en ik ben dankbaar voor het feit dat mijn manager me een duwtje in de juiste richting gaf.
*
Het boek dat echt mijn ogen opende voor de meerwaarde van vakliteratuur, was Clean Code van Robert Martins. In mijn blog over de beste boeken die ik in 2020 las schreef ik hierover:
Ik overdrijf niet als ik zeg dat dit boek de manier waarop ik code schrijf, totaal heeft veranderd. Robert “Uncle Bob” Martins codeertips op zichzelf rechtvaardigen de aanschaf van dit boek. Maar Clean Code komt pas echt tot leven in het laatste deel, waarin de schrijver stapsgewijs, en aan de hand van zijn eigen principes, een (voor boekbegrippen behoorlijk) stuk code refactort. En dat zonder de aandacht van de lezer ooit los te laten! Verplichte kost voor elke softwareontwikkelaar.
*
De op één na belangrijkste les die ik leerde uit Clean Code, ging over het belang van unit tests. Geautomatiseerde tests zijn een vangnet die je in staat stellen je code veilig te refactoren. Het boek is er heel duidelijk over: clean code is geteste code; zelfs de prachtigste code is niet schoon als deze niet door tests gedekt wordt (zie ook deze blog).
Ik weet nog dat ik mijn manager enthousiast vertelde over de ideeën in Clean Code, en dat hij me aanraadde een stukje in de codebase te zoeken om te refactoren op basis daarvan, en dat hij erbij zei: “Dat hele testverhaal, dat geloof ik wel, daar hoef je van mij niet echt naar te kijken.” Stug weigerde ik. Ik refactorde het genereren van een rapport, en dankzij de karakterisatietests die ik er omheen zette, hoefde ik geen enkele keer de applicatie op te starten om snel meters te maken. Die ervaring heeft mijn beeld van softwareontwikkeling diepgaand beïnvloed.
*
Hoe goed Martins werk de tand des tijds heeft doorstaan, durf ik niet te zeggen.2 David Whitney beticht hem (in dit praatje) ervan vraagstukken over het ontwerp van code plat te hebben geslagen tot de vraag welke namen we variabelen we moeten geven. En Dan North gruwelt (in dit praatje) van de manier waarop Martin eenvoudige code in naam van cleanliness om weet te toveren tot complexe constellaties van verschillende classes.
Misschien hebben ze gelijk. Maar de belangrijkste les les die ik uit Clean Code leerde, was niet een inhoudelijke – maar dat er überhaupt over de lees- en onderhoudbaarheid van code na kan en mag worden gedacht. Het verschoof mijn perspectief van de boel werkend krijgen naar de manier waarop we de boel werkend krijgen. Het heeft mijn werkleven enorm verrijkt – en de code die ik produceer oneindig veel beter gemaakt.
Deze en opvolgende blogs schreef ik ter voorbereiding van een praatje op het voorjaarsevenement van TestNet. ↩︎
Ik speel al tijden met het idee Clean Code te herlezen en die ervaring in een nieuw praatje te verwerken. Maar het herlezen is er nog altijd niet van gekomen: mijn verlanglijstje van ongelezen boeken is te groot – en groeit nog altijd! ↩︎