Een van de interessantste Nederlanders op dit moment is ongetwijfeld Guido van Rossum, de ontwerper van de programmeertaal Python. Het is niet overdreven om te zeggen dat dit inmiddels wereldwijd de populairste programmeertaal is – een taal die vrijwel iedere programmeur wel een beetje kent. Hij is bovendien iemand die over heel veel onderwerpen goed heeft nagedacht en zijn mening daarover eloquent kan verwoorden, zoals bijvoorbeeld blijkt uit het bovenstaande interview met Lex Fridman.
Dat soort interviews kom je in het Nederlands niet tegen. Ik vraag me af of Van Rossum ooit serieus in de Nederlandse media aan het woord is gekomen. Dat geldt zelfs niet voor podcasts of YouTube-kanalen of andere alternatieve kanalen. Wat zijn we toch ook een armoedige cultuur. Voor 99% procent van de Nederlanders bestaat Van Rossum helemaal niet.
(Even een rant. Het is in sommige kringen nog altijd sjiek om af te geven op de verengelsing: in zo’n vreemde taal kun je toch nooit een diepe gedachte uitdrukken? Wat die mensen nooit in de beschouwing betrekken is dat je in het Nederlands maar zelden een diepe gedachte hoort uitdrukken. Wie interessante hedendaagse intellectuele discussies wil horen, moet wel Engels leren. De verarming van het Nederlands komt niet door het Engels, maar door het gebrek aan intellectuele cultuur. Einde rant.)
Trager
Een van de onderwerpen die Fridman meteen aan de orde stelt is dat leesbaarheid een basisprincipe is van Python. Computerprogramma’s moeten niet alleen door computers worden gelezen, die de instructies moeten uitvoeren, maar ook door mensen. “Zelfs als je een tovenaar hebt die op zijn eigen kamer een heel programma van duizenden regels componeert”, zegt Van Rossum, “dan is die aan het eind van die duizend regels vergeten wat hij aan het begin bedoelde.” Toch is dat belangrijk: computerprogramma’s bevatten noodzakelijkerwijs altijd foutjes en om die op te kunnen sporen en repareren moet een mens een en ander kunnen lezen. Daarnaast kan het natuurlijk altijd gebeuren dat er een uitbreiding moet komen van het bestaande programma, of een verbetering. En tot slot worden échte programma’s niet geschreven door tovenaars maar door teams, die elkaars werk moeten kunnen lezen.
Enkele decennia geleden was efficiëntie voor de computer het belangrijkste criterium. Inmiddels zijn computers zo snel en de kosten van programmeurs zo hoog dat computerleesbaarheid er minder toe doet. Als een programmeur er uren over doet om een foutje te vinden, terwijl dat foutje de computer een milliseconde trager doet lopen, is dat geen goede afweging.
Visuele intelligentie
Intrigerend is nu dat de leesbaarheid vooral zit in het wit op de pagina en in de leestekens.
Wanneer je programmeert, krijg je regelmatig te maken met potentiële dubbelzinnigheden. Neem deze instructies voor een feestrobot:
als de leeftijd van het baasje groter dan acht is
zet een hoedje op
blaas op een toeter
Moet de robot nu sowieso op die toeter blazen, of alleen als het baasje oud genoeg is? Op de een of andere manier moet je weergeven of de laatste twee instructies bij elkaar horen. Nevenschikkende voegwoorden hebben programmeertalen meestal niet. Veel oudere programmeertalen lossen het op met haakjes. De nog altijd heel populaire taal C (vooral voor gevallen waar efficiëntie wel van belang is) bijvoorbeeld:
if (leeftijd > 8) { zet_hoedje_op(); blaas_toeter(); }
De {} plaatsen instructies bij elkaar. De punt_komma’s onderscheiden ze van elkaar. De ronde haakjes hebben andere functies. Wanneer elders in het programma leeftijd, zet_hoedje_op() en blaas_toeter() gedefinieerd worden, is dit geldig C. Zoals ook het volgende, dat de robot voortdurend laat toeteren:
if (leeftijd > 8) { zet_hoedje_op();} blaas_toeter();
Nu valt de toeterinstructie buiten de haakjes en daarmee buiten het bereik van de if-instructie.
In Python ziet de eerste versie er zo uit:
en de tweede zo:
De haakjes en de punt-komma’s zijn verdwenen, wat er moet worden uitgedrukt wordt uitgedrukt met ruimte op de pagina of het beeldscherm. (Overigens kun je in C ook werken met nieuwe-regels en spaties, maar je moet altijd ook al die haakjes en puntkomma’s toevoegen, en dat is toch net wat minder overzichtelijk) Je kunt met Python als lezer beter vertrouwen op je puur visuele intelligentie: je kunt in één oogopslag zien wat bij elkaar hoort, en je ziet weinig dingen die er voor de interpretatie niet toe doen (het is alleen, zou je kunnen, zeggen, jammer van de haakjes).
Wat Fridman en Van Rossum niet bespreken: dat dit de principes zijn waaraan je veel moderne poëzie kunt herkennen: het betekenisvolle wit, het gebrek aan leestekens. (In de voorbeelden die ik hierboven geef staan alleen kleine letters; hoofdletters zijn niet verboden in Python, maar net als in poëzie worden ze vaak vermeden of eigenzinnig gebruikt.)
Een andere overeenkomst is dat lyriek en programmacode over het algemeen niet gericht zijn tot de menselijke lezer. Een kenmerk van lyriek is de apostrofe – het aanroepen van een tweede persoon die niet de lezer is, ‘oh, oude eik!’ – terwijl de opdrachten die in een stukje computerprogramma staan, niet moeten worden uitgevoerd door de menselijke lezer.
Het zou interessant zijn om te onderzoeken of deze overeenkomsten echt toevallig zijn, of dat ze iets vertellen over de manier waarop de mens het best geconcentreerd kan lezen. Poëzie en computerprogramma’s zijn de twee genres die je heel geconcentreerd moet lezen. waar iedere letter telt. Het ligt voor de hand dat je dan zo min mogelijk afleiding nodig hebt. Tegelijkertijd heb je niet te maken met allerlei historische conventies: Python is geen Engels, net zo min als de taal van e.e. cummings dat is.
Hendrik Jan Hoogeboom zegt
Het inspringen van de python code is niet goed overgekomen in de blog.
(Overigens worden er ook bij talen als C lijfstraffen uitgedeeld aan programmeurs die niet consequent met de accolades inspringen. De computer heeft er geen profijt van, maar de andere “lezers” wel.)
Marc van Oostendorp zegt
We hebben het probleem uiteindelijk niet anders kunnen oplossen door plaatjes te maken.
Micha Hulsbosch zegt
Een leuke vergelijking. Ik kan oprecht blij worden van leesbare (Python-)code, precies omdat het gaat om de details.
Waar de vergelijking wat mij betreft mank gaat, is dat programmeertalen streven naar conventies en best practices, juist om de leesbaarheid te vergroten. Bij poëzie lijkt me dat juist niet wenselijk.
Mag ik zo vrij zijn hier aan “code reviewing” te doen. Ik vond de volgende zaken minder goed leesbaar:
…dat dit inmiddels wereld de populairste programmeertaal is…
“Zelfs als je een tovenaar hebt die op zijn eigen kamer een heel programma van duizenden regels hebt”
(Ik wilde ook “e.e. cummings” noemen, maar dat blijkt zo gestileerd te kunnen/moeten worden.)
Interpreteer dit alsjeblieft niet als ‘blaming’, een programmeerterm. Het is gewoon bij programmeerbrein die struikelt over details die hij niet meteen kan verwerken 🙂