Toen ik in de jaren tachtig informatica studeerde, vroegen vrienden of ik ook een computer had. Dat was toen nog helemaal niet vanzelfsprekend. Ik zei dan altijd dat ik er wel een had, maar dat ik voor de studie eigenlijk alleen maar een vel papier en een potlood nodig had. Dan keken die vrienden me altijd wat wazig aan… Ik legde ze dan uit dat je bij informatica natuurlijk ook leert programmeren, maar dat de essentie van informatica de theorie van het berekenen is. Iets wat nu wel ‘computational thinking’ of, in engere zin, algoritmiek wordt genoemd.

Vandaar dat ik altijd wat verbaasd ben als mensen roepen dat iedereen moet leren programmeren. Zoals onlangs Tim Cook, de ceo van Apple, die beweerde dat leren programmeren zelfs belangrijker is dan Engels als tweede taal leren! Ook in Nederland zijn er experts die vinden dat kinderen al vroeg op school moeten leren programmeren. Maar volgens mij legt leren programmeren de nadruk op de details, en raakt zo de essentie van hoe computers, software en netwerken werken buiten beeld.

Laten we eerlijk zijn. Programmeren is vervelend. Je leert een programmeertaal, met al zijn eigenaardigheden (die vaak volstrekt niet logisch zijn), en moet dan een simpel programma in die taal schrijven. Zonder één fout, anders begrijpt de computer het niet. Een komma vergeten is al fataal. Na heel veel moeite heb je dan een programma geschreven dat ‘Hello World’ op het scherm van je smartphone afbeeldt. Gefeliciteerd! Maar je hebt ondertussen niets geleerd over de gigantische complexiteit van hoe echte software in elkaar zit, en hoe die in de praktijk geschreven wordt.

Ook heb je zo wellicht het, misplaatste, gevoel gekregen dat door te programmeren je de volledige controle hebt gekregen over de computer.

Dat is natuurlijk niet waar: jouw programmeerkunst verandert niets aan hoe de software werkt die op jouw computer draait.

Veel belangrijker is volgens mij kinderen (en volwassenen) het bredere kader uit te leggen: hoe computers werken, hoe netwerken werken. Hoe om te gaan met asynchronie (het verschijnsel dat niet alle computers in een netwerk even snel zijn, en dat ook berichten die je over een netwerk verstuurt niet of zwaar vertraagd kunnen aankomen). Uitleggen wat de voor- en nadelen van centralistische oplossingen zijn, en hoe dat zit met gedistribueerde, peer-to-peer benaderingen. Laten zien hoe je een bepaald (maatschappelijk) probleem kunt proberen op te lossen door computers, door het probleem in kleinere delen op te splitsen. En duidelijk maken wat de beperkingen zijn van deze ‘computationele methode’.

De echte inzichten in de informatica zitten hierin verborgen. Bijvoorbeeld hoe slimme algoritmen en protocollen, soms door verrassende keuzes te maken, een bepaald complex probleem toch snel en efficiënt (in rekentijd, geheugengebruik of netwerkbelasting) weten op te lossen. Of hoe het ontwerp van een protocol extreem veel invloed kan hebben op de controle die individuele gebruikers op het systeem hebben. Zo is het internet in de basis zo ontworpen dat iedereen, zonder medewerking van derden, daar een eigen dienst bovenop kan bouwen. Dat komt door het ontbreken van een duidelijk centraal controlepunt. Aan de andere kant zijn commerciële diensten als Facebook en WhatsApp zo ontworpen dat andere diensten daar niet zomaar op aan kunnen sluiten: als je een andere berichtendienst dan WhatsApp gebruikt, kun je je vrienden op WhatsApp niet bereiken.

Juist dit soort inzichten zijn essentieel om aan zoveel mogelijk mensen duidelijk te maken. Vandaar dat ik vanaf dit studiejaar over deze onderwerpen college ga geven aan de rechtenstudenten van de Rijksuniversiteit Groningen. En niet om ze te leren hoe ze ‘Hello World’ op het scherm van hun smartphone kunnen toveren.

Deze column verscheen op 21 oktober 2017 in het Morgen katern van het FD.