Als het in het onderwijs in Nederland over “programmeren” gaat worden eenvoudige vragen al heel snel ingewikkeld. Dus een vraag als “Welke programmeertalen zouden onze leerlingen/studenten moeten kennen?” (bron) is niet helemaal zonder risico. Immers, je moet dan gaan nadenken over het doel dat je daarmee hebt. Wil je ze leren programmeren? Of juist coderen? Of software ontwikkelen? Ik ga niet eens proberen naar bronnen te linken die ze op één hoop of op juist heel verschillende hopen (en dan per bron ook verschillend) gooien.
Dus laat ik het maar even veilig houden in deze blogpost. Zo’n 9 jaar geleden vroeg ik me af welke programmeertalen ik allemaal zou moeten leren. Zoals ik toen beschreef: Basic was mijn eerste kennismaking met programmeren, maar daar kon je (toen) zo weinig mee dat ik er niet veel interesse voor had. Op de universiteit leerde ik Turbo Pascal om daar vervolgens nooit meer wat mee te doen. Daarna kwam ik in de Windows omgeving en Visual Basic (binnen Office!) en Active Server Pages (ASP) terecht. Mijn eerste kennismaking met JavaScript was in de browser, ASP werd vervangen door PHP toen ik weblogtools ging gebruiken op basis van die taal. En daarna werd het een opeenvolging van “wat heb ik nodig”. Zo kwam er een beetje Python bij, een heel klein beetje .NET en eveneens een klein beetje Java. Dat was toen. Sindsdien zijn er dingen gewijzigd en gelijk gebleven.
PHP gebruik ik vele minder dan voorheen. Het mooie van WordPress bijvoorbeeld is dat ik eigenlijk alle belangrijke functionaliteit kant en klaar krijg zonder zelf in de code te duiken. Natuurlijk begrijpen hoe de plugins werken blijft handig, maar omdat een weblog een omgeving is waar hackers en script kiddies regelmatig proberen in te breken, hou ik dat liever niet zelf allemaal bij. Tijdens mijn promotieonderzoek heb ik gebruik gemaakt van CakePHP. Toen heb ik ook geleerd dat ik de nodige kennis mis(te) voor wat betreft het gelaagd ontwikkelen van webapplicaties.
Scratch / Blockly gebruik ik eigenlijk nauwelijks. Voornamelijk als ik eenvoudige dingen wil programmeren voor de micro:bit. alleen als ik een omgeving nauwelijks ken. Ik merk namelijk dat ik de codestructuren die op die manier tot stand komen lang niet altijd handiger vind. Daarom ben ik bij pxt editor voor de micro:bit heel blij met de naadloze wisseloptie naar JavaScript.
JavaScript gebruik ik niet veel meer in de browser maar dus wel in omgevingen als de micro:bit of de Puck.js. Ik heb er ook mee gespeeld binnen omgevingen als de EPS8266, ook daar kun je namelijk gebruik maken van Blockly, maar de resultaten zijn wisselend. Op de server maak ik incidenteel gebruik van Node.js maar meestal om bestaande code uit te voeren, niet om zelf te ontwikkelen.
Met Java doe ik niet echt iets meer. Op Windows is Java gewoon knudde, in de browser is het net als Flash gelukkig zo goed als verdwenen. Voor het programmeren van Android apps was/is Java-kennis een vereiste (nog steeds), dus dat zou ooit nog een reden kunnen zijn om er dieper in te duiken.
Python / microPython. Ik heb een bloedhekel aan Python. En eigenlijk maar om één reden: het zotte systeem van inspringen van programmacode. Alle andere talen die ik ken gebruiken (…) of {…} als mechanisme om code te groeperen. Maar omdat de LoPy gebruik maakt van microPython moest ik er wel induiken. Als je de spaties in te gaten houdt is het eigenlijk een programmeertaal zoals zo velen. Eenvoudig om jezelf eigen te maken.
C/C++ klonken voor mij altijd als “complex” en “voor echte programmeur”. Totdat ik met de verschillende Arduino varianten, de ESP8266 en de ATTiny85 in aanraking kwam. Toen kwam ik er namelijk achter dat de code die je voor de Arduino schrijft, hetzelfde is (met een paar uitbreidingen/aanpassingen). Als gevolg daarvan gebruik ik deze taal op het moment best veel.
En daarnaast dan nog (af en toe) :
R. Ja, R-project is inderdaad een statistiek programma. Maar waar je bij SPSS nog kunt kiezen tussen het uitvoeren van analyses via de menu’s of via scripting, gebeurt dit in R allemaal via script. En daarbij gaat het niet alleen om het laten uitvoeren van statistische functies, ook het genereren van rapportages en complete interactieve webapplicaties. Dus, ja, ook programmeren. Grappig is overigens dat in het overzicht van de 9 programmeertalen die in 2017 het meest gevraagd worden ook SQL genoemd wordt. Nu moet ik bekennen dat ik die niet zo heel vaak meer nodig heb, wel “vroeger” in Access en later in SQL server.
OpenSCAD, Ik vond het ontwerpen van objecten om te printen met behulp van OpenSCAD eenvoudiger dan het tekenen ervan in andere programma’s. Helaas geen 3D-printer bij de hand dus veel gebruik maak ik er niet van.
De grote ontbrekende in dit overzicht is waarschijnlijk wel de groep Objective-C en Swift. Maar net als met Java en Android ben ik hier afgehaakt op de complexiteit van de omgeving. Ik vind het dan ook wel heel apart als ik naar de omgeving kijk die Apple voor ogen heeft als het gaat om het aanleren van programmeerkennis aan leerlingen/studenten. Ik heb er zo mijn twijfels bij.
En voor leerlingen?
Dan toch nog even terug naar de vraag van Per-Ivar. Voor leerlingen hangt het er natuurlijk een beetje af van hoe jong je start. Voor de absolute beginners lijkt met een programmeertaal niet eens nodig. Je kunt unplugged beginnen of met zoiets als een Beebot waarbij het dus vooral gaat om de basisprincipes. In het verlengde daarvan heb je dan omgevingen als code.org. Bij CodeCombat zie je dat er geen gebruik gemaakt van pseudocode maar dat je programmeert in JavaScript of Python. Voordat je daar aan begint kan ik me echter voorstellen dat je eerst Scratch of Blockly, dus zoals code.org dat doet, gebruikt om het programmeren te introduceren. Waarbij code.org nog een heel erg zandbakomgeving is en je met Scratch ook kennis kunt maken met het koppelen van externe apparaten zoals bijvoorbeeld richting de WeDo. Daarna is de stap naar JavaScript / Python te maken aan de ene kant en C/C++ voor Arduino aan de andere kant.
Daarmee heb je dan kennis van talen en de basisconcepten van programmeren. Dat is nog heel wat anders dan software-ontwerp. Hoe je een goede applicatie ontwerpt, hoeveel daarvan echt basiskennis is voor iedereen (of alleen als je dit voor je beroept wilt leren), dat is een ander punt van discussie, voor een andere blogpost.
Samenvattend:
- Unplugged
- Beebot
- Blockly / Scratch / Code.org
- JavaScript / Python
- C/C++ (Arduino)
- optie: PHP / CSS / HTML5 / Node.js als je meer web georiënteerd wilt ontwikkelen
- optie: R / SQL voor data analyse
- optie: Java / Swift als je mobiele applicaties wilt laten ontwikkelen
Pierre, wat mij betreft wordt er in het land een denkfout gemaakt: computational thinking = programmeren. Volgens mij moet je in de toekomst meer-en-meer apparaten kunnen instellen, b.v. in de zorg een zorgrobot, in de bouw een stapranden-printmachine (bestaat echt ;-), als marketeer IFTT-achtige zaken, et cetera. Dit vraagt leren denken als een machine, maar niet per se programmeren. Ik ben benieuwd hoe jij dit ziet?