Codefluisteren
Eén van de dingen die een alleraardigste programmeur van een goede softwareontwikkelaar onderscheidt, is iets wat ik tijdens mijn filosofische overpeinzingen “codefluisteren” ben gaan noemen.
Codefluisteren is het vermogen te horen wat de code niet hardop zegt.
Code vertelt je: dit is wat ik doe. Sommige code doet dat goed, de rest – minder goed. Alle code zegt: ik doe dit. Goede code spreekt de waarheid, doet wat het zegt; matige code doet daarnaast nog iets anders; slechte code blijkt te hebben gelogen.
Wat code je vertelt, hoor je – net als bij mensen – niet voor zoete koek te slikken. In het Engels zegt men: “Talk is cheap.” Wij zeggen: “Geen woorden maar daden.” Het gaat niet om wat de code zegt, het gaat om wat de code doet.
Maar weten wat de code niet zegt maar wel doet, dat is op zichzelf nog geen codefluisteren. Dat is kritisch luisteren.
Het gaat bij codefluisteren niet om wat de code expliciet zegt te doen. Het gaat om wat de code doet, en hoe ze dat doet – en wat ze daarmee impliciet zegt.
Een goede codefluisteraar kan in een stuk code werken en hoort dan – aanvankelijk zachtjes, maar met ervaring steeds duidelijker – plots een probleem. Het probleem is niet: de code werkt niet. Het probleem is: ik als ontwikkelaar ben nu harder aan het werk dan de code.
“Deze twee methods in deze class komen als enige in deze gevallen voor; horen ze hier wel thuis?” – “Dit is de derde keer dat ik dit soort logica schrijf; mis ik hier een abstractie?” – “Zegt deze reeks if
-statements dat ik niet eigenlijk vier verschillende scenario’s in één functie aan het proppen ben?”
Code is niet alleen maar een set instructies voor een computer. We schrijven geen code zodat computers deze kan lezen; we schrijven code zodat mensen deze kan lezen – waaronder jijzelf.
Maar mensen, waaronder jijzelf, lezen niet alleen code, ze werken er ook mee. Het gefluister van code heeft betrekking op de mate waarop je er eenvoudig mee kunt werken – hoe kneedbaar, soft, de software is.
Sommige ontwikkelaars accepteren dat programmeren moeilijk is, frustrerend. Zij zijn doof voor wat de code hen, soms oorverdovend, toefluistert – en programmeren stug verder.
Een codefluisteraar stopt regelmatig met het schrijven van nieuwe functionaliteit, om de structuur van de code tegen het licht te kunnen houden – en te beslissen of zijn volgende stap moet zijn: meer functionaliteit ontwikkelen, of de structuur veranderen?
Welke keuze de codefluisteraar maakt, hangt af van wat de code hem influistert.
Codefluisteren is een vaardigheid, maar het is ook een houding. Ten grondslag aan die houding ligt – niet de wil om te verbeteren (hoewel codefluisteraars ook de wil hebben te verbeteren), maar de bereidheid te luisteren.
Want het is onmogelijk code te verbeteren (en niet slechts te veranderen) als je niet in staat bent om naar haar te luisteren.
Vraag je, volgende keer als je een nieuwe feature hebt geschreven: wat fluistert de code me nu in? Fluistert het: ik ben af – doe met me wat je wil? Of klinkt het meer als: ik werk – maar daar is alles mee gezegd?
beroepsdeformatie · clean code · intentie van code · software ontwikkelaar (rol)