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.

Paul A. Kirschner's avatar

Over Paul A. Kirschner

Nederlands: Paul A. Kirschner (1951) is Emeritus hoogleraar Onderwijspsychologie aan de Open Universiteit (Nederland), eredoctor (doctor honoris causa) aan Oulu University (Finland), Gastprofessor aan de Thomas More Hogeschool (België) en eigenaar van kirschner-ED. Hij was eerder Universiteitshoogleraar en hoogleraar Onderwijspsychologie aan de Open Universiteit, Visiting Professor Onderwijs met een leerstoel in Leren en Interactie in de Lerarenopleiding aan Oulu University, hoogleraar Onderwijswetenschappen aan de Universiteit Utrecht, hoogleraar Contact- en Afstandsonderwijs aan de Universiteit Maastricht en Visiting Professor aan de Open University of Catalonia (Spain). Hij is een internationaal erkende expert op zijn gebied met meer dan 350 wetenschappelijke publicaties. Hij heeft zitting gehad in de Onderwijsraad in de periode 2000-2004 en de Wetenschappelijk Technische Raad van SURF van 2009-2019. Hij is Fellow van de American Educational Research Association (NB de eerste Europeaan aan wie deze eer werd toegekend), de International Society of the Learning Sciences en de Netherlands Institute for Advanced Study in the Humanities and Social Science of the Royal Dutch Academy of Sciences (NIAS-KNAW). Hij was president van de International Society of the Learning Sciences in de periode 2010-2011. Hij is hoofdredacteur van de Journal of Computer Assisted Learning en commissioning editor van Computers in Human Behavior. Hij heeft veel boeken (mede)geschreven, o.a. Ten steps to complex learning (Routledge/Erlbaum), Op de Schouders van Reuzen en Wijze Lessen: Twaalf Bouwstenen voor Effectieve Didactiek (beiden gratis verkrijgbaar op het web), twee boeken over mythes in het onderwijs Jongens zijn Slimmer dan Meisjes XL en Juffen zijn Toffer dan Meesters (beiden ook in het Engels verschenen), Evidence Informed Learning Design, and How Learning Happens: Seminal Works in Educational Psychology and What They Mean in Practice. Hij schrift ook regelmatig voor Didactief (de kolom KirschnerKiest over wat docenten kunnen met wetenschappelijke resultaten). Hij wordt gezien als expert op veel gebieden en vooral het ontwerpen van effectief, efficiënt en bevredigend onderwijs, computerondersteund samenwerkend leren (CSCL), mediagebruik in het onderwijs en het verwerven van complex cognitieve vaardigheden. English: Paul A. Kirschner, dr.h.c. (1951) is Emeritus Professor Educational Psychology at the Open University of the Netherlands, Guest Professor at the Thomas More University of Applied Science in Mechelen, Belgium, Honorary Doctor (Doctor Honoris Causa) at the University of Oulu, Finland, and owner of kirschner-ED which carries out educational consultancy, masterclasses for teachers, school heads and educational policy makers, and keynotes/presentations at conferences and other educational get-togethers. He is a Research Fellow of the American Educational Research Association, the International Society of the Learning Sciences, and the Netherlands Institute for Advanced Study in the Humanities and Social Science. He is a past President (2010-2011) of the International Society of the Learning Sciences and former member of the Dutch Educational Council and the Scientific Technical Council of the Foundation for University Computing Facilities (SURF WTR). He is chief editor of Journal of Computer Assisted Learning and commissioning editor of Computers in Human Behavior. He has also published more than 350 scientific articles as well as many popular articles for teacher journals. As for books, he is co-author of How Learning Happens: Seminal Works in Educational Psychology, Evidence Informed Learning Design, Urban Myths about Learning and Education and More Urban Myths about Learning and Education as well as of the highly successful book Ten Steps to Complex Learning, and editor of two other books (Visualizing Argumentation and What we know about CSCL). He is seen as an expert in many areas and in particular the design of effective, efficient and enjoyable education, computer-supported collaborative learning (CSCL), media use in education, and the acquisition of complex cognitive skills.

