Spreek Jij Python? Programmeren als Tweede Taal
Deze blog verschijnt in een iets kortere vorm in het meinummer van Didactief.
Het doet er niet toe wat ik zelf vind van de vraag of kinderen van jongs af aan moeten leren programmeren. Zolang het over meningen gaat, heeft niemand gelijk. Wat er wel toe doet is dat, als je toch kiest om kinderen of jonge volwassenen te leren programmeren, moet je het goed doen.
Tony Jenkens zei in 2002:
Als leerkrachten programmeren ooit echt een leeromgeving willen ontwikkelen waarin alle studenten snel en goed leren programmeren, is het van vitaal belang dat ze inzicht krijgen in de moeilijkheden en complexiteiten waarmee de studenten worden geconfronteerd. Op dit moment is de manier waarop programmeren wordt aangeleerd en geleerd fundamenteel verbroken (p. 1).
en
Papers beschrijven hoe wij allerlei toeters en bellen [EN: visual hooks[1] and props[2]] kunnen gebruiken om lerenden te engageren, of hoe programmeren bijna als trucje / voorwendsel [EN: subterfuge] geleerd kan worden via spelletjes. Dit zijn allemaal mooie ideeën, maar er bijna geen concreet bewijs dat deze manieren van lesgeven enig effect heeft op het leren (p. 1).
Programmeren wordt in het algemeen behandeld als een STEM-vak (Science, Technology, Engineering, Math). Toch delen programmeertalen veel kenmerken met een (tweede) natuurlijke taal. Duh! Het is niet voor niets dat wij spreken van ‘programmeertalen’. Programmeertalen kennen eigen woorden en symbolen en ze hebben een eigen grammatica en syntaxis (zinsbouw). Als je programmeert, creëer je betekenis door de woorden en symbolen op basis van regels (grammatica en vooral syntaxis) aan elkaar te rijgen. Onderzoek laat zien (Denny e.a., 2011) dat leerlingen enorm worstelen met die syntaxis van programmeertalen. Paul Denny en collega’s ontdekten bijvoorbeeld dat leerlingen meestal een broncode (leesbare tekst van de programmeur in een programmeertaal) inleveren met fouten in de syntaxis: zwakkere leerlingen maakte syntaxfouten in bijna drie kwart (73%) van de gevallen en zelfs de beste leerlingen maakte syntaxfouten ongeveer 50% van de tijd.
Leren programmeren lijkt op het leren van een tweede taal, zo wijst onderzoek uit. Met rekenvaardigheid heeft het veel minder te maken.
Uit recent onderzoek van Chantel Prat en collega’s van de universiteit van Washington (2020) blijkt dat vooral een natuurlijke aanleg om talen te leren, lijkt te voorspellen of je goed kan (leren) programmeren. Die aanleg komt beter van pas dan wiskundige kennis of rekenvaardigheid. Dat komt, volgens de onderzoekers, doordat het schrijven van een broncode lijkt op het leren van een tweede taal: je moet de woordenschat en grammatica van die taal leren en snappen hoe deze samen ideeën en bedoelingen communiceren. In een interview in Science Daily vertelt Prat dat programmeren vaak nodeloos ingewikkeld wordt gemaakt door stereotypen over hoe een goede programmeur eruitziet, maar ook door toeleidingscursussen, doordat deze gebaseerd zijn op het idee dat programmeren sterk afhankelijk is van wiskundige vaardigheden. Dat laatste wordt niet ondersteund door het onderzoek van Prat en collega’s.
Daarin moesten deelnemers een simpel spelletje (Rock, Paper, Scissors / Steen, Papier, Schaar) programmeren in Python. De taal Python werd gekozen omdat die taal, volgens de onderzoekers, erop is gericht ‘lezersvriendelijk’ te zijn en veel van de manieren waarop dit wordt bereikt hebben taalkundige relevantie. In Python spring je in wat alineahiërarchieën nabootst in plaats gebruik te maken van accolades ({}). Het gebruikt ook woorden (bijvoorbeeld ‘niet’ en ‘is’) om bewerkingen aan te duiden, in plaats van symbolen die in andere programmeertalen worden gebruikt.
De onderzoekers beoordeelden de leerresultaten op drie verschillende manieren: 1) leersnelheid, 2) programmeernauwkeurigheid (het maken van een Rock, Paper, Scissors Game) en 3) declaratieve kennis (nauwkeurigheid op een meerkeuzetest van 50 items, inclusief vragen rond het algemene doel van functies, semantische kennis en syntactische kennis).Of dit lukte, bleek vooral af te hangen van hun taalvaardigheid. Vaardigheden als rekenen en logisch en abstract redeneren (fluid intelligence) waren veel minder van invloed. De onderzoekers vonden dat taalvaardigheid verklaarde meer dan 70% van de verschillen tussen betere en minder goede leerders in hoe snel zij leerden programmeren in Python. Slechts een klein deel had te maken met hun rekenvaardigheid.
Dichter bij huis (TU Delft en Universiteit Leiden) onderzochten Felienne Hermans, Alaaeddin Swidan, and Efhimia Aivaloglou (2018) hoe het programmeeronderwijs verbeterd kon worden. Haar aanbeveling: neem een voorbeeld aan aanpakken die gewoonlijk in taalonderwijs worden gebruikt. Zo is bekend uit haar onderzoek met Alaaeddin Swidan (2019) dat beginnende lezers een tekst beter begrijpen wanneer ze deze hardop lezen. Dit wordt toegeschreven aan het feit dat hardop lezen (zgn. vocalisatie) de aandacht op de tekst vestigt. Hermans en collega’s willen weten of het hardop lezen van broncode op een vergelijkbare manier werkt: ondersteunt dit kinderen bij het leren programmeren? De eerste resultaten zijn bemoedigend: leerlingen die de broncode hardop lazen, scoren hetzelfde op begrip als leerlingen die de broncode alleen in stilte lazen, maar ze onthouden wel beter wat er in die code stond.
Hermans’ volgende stap, qua onderzoek, wordt de overgang van echt hardop lezen naar alleen in gedachten hardop lezen. In taalonderwijs weten we dat naarmate leerlingen ouder worden, ze meer in stilte vertrouwen op zogenoemde subvocalisatie: het lezen van tekst met de innerlijke stem (e.g., Daneman & Newson, 1992; Prior, Fenwich, Saunders, Ouellette, O’Quinn, & Harvey, 2011; Slowiaczek & Clifton, 1980). Van subvocalisatie is bekend dat het ook het leesbegrip verbetert, ook bij bekwame, volwassen lezers. Zou dit ook gelden voor programmeren?
Als het leren programmeren echt lijkt op het leren van een tweede taal, kan dit een doorbraak betekenen voor effectief, efficiënt en bevredigend programmeeronderwijs, ongeacht je mening over de noodzaak daarvan.
Daneman, M., & Newson, M., (1992). Assessing the importance of subvocalization during normal silent reading. Reading and Writing, 4(1), 55–77. https://doi.org/10.1007/BF01027072
Denny, P., Luxton-Reilly, A., Tempero, E., & Hendrickx, J. (2011). Understanding the syntax barrier for novices. In ITiCSE ’11: Proceedings of the 16th annual joint conference on Innovation and technology in computer science education (pp. 208–212). Association for Computing Machinery. https://doi.org/10.1145/1999747.1999807
Hermans, F., Swidan, A., & Aivaloglou, E. (2018). Code phonology: An exploration into the vocalization of code. In ICPC ’18: Proceedings of the 26th Conference on Program Comprehension (pp. 308-311). Association for Computing Machinery. https://doi.org/10.1145/3196321.3196355
Jenkins, T. (2002, August). On the difficulty of learning to program. In Proceedings of the 3rd Annual Conference of the LTSN Centre for Information and Computer Sciences (Vol. 4, No. 2002, pp. 53-58).
Prat, C. S., Madhyastha, T. M., Mottarella, M .J., & Kuo, C. H. Relating natural language aptitude to individual differences in learning programming languages. Scientific Reports, 10, 3817 (2020). https://doi.org/10.1038/s41598-020-60661-8
Prior, S. M., Fenwick, K. D, Saunders, K. S., Ouellette, R., O’Quinn, C., & Harvey, S., (2011). Comprehension after oral and silent reading: Does grade level matter? Literacy Research and Instruction, 50(3), 183–194. https://doi.org/10.1080/19388071.2010.497202
Slowiaczek, M. L, & Clifton, C., (1980). Subvocalization and reading for meaning. Journal of Verbal Learning and Verbal Behavior, 19(5), 573–582. https://doi.org/10.1016/S0022-5371(80)90628-3
Swidan, A., & Hermans, F. (2019). The effect of reading code aloud on comprehension: An empirical study with school students. In CompEd ’19: Proceedings of the ACM Conference on Global Computing Education (pp. 178-184), Association for Computing Machinery. https://doi.org/10.1145/3300115.3309504
[1] Iets dat wordt gebruikt om de aandacht te trekken en aan te moedigen iets te doen zoals een product of dienst te kopen.
[2] Rekwisieten zoals nepdingen die door acteurs gebruikt worden.