Program Arcade Games
With Python And PygameChapter 2: Wat is een computertaal?
Wanneer spreken we van een computertaal? waarom hebben computers dit nodig? Waarom zijn er zoveel verschillende soorten computertalen?
Zoals het niet nodig is om te begrijpen hoe een motor in elkaar zit om met een auto te rijden, is het niet nodig om al deze vragen te beantwoorden om te kunnen starten met programmeren. Alhoewel om meer ervaren te worden is het nodig om te begrijpen hoe een computer werkt. Daarom deze kort uitleg
2.1 Korte geschiedenis van het programeren
Computers zijn electronisch, en ze zijn digitaal. Voor een computer wordt alles herleid tot stroom langs een draadje of geen stroom. Geen stroom betekent nul, en wel stroom betekent één. Computers kunnen eigelijk niet meer dan het combineren van eenen en nullen.
Vroeger zorgden schakelaars (switches) ervoor dat de enen en nullen werden geladen in het computergeheugen. Figuur 2.1, Met dank aan Wikimedia Commons, zie je een Altair 8800. De frontpaneel switches worden gebruikt om het programma te laden. De lichtjes tonen de output. Er was geen scherm.
Elke reeks van aan/uit (on/off) schakelaars stelde een nummer voor. Elke nummer stond voor gegevens of een instructie dat de computer kon uitvoeren. Dit systeem dat enkel eenen en nullen kon gebruiken om een getal te tonen noemt men het binair systeem. Dergelijke computertaal noemt men een computertaal van de eerste generatie of 1GL.
Binaire getallen worden voorgesteld in groepjes van 4. bevoorbeeld :
1010 0010 0011
Een verbetering van het ingeven van programma's via schakelaars was het gebruik van hexadecimale codes. De decimale getallen zijn bij de meeste mensen gekend als de cijfers van 0-9. Hexadecimale gebruikt de cijfers van 0-9 en A-F om een reeks van 4 schakelaars aan te duiden met een waarde van 0-15.
Binair | Decimaal | Hexadecimaal |
0 | 0 | 0 |
1 | 1 | 1 |
10 | 2 | 2 |
11 | 3 | 3 |
100 | 4 | 4 |
101 | 5 | 5 |
110 | 6 | 6 |
111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | 10 | A |
1011 | 11 | B |
1100 | 12 | C |
1101 | 13 | D |
1110 | 14 | E |
1111 | 15 | F |
1 0000 | 16 | 10 |
1 0001 | 17 | 11 |
Om het invoeren van programma's makkelijker te maken werd later de assemblertalen ingevoerd. Elk commando gebruikt een ezelsbruggetje (mnemonic), een programma riep dan een compiler op om de ezelsbruggetjes te vertalen in nummers die dan op hun beurt stonden voor een commando. Deze programmertaal werd de tweede generatie genoemd of 2GL.
Figuur 2.2 toont een deel van een assembler programma ook dank zij Wikimedia Commons.
Zelfs al was dit al een serieuze verbetering, het was nog altijd niet makkelijk om te programmeren. De volgende generatie computertalen liet ons toe om op een veel abstracter niveau te gaan werken. De eerste derde generatietalen (COBOL, FORTRAN and LISP) waren veel makkelijker om te begrijpen en te programmeren.
De tweede en derde generatie gebruikte een programma dat noemt : compiler. Een compiler neemt het programma dat door de programmeur wordt ingetypt ( = source code) en wijzigt dit in machine code. De programmer laat dan de machine code uitvoeren. De originele code is niet uitvoerbaar.
Als er verschillende stukken source code zijn dan kunnen deze aan elkaar verbonden worden door een ander programma en dat programma noemt een linker. Een linker zorgt ervoor dat de verschillende gegenereerde machine codes samen één programma worden dat kan uitgevoerd worden. Dit uiteindelijke programma kan door de gebruiker uitgevoerd worden zonder dat de source code nog nodig is.
Een nadeel van het compileren naar machinetaal is dat het programma alleen werkt op het type machine waar de source code werd gecompileerd. Programma's die op Windows computers werden gecompileerd draaien niet op Apple Macintosh of Linux en omgekeerd.
Omdat het hele compileer en link proces voor nieuwe programmeurs nogal complex is, zijn er ook computertalen die gebruik maken van interpreters. Deze programma's kijken naar de source code en interpreteren het naar machinetaal op het ogenblik van uitvoering. Het laat ook toe om dezelfde programma's te laten draaien op Windows, Mac of Unix (Indien daar ook een gelijkaardige interpreter beschikbaar is).
Het nadeel van het gebruik van interpreters is dat de uitvoering trager is dan wanneer je code al meteen in machinetaal staat.
Python is een voorbeeld van een interpretertaal. Het is veel gemakkelijker om te programmeren dan in C, maar Python is trager en heeft een interpreter nodig om te kunnen werken.
Talen zoals Java maken gebruik van een systeem waar de code eerst wordt gecompileerd naar machine code die dan draait op een Java Virtual Machine (JVM), in plaats van op de eigenlijke machine. Andere populaire taal die dat doet is C#, een Common Language Infrastructure (CLI) taal dat draait op een Virtual Execution System (VES) virtuele machine. Discussies hierover gaan veel verder dan het doel van dit boek, maar informeer je gerust.
Er zijn veel verschillende computertalen vandaag. Want computers worden gemaakt voor specifieke doeleinden en ze werken ook met specifieke computertalen. Talen zoals C zijn goed voor operating systemen en kleine ingebouwde computers. Andere talen zoals PHP werden speciaal gemaakt voor het maken van webpaginas. Python is een algemene taal die gemakkelijk is in het gebruik.
Het bedrijf Tiobe houdt bij welke de populairste programmeertalen zijn in hun lijst die elke maand wordt bijgehouden. Het is een goed idee om daar eens te gaan kijken, en ook bij werkaanbieders zoals DICE om te zien welke programmeurs er nodig zijn op de arbeidsmarkt.
Gelukkig lijken alle talen nogal op elkaar en wanneer je één taal kan is het niet zo moeilijk om anderen onder de knie te krijgen.
Om op een leuke manier te kijken naar de geschiedenis van de computer raad ik je aan om naar : Triumph of the Nerds van Robert X Cringley te kijken. Een driedelige reeks over het ontstaan van de computer. De filmen zijn leuk genoeg om er samen met de gehele familie naar te kijken. Ik kan ook het boek Accidental Empires aanraden als je liever leest dan naar een film kijkt.
Wat gebeurt er na deze video's? Ze spreken zelfs niet over het ontstaan van het internet! Kijk dan naar de serie Nerds 2.0.1 ook van Robert X Cringely.
2.2 Herhalingsvragen
Klik hier voor een multiple-choice herhalingskwis.
- Geef een voorbeeld van een binair getal. (Een getal zoals “1” kan een binair, decimaal, en een hexadecimaal getal zijn. Probeer een voorbeeld te vinden waarmee het duidelijk het verschil wordt aangetoont.)
- Geef een voorbeeld van een decimaal getal.
- Geef een voorbeeld van een hexadecimaal getal.
- Converteer de getallen 1, 10, 100, 1000, en 10000 van binair naar decimaal.
- What is een compiler?
- What is source code?
- What is machinetaal?
- What is een taal van de eerste generatie?
- What is een taal van de tweede generatie?
- What is een taal van de derde generatie?
- What is een interpreter?
You are not logged in. Log in here and track your progress.
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin