Waarom schrijven?
Waarom zou je schrijven? Waarom een blog bijhouden? Er is zoveel te doen, zoveel deadlines om te halen. Zou je je kostbare tijd niet beter aan programmeren kunnen besteden?
In sommige gevallen: ja, zeker. Als een belangrijke klant binnen kan worden gehaald door nét even wat meer tijd aan een feature te besteden: doen. Of als een belangrijke klant dreigt af te haken als die feature niet gauw gefixt wordt: go for it!
Maar als werk bestaat uit een eindeloze stroom van dit soort situaties: nee. In dat geval, schrijf. Schrijf, bijvoorbeeld, om erachter te komen waarom je constant in zulke situaties zit.
Schrijven is belangrijk, programmeren is urgent. Natuurlijk, datgene wat je programmeert is soms ook belangrijk. Maar vaak ook niet. Schrijf om het verschil te leren herkennen.
*
Waarom is schrijven belangrijk?
Schrijven is een oefening in het onder woorden brengen van je gedachten. Wie helder zijn gedachten onder woorden kan brengen, kan helder denken.
Schrijven is hardop denken. Helder schrijven en helder denken zijn één en hetzelfde.
Wie helder kan denken, kan goed programmeren.
*
Goed programmeren is niet een kwestie van: zorgen dat het werkt. Iedereen kan zorgen dat het werkt. De uitdaging is om er op een transparante manier voor te zorgen dat werkt.
Code is een communicatiemiddel. Code communiceert een probleem en/of oplossing, voor zover begrepen door de ontwikkelaar, aan de lezer.
Het moet duidelijk zijn wat code doet, hoe het dat doet en waarom het dat doet. Tests vertellen het wat, de implementatie het hoe, en documentatie, bijvoorbeeld in de vorm van commentaar, vertelt het waarom. (Zie ook deze blog.)
Wanneer je commentaar tegenkomt dat zegt: raak deze code niet aan!, dan is dat een teken. De personen die de code moeten onderhouden, zijn het antwoord op één of meerdere van die drie vragen in de loop der tijd kwijtgeraakt.
Ze weten bijvoorbeeld niet meer wat de code doet, alleen dat er iets omvalt als ze haar wijzigen. Of ze weten niet meer hoe het dat doet, bijvoorbeeld omdat de code is handmatig is geoptimaliseerd door een ontwikkelaar die niet meer in het team zit. Of ze weten niet meer waarom het doet wat het doet: het is überhaupt onduidelijk welke rol de code in het geheel speelt.
*
Het is niet uitzonderlijk dat de antwoorden op deze vragen niet eens zeer helder aanwezig zijn in de geest van de ontwikkelaar, op het moment dat deze de code schrijft.
Hoe vaak ben je wel niet de code ingedoken zonder dat je precies wist wat je ging doen of waarom?
Begrip kan duister en verward zijn, of helder en welonderscheiden. De code zal reflecteren welke van de twee het is.
*
Iedereen kan alles laten werken in code, met voldoende inspanning.
De vraag is: wat is “alles” in deze context? Vaak is dat: het happy path. Maar de mate van begrip openbaart zich vaak op de momenten dat er buiten het happy path getreden moet worden.
Aanvankelijk eenvoudige code kan behoorlijk complex worden gemaakt wanneer foutpaden in overweging worden genomen. Dat zou een teken kunnen zijn dat het oorspronkelijk begrip nog niet adequaat was.
*
Goede code doet de lezer bij elke afslag denken: ja, logisch.
*
Met schrijven hoeft het niet per se zo te gaan, natuurlijk. Proza mag gerust wat avontuurlijker zijn dan code. Want je proza hoeft niet door anderen onderhouden te worden. (Dit is het excuus dat ik mezelf geef om mijn blogs niet eindeloos te redigeren.)
Schrijven is een middel om je eigen gedachten te verhelderen – ik denk dat dat voor mij zelfs de belangrijkste reden is om te schrijven.
De weg naar helderheid is zelden een rechte lijn. De geest doolt dan naar links en dan naar rechts, bekijkt de zaken vanuit meerdere perspectieven. Uiteindelijk bestaat er een begrip dat je in staat stelt om een rechte lijn van probleem naar oplossing te reconstrueren.
Blogs – persoonlijke blogs, bedoel ik, blogs zoals deze – zijn voor mij middelen om ideeën te verkennen. Een blog is, meestal, denken in beweging.
Af en toe schrijf ik een blog waarin de (voorlopige – altijd voorlopige!) resultaten van die bewegingen worden samengevat. Wat is refactoring (volgens Hannah Arendt)? is een voorbeeld van zo’n blog. (En ze ging vooraf door niet één maar twee blogs waarin ik die ideeën in gedachten verkende, waarin het denken nog volop in beweging was.)
*
In het schrijven verken je een probleem. Wie al coderend een probleem verkent, programmeert zichzelf al snel in een hoek.
Goede code voelt logisch, omdat de doodlopende wegen zijn verkend vóórdat de code haar uiteindelijke vorm kreeg.
Dit is geen pleidooi voor lange ontwerpfasen. Het is een pleidooi voor het in enkele zinnen op papier zetten van wat je nu eigenlijk hoopt te bereiken, voordat je de code vorm gaat geven.
Als dat niet lukt, dan is het beter om nog even te wachten met het programmeren.
*
Natuurlijk, softwareontwikkeling is meer dan alleen code schrijven. Een groot deel van je werk als ontwikkelaar ligt in communicatie.
Dat doe je via code, uiteraard, maar niet alléén via code. Je zal je collega’s ook uit moeten (kunnen) leggen waarom jullie deze of gene werkwijze hanteren, of waarom er voor die en die architectuur is gekozen, of waarom de specifieke techniek de juiste was.
En dan hebben we het alleen nog maar over de technische aspecten. Een ontwikkelaar moet ook zijn begrip van het domein tot een behoorlijk detailniveau kunnen expliciteren. Dat doe je bijvoorbeeld wanneer er nieuwe teamleden beginnen, of wanneer je bent met domeinexperts op zoek bent naar een oplossing voor hun probleem.
*
Wanneer we spreken, krijgen we onmiddellijk feedback van onze toehoorders (hoop je). Een gesprek hoeft daarom niet per se helder gestructureerd te zijn. Door middel van prikkel en reactie of vraag en antwoord kom je samen tot een gedeeld begrip.
Schrijven heeft een andere feedbackloop. Een lezer kan niet halverwege een alinea inbreken om verheldering te vragen. Schrijven vraagt daarom om meer inspanning van de schrijver, om ervoor te zorgen dat de lezer het verhaal kan volgen.
Dit is goed nieuws. Het leveren van inspanning maakt je sterker – sterker in het helder verwoorden van gedachten, in dit geval. Dit komt ook van pas wanneer je gesprekken voert.
*
Ik ben me bewust van het feit dat deze blog geen toonbeeld van helderheid is. Ik bevind me in de verkennende, meanderende fase.
*
Ik zou mezelf niet als uitzonderlijke ontwikkelaar willen karakteriseren, maar ik weet dat ik een minder goede ontwikkelaar zou zijn geweest als ik niet regelmatig zou schrijven.
Schrijven is een daad van liefde naar jezelf. Wie het zichzelf gunt te schrijven, gunt zichzelf de tijd om te verbeteren.
Wie nooit schrijft – eerlijk gezegd, soms vraag ik me af hoe zulke mensen het voor elkaar krijgen het leven te trotseren.
Schrijven houdt me op het rechte pad.