Computers en algoritmes overheersen steeds meer ons leven. Als je weet hoe je computers kunt programmeren en als je inzicht hebt in hoe algoritmes werken, heb je dus een streepje voor. Er gaan zelfs stemmen op om kinderen op de lagere school al te leren programmeren. Maar hoe begin je daaraan? En welke van de vele programmeertalen kies je?
Koen Vervloesem
Als je je computer inschakelt, je smartphone ontgrendelt of je thermostaat bijstelt, treedt er op de achtergrond een heel proces in werking. Iemand (meestal een heel team) heeft de processor die in deze apparaten zit geprogrammeerd: minutieus aan de processor uitgelegd welke instructies die moet uitvoeren.
In het hart van elke computer (en onder ‘computers’ verstaan we ook smartphones, ‘slimme’ apparaten en de auto’s van tegenwoordig) zit een processor, die instructies begrijpt zoals:
– Zet waarde 0 in register A;
– Tel de inhoud van registers A en B op en zet het resultaat in register C;
– Kopieer de inhoud van register C naar geheugenadres 1234;
– Voer de instructie op geheugenadres 5678 uit als register C de waarde 10 bevat.
Enzovoort.
We hebben hier eigenlijk al een stap overgeslagen. Een processor begrijpt immers alleen maar binaire getallen (zie het kader ‘Binaire en hexadecimale getallen’ verderop). Voor een x86-processor ziet de instructie om het getal 47 in het register AL te zetten er bijvoorbeeld als volgt uit: 10110000 00101111. Een programma is dan een opeenvolging van dit soort binaire getallen.
Deze instructies vormen de machinetaal van de processor. In principe kun je een computer alles laten doen door een programma in deze machinetaal te schrijven, maar het spreekt voor zich dat niemand op deze manier een volledig programma gaat schrijven. Een eerste tussenstap is assembler. Dat is een vertaling van de binaire getallen van instructies naar een gemakkelijker te onthouden vorm. Zo ziet de instructie 10110000 00101111 er in assembler als volgt uit: MOV AL, 2fh. Dat staat voor: laad het register AL met het hexadecimale getal 2f.
Om te programmeren in assembler, moet je bijna als een computer denken.
Het nadeel van assembler is dat je veel te veel als een computer moet denken, in termen van processorregisters, geheugenplaatsen enzovoort. Daarom zijn er ‘hogere programmeertalen’ ontworpen die abstractie maken van de hardware en je toelaten om te programmeren zonder dat je een expert in computerhardware dient te zijn.
Slechts in uitzonderlijke gevallen wordt er nog in assembler geprogrammeerd. Als je wilt leren programmeren, ga je dus een hogere programmeertaal kiezen. In een hogere programmeertaal schrijf je een programma te vergelijken met een recept als je kookt: de stappen die de computer moet uitvoeren, schrijf je één voor één op. De details hangen van de programmeertaal af, maar allemaal hebben ze wel invoer en uitvoer, rekenkundige bewerken, controles op specifieke voorwaarden en herhalingen.
Welke programmeertaal je ook kiest als je wilt leren programmeren, je zult je alleszins ook wel moeten trainen in iets wat ‘computationeel denken’ genoemd wordt. In tegenstelling tot vaak gedacht wordt, is dat niet ‘leren denken als een computer’. Het gaat er meer om dat je een probleem kunt ontleden in kleinere deelproblemen, die elk op zich eenvoudig op te lossen zijn. Daarbij moet je ook abstract kunnen redeneren en een probleem vanuit verschillende standpunten kunnen benaderen.
Met computationeel denken schrijf je nog geen computerprogramma, maar je bedenkt een algoritme. Dat is een reeks stappen om het probleem op te lossen. Die stappen kunnen zich herhalen (men spreekt dan van een iteratie of een lus) of naar andere stappen voortgaan afhankelijk van de uitkomst van een berekening (men spreekt dan van een voorwaardelijke sprong). Een algoritme beschrijft dus een oplossing van een probleem. Vaak zijn er meerdere manieren om een probleem op te lossen.
Op websites zoals Coursera (www.coursera.org) vind je cursussen over computationeel denken (ook gratis), maar het blijft allemaal wat abstract. Je kunt ook prima onmiddellijk een specifieke programmeertaal leren. In de praktijk leren de meeste beginnerscursussen programmeren je naast de specifieke programmeertaal ook de basis van computationeel denken aan.
Uiteindelijk is de beste manier om te leren programmeren het in de praktijk doen en veel oefenen. Zoiets houd je alleen vol als je het interessant vindt. We raden je dan ook niet aan om een specifieke programmeertaal te kiezen omdat ze populair is of veel gevraagd is op de arbeidsmarkt. Kies gewoon een taal die goed geschikt is voor iets waarin je geïnteresseerd bent, of dat nu games ontwikkelen, websites bouwen of mobiele apps maken is. En begin dan gewoon al lerend dit te programmeren. Nadat je de basis van een eerste taal onder de knie hebt, leer je heel snel een andere programmeertaal.
Op websites zoals Coursera vind je gratis cursussen over computationeel denken.
Als een programmeertaal met code je wat afschrikt, kun je altijd je eerste stappen in de wereld van programmeren zetten met een visuele programmeeromgeving. Voor kinderen is vooral Scratch leuk. Het is een visuele programmeertaal die ontwikkeld is in het MIT Media Lab (https://scratch.mit.edu).
Programmeren doe je in Scratch niet door code in te typen, maar door blokken aan elkaar te klikken, als een soort virtuele legostenen. De blokken passen maar op specifieke manieren aan elkaar en als alle blokken in je ‘programma’ passen, dan weet je al zeker dat het een geldig programma is.
Scratch is een programmeeromgeving die met blokken werkt.
Voor Scratch hoef je niets te installeren. Je surft gewoon naar de website en klikt op Aan de slag. De interface werkt ook gewoon in het Nederlands, wat wel prettig is voor jongere kinderen. Je sleept dan blokjes van links naar het werkgebied in het midden en als je programma klaar is, klik je op het groene vlaggetje bovenaan rechts om het te starten.
Scratch is vooral geschikt om snel en eenvoudig animaties, spelletjes of interactieve verhalen te maken, inclusief allerlei beelden en muziek. Voor kinderen is dat aantrekkelijk omdat ze onmiddellijk resultaat zien. Je wordt als gebruiker ook aangespoord om je creaties met de wereld te delen. Voor inspiratie kun je dus altijd de meer dan 50 miljoen gedeelde Scratch-projecten online bekijken.
Als er iets is als een Scratch voor volwassenen, dan is het Node-RED wel (www.nodered.org). Node-RED wordt op de website omschreven als “low-code programming for event-driven applications”. Dat is een hele mond vol. Low-code programming betekent gewoon dat je geen code hoeft in te typen. Met event-driven applications wordt bedoeld dat je met Node-RED toepassingen bouwt die reageren op gebeurtenissen.
Dat maakt Node-RED ideaal om diverse systemen met elkaar te combineren. Zo kan je Node-RED-programma reageren als je een knop indrukt die je op een Raspberry Pi aansluit en dan via een http-aanvraag een webhook op je domoticasysteem aanroepen. Je selecteert gewoon de juiste nodes uit een gereedschapskist en plakt deze op een grafische manier aan elkaar.
In Node-RED programmeer je door blokken aan elkaar te koppelen.
Om in Node-RED te kunnen programmeren, dien je het eerst te installeren. Dat kan in Windows, macOS of Linux, maar een leuke optie is om het op een Raspberry Pi te installeren. Daarna bezoek je de webinterface van je installatie en maak je daar een ‘flow’.
Node-RED biedt standaard al tientallen types nodes waarmee je al vrij complexe programma’s kunt maken. Je kunt ook eenvoudig allerlei externe types nodes installeren voor extra functionaliteit, bijvoorbeeld als je een dashboard wilt maken, je programma wilt laten tweeten of je Philips Hue-lampen in Node-RED wilt aansturen. En onderliggend is Node-RED op javascript gebaseerd, dus als er geen functionaliteit bestaat voor wat je wilt, breid je die eenvoudig zelf uit met wat javascript-code.
Er is niet één algemeen aanvaarde maatstaf om de populariteit van programmeertalen te meten. Een lijst die je wel vaak tegenkomt, is die van het Eindhovense bedrijf TIOBE. De TIOBE index (www.tiobe.com/tiobe-index) meet de populariteit van programmeertalen aan de hand van zoekmachineresultaten. In april 2020 waren de drie populairste programmeertalen Java, C en Python. Assembler staat nog altijd op plaats 14. Er staan ook enkele gespecialiseerde programmeertalen in, zoals SQL (voor databases), R (voor statistische analyses en datavisualisatie) en MATLAB (voor wiskundige berekeningen). Opvallend is dat inmiddels Scratch voor het eerst in de top 20 staat.
En zo hebben we de volgende programmeertaal al vermeld die de moeite waard is om eens te bekijken: javascript. Vooral als je interactieve websites wilt maken, kun je niet voorbij deze populaire scripttaal. Het helpt dan wel als je ook wat html (HyperText Markup Language) en css (Cascading Style Sheets) kent, de talen waarmee je de inhoud respectievelijk de vormgeving van een webpagina vastlegt.
Javascript leer je het beste door een interactieve website te maken. Het javascript-gedeelte van je website zorgt dan bijvoorbeeld voor animaties of controleert invoer in een webformulier om er zeker van te zijn dat de bezoeker geen ongeldige gegevens invoert. Er bestaan ook heel wat web application frameworks die je helpen om een interactieve website te bouwen, zoals Vue.js (www.vuejs.org), React (www.reactjs.org) en jQuery (www.jquery.com).
Hoewel javascript vooral bekend is voor het ontwikkelen van interactieve websites, is dat al lang niet meer het enige toepassingsdomein. Eigenlijk is javascript ondertussen een universele programmeertaal. Een belangrijk project hiervoor is Node.js (www.nodejs.org), een runtime-omgeving die javascript buiten de webbrowser kan uitvoeren. Met Node.js kun je dus in javascript programma’s schrijven die op de opdrachtregel werken of op een server draaien. Een populaire combinatie is dan ook een website in javascript die communiceert met een server met javascript-code die op Node.js draait. Zo hoef je maar één programmeertaal te gebruiken. Node-RED draait ook op Node.js.
Ook om grafische programma’s voor op de desktop of mobiele toestellen te ontwikkelen, kun je javascript gebruiken. Zo bouw je met het framework Electron (www.electronjs.org) toepassingen die zowel op Windows, macOS als Linux draaien. Een Electron-toepassing is eigenlijk een website die je in html, css en javascript schrijft. Electron zorgt ervoor dat je webapplicatie er als een desktoptoepassing uitziet. Een vergelijkbaar systeem voor mobiele apps is Apache Cordova (https://cordova.apache.org): je schrijft je app in html5, css en javascript, en je maakt er een app mee die zowel op Android als iOS en andere mobiele platforms werkt.
Met Electron bouw je in javascript toepassingen die zowel op Windows, macOS als Linux draaien.
Javascript mag dan al een universele programmeertaal zijn, het is lang niet de populairste taal en het heeft ook zijn gebreken. Een populaire en toch beginnersvriendelijke taal is Python (www.python.org). Met Python is het mogelijk om in vrij eenvoudige code al veel te bereiken. Bovendien heeft het project heel goede officiële documentatie online staan.
Rond Python bestaat ook een heel ecosysteem van goede softwarebibliotheken om grafieken te tekenen, de serverkant van webapplicaties te ontwikkelen, games te maken of elektronica aan te sturen. Op de Raspberry Pi is Python de standaardtaal. Zowat alle uitleg die je vindt over elektronica aansturen met de Raspberry Pi maakt gebruik van Python.
Python-code is doorgaans vrij leesbaar.
Wil je native mobiele apps ontwikkelen, dan kom je al snel bij nog andere talen uit. Android-apps werden oorspronkelijk in Java geschreven, maar sinds mei 2019 is Kotlin de voorkeurstaal voor het mobiele platform van Google (www.kotlinlang.org).
Voor iOS is er een vergelijkbare verschuiving gebeurd. Oorspronkelijk gebeurde de ontwikkeling van apps voor het mobiele platform van Apple in Objective C. Maar ondertussen heeft Apple zijn eigen programmeertaal ontwikkeld: Swift (www.swift.org). Het is nu de voorkeurstaal voor de ontwikkeling van apps voor iOS.
Zowel Google als Apple hebben heel goede documentatie over hoe je een mobiele app maakt met hun programmeertaal, api (Application Programming Interface) en programmeeromgeving. De beste manier om een mobiele app te leren programmeren, is dan ook om eerst nauwgezet hun documentatie te volgen en daarna stap voor stap de code van de voorbeeld-apps aan te passen naar je eigen wensen.
Er is nog één interessant platform dat we nog niet hebben vermeld: Arduino (www.arduino.cc). Dit microcontrollerbordje programmeer je in Arduino IDE of Arduino Web Editor. De taal is gebaseerd op C/C++, wat niet de gemakkelijkste talen zijn om te leren, maar Arduino maakt het eenvoudiger door een aantal conventies en een bibliotheek van standaardfuncties.
Leren programmeren op een Arduino is wat speciaal omdat een microcontrollerbordje weinig geheugen en geen snelle processor heeft. Bovendien moet je tegelijk ook nog elektronica leren, omdat het bij een Arduino vooral gaat om het aansturen van elektronische componenten zoals leds, sensoren enzovoort. Gelukkig biedt Arduino op hun website uitgebreide documentatie en als je ziet dat je Arduino-programma tot fysieke activiteiten zoals een draaiende motor of een knipperende led leidt, geeft dat enorm veel voldoening.
De Arduino Uno is het referentiebordje voor het Arduino-platform (bron: Arduino.cc).