Development

Onlogisch denken
Ja, het is belangrijk om kinderen te leren programmeren. Daarmee leer je ze niet logisch denken.
Regelmatig schrijf ik, ook op deze plek, over programmeeronderwijs. Ik vind het enorm belangrijk dat alle kinderen in Nederland (en daarbuiten ook trouwens) kunnen kennismaken met programmeren.
Maar waarom eigenlijk? Een veelgehoord argument voor programmeeronderwijs is dat kinderen van programmeren leren om gestructureerd, kritisch of zelfs logisch te denken.
Maar wat is dat, logisch denken? Is er ook onlogisch denken? Zo nee, dan is logisch denken misschien gewoon ‘denken’. En natuurlijk is het geweldig als we leerlingen goed leren denken, maar de vraag is of dat door programmeren bereikt kan worden.
Logisch denken is misschien gewoon ‘denken’
Ten eerste is programmeren zelf helemaal niet zo logisch als je denkt. Waarom gebruiken we in Python snake_case voor variabelen (woorden gescheiden door underscores) maar in C# camelCase (woorden aan elkaar, nieuwe woorden krijgen een hoofdletter)? Helemaal niet logisch! Eerder een bewijs dat mensen ervan houden om zich in groepjes te organiseren, en met gebruiken te onderscheiden van andere groepjes.
Ten tweede is er bar weinig bewijs voor de stelling dat kinderen van programmeren leren om logisch te denken. Naar het effect van programmeren is niet zo vreselijk veel onderzoek gedaan, maar naar het effect van schaken wel. Over schaken wordt natuurlijk al lang gezegd dat kinderen er beter van gaan nadenken, bijvoorbeeld recentelijk nog in een oproep om alle scholen in Rotterdam aan het schaken te krijgen.
En wat blijkt: kinderen die schaken, ja die zijn vaak slim. Dat komt echter waarschijnlijk omdat hun hoogopgeleide, schakende ouders ze op schaakles doen. Want wat bleek uit een recent onderzoek, uitgevoerd door onder andere een internationale schaakmeester: van schaakonderwijs worden kinderen vooral goed in … schaken! Bewijs van een effect op IQ, plannen of ruimtelijk inzicht kon niet worden hardgemaakt. Te verwachten is dat hetzelfde wordt gevonden voor programmeeronderwijs.
Het is dus volgens mij tijd om programmeren te bevrijden van de tirannie van het ‘logisch denken’. We moeten kinderen leren programmeren zodat ze goed kunnen programmeren. Geweldig handig als je je eigen supermarktapp wilt maken, of een educatieve game, of een mooie data-analyse over woordgebruik in de boeken van Hella Haasse. Ook heel belangrijk om te kunnen meedenken over beleid in de huidige tijd: als je snapt hoe een algoritme werkt, kun je beter bepalen of je wilt dat een algoritme bepaalt welk nieuws je leest. En als je weet hoe moeilijk (of makkelijk) het is om een app te maken, dan kun je beter oordelen over de wenselijkheid van Airbnb of Uber.
We moeten kinderen leren programmeren zodat ze goed kunnen programmeren
Moeten we kinderen dan niet leren denken? Juist wel! Maar liever niet bij informatica. Filosofieles is daarvoor uiterst geschikt.
Dit artikel is ook gepubliceerd in het magazine van AG Connect (juni-julinummer 2019). Wil je alle artikelen uit dit nummer lezen, klik dan hier voor de inhoudsopgave.
Logica IS een onderdeel van de filosofie. Ik vind daarom al jaren, dat filosofie in het informatica onderwijs thuis hoort. Immers als je de "filosofische" ontologie afzet tegen de "informatica" ontologie is het duidelijk waarom de laatste grossiert in de meest gruwelijk vormgegeven abstracties. En predicatenlogica vind zowel in filosofie als wiskunde als informatica zijn toepassing.
Maar dat programmeren niks met logica te maken heeft, is gemakkelijk te weerleggen. Immers, het begint met "logische schakelingen". Half-adders, die je verknoopt tot volledige adders, die je uitbouwt tot een microinstructie voor een CPU, die uiteindelijk resulteert tot een "+" in je hoge programmeertaal. Derhalve is de laatste tot het eerste te reduceren - daar zit geen enkele vorm van arbitrair ander gedrag tussen.
En een conventie is net wat het is - een conventie. Een sociaal gebeuren. Daaraan kun je je conformeren - of lekker niet. Er is niks in Perl, Java, C of Python, dat je verbiedt om een "Hungarian notation" te gebruiken. En als dat voor je werkt moet je het vooral doen.
Juist het ontbreken van dat sociale aspect is belangrijk voor programmeren. Wat je medemens er ook van vindt, het is altijd het gevecht tussen de computer en jou. Er zit niks tussen. Je kunt er niet mee onderhandelen, niet paaien, niks. Heb je het fout, dan heb je het fout - wat iedereen daar ook van mag vinden. Dit soort denken staat (gelukkig) haaks op het postmodernisme, dat er (foutief) van uitgaat, dat de wereld alleen bestaat uit meningen. Jouw mening zal de computer een worst zijn - ik vind dat een verfrissend idee. En daarmee is die ervaring m.i. ook waardevol.
Informatica stelt je ook in staat om het met alles en iedereen oneens te zijn. Als ik OO een dom idee vindt, dat je kan nabootsen op elke procedurele taal, dan kan ik dat aantonen - of niet. Als ik bepaalde compilerconstructies dom vind en iets anders wil, dan kan ik dat lekker zelf regelen - daar heb ik niemand voor nodig (wel een behoorlijke hoeveelheid tijd, overigens).
Programmeren geeft je ook de vrijheid om computers flexibel in te zetten naar je eigen behoefte - en niet naar de winstmarge van een niet nader te noemen softwaregigant in Redmond. Als een monteur ook draaier is kan hij zijn eigen gereedschap ontwerpen of onderdelen maken - en volgens bepaalde monteurs is dat een enorm voordeel in bepaalde situaties, voornamelijk daar waar de leverancier zegt "kan helemaal niet".
Copmputers leren je om de vraag te stellen "waar heb ik de fout gemaakt" in plaats van "wie kan ik hier voor op laten draaien". En alleen al die vernederende les is het programmeeronderwijs al waard. Da's niet meer dan logisch.