5 Reacties naar “Spreek jij Python? Programmeren als Tweede Taal”

  1. Onbekend's avatar

    Dit is natuurlijk een mooie invalshoek. Een die ook wel wat betekent voor wiskunde en wiskundige taal.
    Programmeren is echter niet alleen maar een taal, maar ook nauwkeurig gereedschap om problemen mee op te lossen, vaak wiskundige problemen. Denk aan bijv. computational thinking, problem solving, in Nederland Wiskundige denkactiviteiten zoals modelleren.
    En op een gedetailleerder niveau de inzet van logica en implicaties.
    Daar is de relatie met taal overigens groot.

    Like

    • Onbekend's avatar

      Derk,
      Toen ik onderwijstechnoloog/onderwijskundige bij de cursus discreet wiskunde aan de OU hebben de hoogleraren mij overtuigde (toen ik vroeg of men een ingewikkeld wiskundige uitdrukking kon simplificeren/uitleggen en hun reactie was dat de uitdrukking het perfect uitlegde) dat echte wiskunde – dus niet de wiskunde die men gebruikte/toepaste in de natuurwetenschappen of engineering – een taal is en eigenlijk een alfa vak dichter bij taal en filosofie/logica dan een beta vak. Programmeren is een taal die men vaak gebruikt als gereedschap.

      Like

  2. Onbekend's avatar

    Interessant. Dit past goed bij de ruime aandacht voor talen in het informatica-onderwijs.

    Waar een gewone taal in het algemeen gebruikt wordt voor communicatie tussen mensen, worden programmeertalen gebruikt voor het instrueren van machines. Iemand die leert programmeren moet dus niet alleen een taal leren, maar ook leren hoe een zin uit de taal effect heeft op een machine. Deze relatie wordt vaak als lastig ervaren door beginnende programmeurs. Dit maakt ook dat het leren programmeren bestaat uit het leren van een taal, naast het leren van hoe zinnen effect hebben op een machine.

    Zie bv Juha Sorva, Notional machines and introductory programming education, ACM Transactions on Computing Education, July 2013, Article No.: 8.

    Like

    • Onbekend's avatar

      Johan,
      Klopt, maar dat geldt voor ieder taal.

      1. Heeft iemand ooit tegen jou gezegd: ‘Het is niet wat je zei maar hoe je het zei’? Hier zie je hoe, naast het leren van zinnen gaat het om de effect daarvan op anderen. Denk bijvoorbeeld aan ‘Yeah,….right’ (ik ben het met je eens) en ‘Yeah right’ (wat een onzin).
      2. Een mens is slim en kan toch begrijpen wat je bedoelt, ook al klopt grammatica en/of syntaxis. Een machine heeft correct gebruik hiervan nodig. M.a.w. het is des te belangrijker dat grammatica en syntaxis geleerd wordt op een effectieve wijze.

      Like

      • Onbekend's avatar

        Zeker. Maar mijn stelling is dat we bij het leren van een nieuwe spreektaal nauwelijks aandacht besteden aan het effect van wat je zegt op je gesprekspartner, waarschijnlijk omdat dit in het algemeen iets is wat we impliciet al weten, terwijl dat bij het leren programmeren van fundamenteel belang is, omdat een beginner nog niet weet wat het effect van een programma op een machine is.

        Het is voor het leren programmeren inderdaad ontzettend belangrijk om de grammatica & syntax effectief te leren, ook omdat compilers zoals je schrijft in punt 2 weinig vergevingsgezind zijn. Het is een goede zaak dat er onderzoek wordt gedaan naar hoe je dat zo effectief mogelijk kunt doen.

        En hoewel het voor gewone talen uiteraard ook ontzettend belangrijk is welk effect datgene wat je zegt heeft op je gesprekspartner, komt dat voor zover ik weet nooit aan bod bij het taalonderwijs voor beginners. Volgens mij wordt dat als impliciete kennis verondersteld. “Papa fume une pipe” behoefde verder geen verklaring voor het effect op de gesprekspartner. Het zou me verbazen als we in een tekstboek voor taalonderwijs iets zouden vinden over: als je dit zegt, dan heeft dat het volgende effect op je gesprekspartner'. Terwijl alle tekstboeken over leren programmeren informatie bevatten over:als je dit schrijft, en je krijgt deze input, dan leidt dat tot deze output’. En naast problemen bij het leren van grammatica & syntax, hebben beginners ook grote problemen bij het relateren van hun programma aan wat een machine doet (zie ook Sorva’s paper, of Sorva’s PhD thesis).

        Leren programmeren bestaat uit het leren van een taal, en het leren van wat het effect is van zinnen uit de taal op een machine. Beide onderdelen zijn fundamenteel, en gedeeltelijk met elkaar verweven. Volgens mij maakt dat het programmeeronderwijs zo’n dankbaar onderzoeksthema.

        Like

Geef een reactie op Johan Jeuring Reactie annuleren