Ik ben eerder ingegaan op een beeld van een werkelijkheid waarin PacMan, het gele happertje uit het Atari-spelletje van decennia geleden, zelfbewustzijn heeft. Het roept de vraag op wat “echt” is in de wereld van PacMan, maar ik ga liever eerst een nog wat vreemder kant op. Ik legde ook de gedachte voor dat PacMan op één of andere manier in staat zou zijn de computer te programmeren waarop het spel draait. Dit heeft een aantal vreemde implicaties. Immers, dat wat PacMan programmeert op “zijn” computer wordt daarmee werkelijkheid in “zijn” echte, reële wereld. Geprogrammeerd IS echt.
De vraag die natuurlijk gesteld moet worden is hoe PacMan de computer zou programmeren waarop het spel draait. Die vraagt valt te splitsen in twee delen. Enerzijds is dat de programmeertaal waarmee PacMan programmeert, ofwel de taal die de computer verstaat en vertaalt naar het spel. Anderzijds is van belang welke interface PacMan gebruikt. Hoe worden de gedachtes van onze gele vriend omgezet naar computer-instructies? Om dat beeld goed te laten werken zullen we met heel praktische zaken rekening moeten houden. Zoals het feit dat PacMan geen handen heeft en dus geen toetsenbord kan bedienen.
De programmeertaal voor PacMan is probleemloos. We weten dat het spel PacMan oorspronkelijk werd geprogrammeerd op een Z80 processor, aangevuld met wat ondersteunende electronica. Dat betekent automatisch dat als PacMan zelf wil gaan programmeren, dat in de machinecode van de Z80 zal moeten. Het bekent echter niet dat PacMan zelf machinecode moet kunnen schrijven. Voor programmeurs is het gebruik van machinecode grotendeels volledig in onbruik geraakt. De moderne programmeur gebruikt een hogere programmeertaal, die door een programma, de compiler, wordt vertaald naar machinecode. Ook als je geen programmeur bent, is een eenvoudig programma in een dergelijke hogere taal nog redelijk te snappen, terwijl machinecode vrijwel kansloos zal zijn.
Ter illustratie twee korte stukjes code, de ene in de programmeertaal Pascal en de andere in machinecode voor de Z80. Het verschil in begrijpelijkheid moge evident zijn.
In Pascal:
program SomVanTweeGetallen;
uses crt;
var
getal1, getal2, som: Integer;
begin
clrscr;
Write(‘Voer het eerste getal in: ‘);
ReadLn(getal1);
Write(‘Voer het tweede getal in: ‘);
ReadLn(getal2);
som := getal1 + getal2;
WriteLn(‘De som van ‘, getal1, ‘ en ‘, getal2, ‘ is: ‘, som);
ReadLn; // Wacht op invoer voor afsluiten
end.
In Z80 machinecode wordt dit:
CD 52 52 CD 66 52 47 CD 52 52 CD 66 52 4F 78 81 FE 0A DA 70 52 21 78 52 CD 89 52 C3 7A 52 C6 30 CD 86 52 C3 7A 52 D6 30 C9 DB 00 DB 00 CB 7F 28 F9 E6 7F C9 5F 0E 02 CD 38 00 C9 7E FE 00 C8 CD 86 52 23 C3 93 52 53 6F 6D 20 3E 20 39 21 00 C3 A6 52
Een programmeertaal als Pascal heeft een hoger abstractieniveau dan machinecode, en is ook expressiever. Abstractie slaat op het vermogen om met simpele taal-elementen complexe ideeën weer te geven en daardoor de complexiteit te verbergen, en expressiviteit zegt iets over het vermogen in een taal kort, helder en nauwkeurig ideeën uit te drukken.
Zoals de meeste programmeurs zal ook PacMan waarschijnlijk weinig tot geen kennis hebben van de computer, van machinecode of van de compiler. Sterker, dit zijn allemaal elementen die geen deel uit maken van zijn werkelijkheid! Het neemt niet weg dat als PacMan zijn eigen computer kan programmeren, dat gebeurt via een programmeertaal, of korter gezegd, via taal.
Dan is er nog het probleem van de interface. Hoe krijgt PacMan zijn ideeën omgezet in taal, en hoe wordt die taal weer omgezet in machinecode?
Hier moet ik het vaag houden, om twee redenen. Ten eerste, omdat het voor dit moment niet geheel relevant is. Maar ten tweede, omdat het op het moment dat het wel relevant wordt een vraag is die alleen indirect te beantwoorden lijkt. De gedachtensprong die daarvoor nodig is ga ik pas maken als we PacMan achter ons hebben gelaten.
Wel stel ik voor dit moment vast dat in het spel PacMan geen toetsenbord te vinden is, en PacMan geen handen heeft om een toetsenbord mee te bedienen. PacMan is niets meer dan een hoofd met een mond. Het lijkt me dan ook niet volledig onredelijk te veronderstellen dat PacMan programmeert door zich uit te spreken.
Wat houden we nu over uit dit beeld over PacMan? Een levende, zelfbewuste entiteit die weliswaar geen eigen wil heeft vanuit onze optiek en al evenmin emoties, intelligentie of zelfbewustzijn, maar die dat zelf wel zo ervaart en die we daarom toch zo beschouwen voorlopig. Deze entiteit heeft geen begrip, nee zelfs geen weet van het feit dat hij slechts een virtueel wezen is in een virtuele wereld die geprogrammeerd is op een computer. Toch, zo nemen we even aan, is hij in staat die computer te programmeren. Hiertoe gebruikt hij taal, die voldoende abstractie kent en expressief genoeg is, om zijn ideeën over zijn wereld in uit te drukken. Hoe deze taal door een compiler wordt vertaald naar machinecode voor de computer waarin de wereld van PacMan bestaat weet PacMan niet, hij weet niet eens van het bestaan van die computer.