Wat gebeurt er eigenlijk in je brein als je programmeert? Het is een vraag die Felienne Hermans, associate professor aan de Universiteit Leiden, vrijwel dagelijks bezighoudt. In een talk op de Tweakers Developers Summit, die plaatsvindt op 23 juni, vertelt ze hoe je effectiever code kunt lezen en programmeren.
Voor software-development verschijnen voortdurend nieuwe talen. Spannend natuurlijk, want ze bevatten steeds veel nieuwe features. Dat motiveert om te leren, maar vaak is het ook ‘hap-snap’, waardoor de echte diepgang ontbreekt. “Om een programmeertaal echt goed te doorgronden, moet je niet alleen naar de syntax kijken, maar ook naar de achterliggende filosofie”, vindt Felienne. “Onlangs maakte ik bijvoorbeeld mee dat een Haskell-developer mijn Python-syntax ging omschrijven. Weliswaar in Python, maar niet volgens de Python-filosofie. Een programmeertaal leren is echt moeilijker dan je denkt. Je kunt alles wel googelen, maar als dat je denkframe is, kom je niet zo diep. Nieuwe gewoonten en routines inbouwen is belangrijk. Ik programmeer al meer dan twee jaar iedere dag in Python, maar daarbij moet ik nog steeds moeite doen om denkpatronen uit C# en C++ van me af te schudden. De kennis is er, maar zij is nog niet echt geïnternaliseerd.”
Hoe leer je nu echt programmeren? En wat gebeurt er daarbij in je brein? Deze vragen omvatten het werkgebied van Felienne Hermans, die er onder meer colleges over geeft, onderzoek aan wijdt en boeken over schrijft. Haar meest recente boek kreeg als titel ‘The Programmer’s Brain - What every programmer needs to know about cognition’. Naast al deze werkzaamheden vindt ze ook nog tijd om zelf te programmeren, waarbij zij zich met name richt op haar project Hedy. Dit is een in Python en TypeScript gebouwde programmeertaal die vooral is bedoeld om kinderen gradueel kennis te laten maken met de soms ingewikkelde syntax van ‘volwassen’ programmeertalen. “De taal is laagdrempelig en je maakt gaandeweg kennis met de syntax van een geschreven taal. Door de mogelijkheid om in je eigen moedertaal - bijvoorbeeld Nederlands of Chinees - te werken, is de leercurve minder steil voor kinderen die het Engels nog niet helemaal machtig zijn.”
Een getraind brein werkt anders
Felienne vertelt over haar werk als onderzoeker aan de Universiteit Leiden: “Deels is dit cognitief onderzoek, dus over de manier waarop je denkt bij het programmeren. Het andere deel is technisch, want als je weet hoe je mensen kunt leren programmeren, merk je dat niet alle programmeertalen daar even geschikt voor zijn.” De conclusies die ze trekt, hebben lang niet alleen betrekking op kinderen; ook professionele programmeurs hebben baat bij haar werk. Het meest recente boek van Felienne geeft dan ook tal van praktische tips en aanbevelingen. “Je bent in je werk constant aan het leren. Als je begint aan een tweede of derde taal gebeuren er al snel heel andere dingen dan je verwacht, juist omdat je ervaring hebt met een andere taal.”
Veel ervaren programmeurs onderschatten het belang van het langetermijngeheugen, constateert Felienne. “Als het gaat om logica en concepten is het idee vaak dat je die niet zo goed hoeft te kennen, omdat je het toch allemaal kunt opzoeken. Dat is een beetje een misvatting. Vergelijk het met het leren van Duits. Als je geen enkel woord kent, kun je wel een woordenboek pakken, maar ga daarmee maar eens lekker een krantenartikel in het Duits lezen. Dat schiet niet op. Als je de helft van de woorden kent, gaat het al beter en met tachtig procent gaat het prima; dan moet je hooguit af en toe eens een woord googelen. Ervaren programmeurs zitten op dat laatste niveau en vanuit hun situatie geredeneerd hoef je inderdaad niet ‘alles’ te weten. Maar als advies aan bijvoorbeeld een junior-collega die een nieuwe taal moet leren, vind ik ‘zoek het gewoon even op’ niet zo geslaagd als benadering. Als er niet genoeg aandacht is voor het leren van de syntax en de concepten van de taal, is het geen goed advies. Als je het zou volgen, zit je de hele dag in je browser van alles uit te zoeken. Daardoor ben je de flow waarin je zou moeten zitten met programmeren ook wel kwijt.”
Leer beter code lezen
Met de lessen uit het boek van Felienne is het mogelijk om makkelijker een programmeertaal aan te leren, maar ook het cognitieve proces van een ander beter te begeleiden. Dit zou moeten zorgen voor software met minder bugs, maar ook voor minder frustraties over en weer. Met de huidige tekorten op de arbeidsmarkt trekt de IT-sector al jaren zij-instromers aan. “Daardoor zit je bijvoorbeeld als ervaren programmeur met een zij-instromer. Als expert is het soms best lastig je te verplaatsen in iemand die dat niet is. Iets wat voor jou heel goed werkt, werkt voor een beginner niet altijd goed. Dan kun je wel zeggen: ‘Alle documentatie staat op Github, stuur me maar een pull request als je klaar bent’, maar dat gaat ’m waarschijnlijk niet worden. Als junior word je er meestal ook heel onzeker door. Dat is frustrerend, voor beide kanten.”
Developers die weten hoe cognitie en leren programmeren met elkaar interacteren, kunnen daar veel plezier van hebben, betoogt Felienne. Niet alleen bij het begeleiden van een ander, maar ook bij hun eigen werk. Zo gaat ze specifiek in op het lezen van code. “Je scrolt er doorheen, maar hoe bepaal je of iets goed of fout is? Wat is het design en van welke filosofie is uitgegaan? Dat laatste is soms vaag, bijvoorbeeld omdat de documentatie ontbreekt of omdat verschillende programmeurs hebben bijgedragen en niemand het antwoord echt weet. In het ene project is optimalisatie belangrijk en mag dat ten koste gaan van leesbaarheid. Voorbeelden daarvan zijn de Marsrover en een complexe game. Bij zulke projecten heeft het niet zoveel zin als iemand caching gaat verwijderen met het oog op leesbaarheid.” Hoewel de achtergrond van het boek wetenschappelijk is, probeert Felienne voor haar doelgroep heel bondig te zijn. “Programmeurs moeten al zoveel lezen, dus ik geef praktische tips over hoe je een tekst kunt scannen, met daarbij variabelen die je er goed bij kunt gebruiken.”
Schrijf alleen de variabelen op
We vragen Felienne of ze alvast een tip kan geven, vooruitlopend op de Tweakers Developers Summit. “Iets dat ik heel leuk vind en dat ook heel eenvoudig te doen is: negeer alle structuur, de klassen en wat er verder nog gebeurt, in een stuk code dat je nog niet kent. Schrijf alleen de namen van de variabelen op. Doe dit vooral als het gaat om een taal die je niet of niet meer gebruikt. Je komt dan snel in een situatie waarbij het zo oncomfortabel wordt dat je denkt: ‘dit heeft geen zin meer’. Je checkt dan mentaal uit, wat echt zonde is. Maak het vervolgens behapbaar. Wat leer je uit de programmeerconcepten en kun je aan de hand daarvan al zien wat er gebeurt? Als je vervolgens een stukje niet begrijpt, kun je dat ook heel concreet aan je eigen team voorleggen om de betekenis in die context te begrijpen. Dat is een manier om je voorkennis te activeren, zonder dat je die akelige, ellendige code in PHP, C++, Rust, Python of wat dan ook moet bekijken. Het enige dat je nodig hebt, is een leeg Word-documentje of een kladblok. Begin met de concepten en probeer ze te begrijpen. De volgende keer kijk je naar de structuur en daarna naar de verschillende technieken die zijn gebruikt. Zo kom je steeds een stap verder.”
Het moment van ‘uitchecken’ herkent Felienne zelf maar al te goed. “Laatst had ik het bijvoorbeeld nog, toen ik een stuk PHP aan het lezen was, een taal die ik al twintig jaar niet meer gebruik. Ik kan het echter ook hebben bij de Hedy-codebase waarvan ik de hoofd-maintainer ben maar waar ook een stuk of twintig anderen aan werken. Soms is het daarbij alsof iemand anders jouw huis heeft opgeruimd en je niets meer kunt vinden. Als je dat niet wil, moet je het natuurlijk niet op GitHub zetten. Toch is het ook belangrijk dat het opensource is en dat andere programmeurs issues oplossen. Je moet toch even over dat moment heen. Bij programmeren hoort het aanleren van nieuwe technieken, maar een ander deel is ook dat je moet leren dealen met discomfort. Hoe vaker je door zo’n moment komt, hoe meer vertrouwen het geeft dat het je de volgende keer ook lukt.”
De Tweakers Developers Summit voelt als thuiskomen (127.0.0.1). Mis het event op 23 juni niet! Lees via de buttons hieronder alles over het programma, tickets en andere belangrijke zaken.
Kijk hier voor het privacybeleid van Tweakers: https://tweakers.net/info/algemene-voorwaarden/privacy/
* We volgen het COVID-19-beleid vanuit de overheid dat in juni 2022 voor evenementen geldt. Mocht het evenement in juni niet door kunnen gaan vanwege eventuele maatregelen, dan worden de kosten van je ticket gerestitueerd.