Door Thijs Borst, Vera van Hintum, en Tijs Wiegman
Op de middelbare school worden allerlei vaardigheden opgebouwd en wordt er kennis bijgebracht, van Engelse spreekvaardigheden tot de evolutietheorie. Er is voorlopig een vaardigheid die ontbreekt: het programmeren. In de laatste 20 jaar is programmeren een stuk toegankelijker geworden en daarmee ook vaker gebruikt om problemen op te lossen. In een groot deel van de vervolgopleidingen wordt programmeren voor van alles gebruikt, zoals bij data-analyse of modeleren. Het wordt ook erg veel gebruikt door onderzoekers en leidt zelfs regelmatig tot nieuwe ontdekkingen. Daarnaast wordt er in bepaalde takken van het bedrijfsleven intensief gebruikt gemaakt van programmeren. Verzekeringsmaatschappijen en banken hebben hele teams met mensen die de hele dag data analyseren en modellen maken. Vanuit deze hoeken is er dus veel vraag naar mensen die vaardig zijn met programmeren, en daarom wordt er al tijden gepleit voor meer scholing in het programmeren. Ook bij middelbare scholen is er de afgelopen jaren verlangen geweest naar programmeercursussen, ook al is daar niet overal iets van terecht gekomen.
Naast programmeervaardigheden levert zo’n cursus ook andere skills op, namelijk de ‘computational thinking’ skills. Uit onderzoek blijkt dat problemen oplossen met programmeren een effectieve manier is om algoritmisch denken, creativiteit, probleemoplossend denken, samenwerken, kritisch denken en communiceren te ontwikkelen. De gekozen programmeertaal hangt natuurlijk af van het type probleem en de vaardigheden van de gebruiker, maar het is wel opmerkelijk dat Python zo dominant is onder de programmeertalen: Het marktaandeel van Python is bijna 30%. Er zijn meerdere factoren die hiervoor zorgen. Python is relatief makkelijk te leren, met duidelijke en intuïtieve syntax en veel functionaliteiten die het zware werk doen. Ook voor ervaren programmeurs is het makkelijk werken met Python. Ook hebben gebruikers van Python een zeer uitgebreid pallet aan uitbreiding tot hun beschikking in de vorm van modules. Zo zijn er modules specifiek gemaakt voor data-analyse, grafieken maken, lineaire algebra sommen oplossen etc. Al deze modules worden geleverd door de open source community, waardoor alles voor iedereen gratis toegankelijk is. Verder is er op het internet een uitgebreide community aan mensen die vragen beantwoorden en voorbeeld code beschikbaar stellen, waardoor je als je het internet doorzoekt bijna altijd wel een oplossing vindt voor jouw probleem. Al deze ingrediënten maakt Python de perfecte taal om middelbare scholieren bekent te maken met porgrammeren.
Persoonlijk hebben wij, Vera, Tijs en Thijs, in het eerste semester van het eerste jaar van de Bachelor Wiskunde een beginnerscursus Python gevolgd in het vak Programmeren en Experimenteren. We vonden alle drie deze cursus en het programmeren in het algemeen vanaf moment één erg leuk om te doen, mede doordat Python een erg prettige en duidelijk programeer taal is die makkelijke op te pikken is. Niet alleen dat, we hebben verder ook ondervonden dat programmeren zeer nuttig kan zijn, en we hebben in de afgelopen twee jaar regelmatig met Python gewerkt om problemen op te lossen, zowel in de Bachelor Wiskunde als in de Bachelor Natuurkunde. We waren zodoende bij aanvang van dit project alle drie van mening dat leren programmeren met Python zeer geschikt is voor de middelbare school, met name voor de geïnteresseerde bovenbouw leerling.
Als programma hebben we Jupyter Notebook gekozen; dit is een interactieve omgeving waar je Python code kan schrijven en uitvoeren. Daarnaast kan je tussen de code door ook blokken tekst neerzetten in een net format. We hebben voor notebooks gekozen omdat we zelf ook op deze manier les hebben gehad en we vonden dat deze manier goed werkt om zelfstandig een les uit te werken. In deze notebooks worden stukken theorie afgewisseld met opdrachten en voorbeelden, zo is het erg duidelijk welk stuk theorie bij welke opdracht hoort en hoeft niet telkens geswitcht te worden tussen een bestand met de uitleg en opdrachten en een programma om code te schrijven.
Een punt dat wij belangrijk vonden in het maken van onze lessen was dat er veel visueel materiaal voorbij moet komen. We wilden bijvoorbeeld meerdere opdrachten in de cursus opnemen waar een functie moest worden geschreven die een mooi plaatje genereert. De voordelen hiervan zijn dat het ten eerste een stuk leuker is om een plaatje als uitvoer te krijgen van een stuk code dan bijvoorbeeld een lijst getallen. Dit helpt de interesse te behouden en ook is het motiverend om door te gaan bij fouten om je plaatje correct te krijgen. Ten tweede is het ook een goede manier om fouten op te sporen, als je bijvoorbeeld een verticale lijn krijg waar je een horizontale verwacht dan weet je snel dat je de x en y coördinaten hebt omgewisseld, als je een getal bereken met een soortgelijke fout dan kan je al snel over de fout heen kijken. Ook wilden wij leerlingen helpen de structuur van stukjes code te begrijpen door ze gebruik te laten maken van het programma Python Tutor. Dit programma laat zien in welke volgorde de code wordt uitgevoerd en dit kan bijvoorbeeld veel inzicht geven in hoe dubbele for-loops werken. Hierom wilden we in de cursus ook de leerlingen aansporen van dit programma gebruik te maken.
Het doel van ons project is dat de leerlingen de basis van Python leren. Onder de basis van Python verstaan wij:
We willen dit bereiken door uitleg te geven over het onderwerp van de les, vervolgens geven wij voorbeelden waar de leerlingen naar kunnen kijken en voor zichzelf beredeneren waarom dat voorbeeld werkt. Daarna krijgen ze opdrachten waarin ze zelf code moeten schrijven en de stof van de uitleg en voorbeelden moeten toepassen. De opdrachten worden steeds iets moeilijker en hiervoor moet er steeds iets kritischer nagedacht worden over hoe een oplossing geïmplementeerd wordt. Door een gradiënt in de moeilijkheid van de opdrachten te verwerken wilden we er ook voor zorgen dat alle leerlingen alle delen van de stof hebben kunnen zien en overal mee hebben kunnen oefenen, maar dat er extra uitdaging is voor leerlingen die sneller door de opdrachten heen gaan. We gebruiken hier dus een vorm van problem based learning.
Eerst hebben we een afspraak gemaakt met onze opdrachtgever Jaap Goudriaan. We kregen meer te horen over onze doelgroep, een groep leerlingen uit klas 3 t/m klas 5 van het VWO die zichzelf kunnen opgeven voor de programmeercursus. Deze leerlingen zijn dus al gemotiveerd om te leren programmeren. In dit gesprek hebben we ook onze voorlopige plannen laten horen aan Jaap. Zoals gezegd was ons plan om de cursus in de vorm van Jupyter Notebooks te geven. We hebben ook aan Jaap uitgelegd wat de voordelen waren van dit programma; de makkelijke combinatie van theorie, opdrachten en uitvoerbare code schrijven in één bestand. Hierover was Jaap enthousiast. Ook gaven we de voorlopige lessen indeling, deze bestond op dat moment uit:
Voor de laatste les hadden we recursie in gedachten, en wilden we als eindopdracht een Sierpinski-driehoek tekenen. Dit was een voorbeeld van een resultaat uit Programmeren en Experimenteren dat wij aan Jaap hadden laten zien en waar hij zeer enthousiast over was. Jaap keurde dit plan goed dus na de afspraak zijn we begonnen met het maken van deze lessen.
Deze indeling van lessen vonden we zelf het meest logisch als we naar onze eigen ervaring met programmeren keken. In elk nieuw onderwerp wilden we de vorige onderwerpen weer aan bod laten komen om zo een stukje herhaling te hebben. Herhaling is zeer belangrijk bij het leren programmeren aangezien bijvoorbeeld lijsten en tuples telkens terug blijven komen bij het maken van functies of het plotten met matplotlib. Het was dus belangrijk om te zorgen dat de eerste lessen goed bleven hangen.
Voor de laatste les wilden we recursie behandelen, maar aangezien recursieve wiskunde al snel erg moeilijk kan worden en onze doelgroep 3 tot en met 5 VWO was, moesten we een manier vinden om dit uit te leggen zonder ingewikkelde wiskunde te gebruiken. Na wat brainstormen hebben we besloten voor de recursie een les te geven in Turtle. Turtle is een package in Python waarmee je kan tekenen. Het idee is dat je in een venster een “turtle” zie lopen, als een pen over papier, met alle instructies die gegeven zijn in de code.
Met Turtle kunnen we nu tekenen en stap voor stap zien wat er getekend wordt, dit vonden wij een belangrijk aspect van de les over recursie. De leerlingen kunnen zo zien in welke volgorde een recursieve functie uitgevoerd wordt en wat er precies gebeurt bij recursie. Ook is het handig dat we bij een moeilijke les zoals recursie een duidelijk plaatje maken waardoor het redelijk eenvoudig is te zien waar fouten gemaakt worden. Met behulp van Turtle kunnen we er dan ook voor zorgen dat er een duidelijk vast implementatieschema voor de recursie ontstaat, dat duidelijk visueel wordt weergegeven wat de leerlingen ook helpt de recursie te begrijpen.
Op deze pagina geven we een overzicht van de software we gaan gebruiken in dit vak, namelijk Anaconda, Spyder en JupyterNotebook. Nadat je deze pagina gelezen hebt kun je door gaan met het installeren van Anaconda. Als je Anaconda geïnstalleerd hebt dan kun je Spyder en JupyterNotebook gaan uitproberen.
AnacondaAnaconda is een distributie van de programmeertalen Python en R voor wetenschappelijk computergebruik (data science, machine learning-toepassingen, grootschalige gegevensverwerking, voorspellende analyses, enz.), die tot doel hebben het pakketbeheer en de implementatie te vereenvoudigen. Deel van de Anaconda-distributie is de Anaconda Navigator: een desktop grafische gebruikersinterface (GUI) waarmee gebruikers applicaties kunnen starten en conda pakketten eenvoudig kunnen beheren. Voor een uitgebreide beschrijving van de werking van Anaconda Navigator verwijzen we jullie naar diens documentatie.
Installatie van AnacondaWij gebruiken bij deze cursus standaard de Anaconda distributie van Continuum Analytics omdat we dan automatisch alle benodigde pakketten op de computer geïnstalleerd krijgen, deze gemakkelijk up to date kunnen brengen en houden, en we een handige werkomgeving krijgen waarbinnen we alles kunnen doen. Voer de volgende installatiestappen uit
Op de wiskundeopleiding van de UvA gebruiken we Spyder en Jupyter.
SpyderOm een Python-programma te schrijven heb je een editor nodig. Het handigst is om er een te gebruiken die speciaal hiervoor ontwikkeld is en die ook het testen van het programma ondersteunt. We spreken dan van een Integrated Development Environment (IDE). De IDE die bij installatie van Anaconda meekomt is Spyder.
JupyterNotebookEen Jupyter notebook is een omgeving in je browser waarin je teksten, grafieken en Python-opdrachten samen in één document kunt plaatsen en dat als interactieve webpagina kan gebruiken.