Karl overdenkt een metafoor
(aantekeningen uit augustus)
Via code praat je met de geest van een andere ontwikkelaar. Hij zegt: dit is in hoeverre ik het probleem heb gesnapt. Soms antwoord je: maar ik weet nu beter!, of: over dat scenario had ik nog niet nagedacht! (Legacy code is óók zo complex omdat de werkelijkheid al te simpele modellen weerstaat.)
*
Via code praat je met een ontwikkelaar zoals je met een schrijver praat via een boek. (Maakt het een verschil of het fictie of non-fictie is?)
*
Maar tegelijkertijd zegt men toch ook: de Auteur is dood. Is het belangrijk te weten wie mijn code schreef? – Formeel niet, maar toch beoordeel ik code van experts anders dan die van hobbyisten.
Code lezen is ingebed in een levende context. Waarom lees ik deze code? Omdat ik haar moet wijzigen – niet uit pure (filosofische) interesse. – Het maakt een verschil met welk soort boek je code vergelijkt: Plato’s Staat of de grondwet of een beleidsdocument.
*
Er is niet één manier van lezen – niet voor boeken. Maar ook niet voor code? Vraag jezelf af: waarom lezen we geen code ter ontspanning? Code is een middel, geen doel.
Maar dat ontslaat ons niet van de plicht het middel zo effectief, zo expressief mogelijk te gebruiken. (Zie ook deze en deze blog.)
*
Via de code praat je met de schrijver van de code. Jij praat – dat betekent dat je iets meeneemt, een actieve rol speelt. Je voert een gesprek, een dialoog – twee personen zijn aan het woord. Alleen zegt de ene persoon wat vaker: waarom heb je dat zó gedaan?!
(Kun je datzelfde zeggen van een boek? Als ik Oorlog en Vrede (1500 pagina’s) lees, wie is er dan meer aan het woord, Tolstoj of ik? – Met code voer ik klaarblijkelijk een heel ander gesprek dan met drama.)
*
Soms ben je zelf de auteur waar je mee in gesprek bent. Dat voelt als een paradox: hoe kan een gesprek met mezelf meer kennis opleveren? Het antwoord is: het leggen van de juiste verbindingen tussen gekende feiten is ook weer kennis. – Een andere zienswijze is: jij op t0 is niet dezelfde jij op t1. (Zie ook deze blog.)
*
De boekmetafoor doet ook zo zijn werk: sommige code toont wat het doet (bijvoorbeeld met eerlijke functies), andere code vertelt wat het doet (voornamelijk: tests).
(En dat – dat sagen & zeigen – doet de Wittgensteiniaan in me vooral aan een bepaald boek denken.1)
Code is tekst; dat is een punt van contact met de boekmetafoor. (En tekst is taal; daar raakt het aan Wittgenstein.)
*
Ik heb ooit gezegd: tests vertellen verhalen. (Maar ik zei ook: testen is als flossen.)
Ik hou van boeken. Dat is wat ik meeneem in het gesprek dat ik aanga met de code. Dat is hoe ik het gesprek met de code kader.
– Maar dat impliceert: je hoeft je niet zó tot code te verhouden. Wat is een andere manier om de code tegemoet te treden? (Hoe “leest” een wetenschapper code? En een ingenieur? En een hacker?)
*
Je ervaringen en interesses vormen de wereld waarin je leeft (de wereld zoals jij hem ziet) – vormen of vervormen? (Een obsessie is wanneer de interesse pathologisch wordt.)
*
“Ik hou van boeken” – dat betekent: ik hou van boeken lezen, maar ook: ik hou van boeken kopen. (Ik hou van kringloopwinkeltjes in goede buurten, want daar leest men goede literatuur.) Ik hou ervan mijn boeken in mijn boekenkast te zetten en het resultaat te bekijken. Soms zit er wel anderhalf jaar tussen het kopen en het lezen van het boek.
Bij code is die tijd hopelijk aanzienlijk korter.
Wanneer ik boeken lees, heb ik (meestal) de vrijheid te kiezen waar ik mijn tijd aan spendeer. Bij code werkt dat anders.
*
Er is een boek De wereld zoals ik hem aantrof (cf. TLP §5.631) en in dat boek lees ik boeken, en code ook. En het boek (de code) vertelt op zijn beurt weer een verhaal. (– Hoeveel verhalen diep zullen we het atomaire feit ontdekken?)
*
Via code spreek je met een andere ontwikkelaar. Dat impliceert dat die ontwikkelaar ook iets te vertellen had. – De vraag is vaak: met wie dacht de auteur te spreken, met jou of met de machine? (Dat is óók een reden waarom legacy code zo complex is.)
Martin Fowler schreef: “Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
*
Dat code bedoeld is om gelezen te worden is deel van de boekmetafoor.
(“Gelezen worden”. – Lezen is primair een concept dat van toepassing is op mensen; de manier waarop computers data uitlezen of code interpreteren is een afgeleide daarvan. Het taalspel waarin mensen lezen verschilt van dat waarin een computer dat doet.)
*
Code is een tekst. Een tekst is een gesprek (de hermeneutische cirkel). – En wat is een gesprek? Strijd, een gevecht – een tijdverdrijf.
De ene metafoor wijst vooruit naar de volgende. (De uitweg, zeggen we met de late Wittgenstein, is het punt waarop de metafoor concreet gestalte krijgt is in de praktijk van het spel (forms of life).)
*
Code lezen is ingebed in een levende context. Dit is een centraal thema in het werk van Kent Beck (eveneens van een Kevlin Henney). Bij Beck betekent dat concreet: centen. De interessantste delen van Tidy First? bevinden zich zonder meer in het derde deel.
Ik wou dat ik me ze kon herinneren.
*
Net als bij boeken, vergeet ik het het gros van de code die ik lees. Als een collega me vraagt hoe dit of dat stuk in elkaar zit, zucht ik: dat is even geleden!
*
Een taalspel: je leest code in een boek over softwareontwikkeling. Hoe lees je die code? Waar beoordeel je haar op? – We bevinden ons in Plato’s grot, bekijken een schaduw van een afbeelding.
En toch is dat codevoorbeeld instructief. Want het doel van het taalspel is ons iets te leren. – Zoals de vrijgelaten gevangene, moeten we leren waar naar te kijken.
We lezen immers ook de werkelijkheid, wanneer we waar proberen te doorgronden (het boek van de natuur).