Wat is het verschil tussen een computer en een wasmachine?
Arnout van Kempen over rommelen in een digitale wereld.
Wasmachines zijn programmeerbaar. Computers zijn programmeerbaar. Dus wasmachines zijn computers? Toch niet. Zelfs als een wasmachine is gebouwd met een computer in het hart, dan nog houdt die computer op computer te zijn, zodra deze onderdeel wordt van de wasmachine.
Laten we eerst eens goed bekijken hoe een wasmachine geprogrammeerd wordt. Met een bepaald input device, veelal een serie knoppen die ingedrukt kunnen worden, of rondgedraaid naar een bepaalde stand, stellen we een wasprogramma samen. Zetten we de wasmachine vervolgens aan, of in een vorm van 'uitvoeren', dan wordt dat programma uitgevoerd. Dat lijkt toch aardig op een computer. Maar dat is schijn. Wat we een wasprogramma noemen, is niet het echte wasprogramma. We doen niets anders dan het parametriseren van het echte programma. Extreem versimpeld is het programma bijvoorbeeld:
- Voer het voorprogramma uit. Gebruik daarbij water van de temperatuur die volgt uit knop 1.
- Voer het hoofdprogramma uit. Gebruik water van de temperatuur die volgt uit knop 2 en draai zo lang als is aangegeven met knop 3.
- Als knop 4 is ingedrukt, centrifugeer met het toerental dat is aangegeven met knop 5.
Het indrukken van de knoppen 1 tot en met 5 geeft noodzakelijke informatie aan het programma en bepaalt hoe het programma exact zal werken, maar het is niet het programma zelf. Het is data.
Als je als gebruiker wilt dat de wasmachine echt iets anders gaat doen, bijvoorbeeld een maanlanding aansturen, dan kan dat niet. Niet omdat de wasmachine daar de rekenkracht voor zou missen, maar omdat het geen computer is. En nog specifieker, omdat het geen Von Neumann-computer is.
Kijk nog eens terug bij de aflevering van twee weken geleden. Daar zagen we dat voor de CPU er geen enkel verschil is tussen programma en data. Dat maakt een computer tot een computer. En de consequenties daarvan zijn enorm.
Om met het goede nieuws te beginnen: omdat een computer geen enkel verschil ziet tussen programma en data, kan een computer worden gebruikt om programma's mee te maken. Als we in C een programma schrijven, dan is dat data. Een tekstbestand zonder feitelijke betekenis voor de computer. Maar met een ander programma, gcc bijvoorbeeld, kunnen we dat tekstbestand vertalen naar een uitvoerbaar programma. In het begin van deze serie deden we dat. We gebruiken dan dus een programma om een programma in voor mensen leesbare tekens om te zetten naar een programma in voor de computer leesbare tekens. Maar je kan net zo correct zeggen dat we een tekstbestand omzetten naar een binair bestand, beide databestanden. Dat maakt niet uit, omdat de computer het verschil niet begrijpt tussen data en programma.
Ja, maar, in Linux hadden we toch het X bit dat aangeeft of een bestand een uitvoerbaar bestand is of niet? Klopt, goed onthouden. Maar dat is niet de CPU die dan aan het woord is. Linux zelf is immers ook weer een programma. Het is het programma dat tegen andere programma's zegt dat een bestand data bevat, of een programma. Voor de CPU doet dat er volstrekt niet toe!
Mooi dat we hierdoor programma's kunnen maken met een computer. Maar het betekent nog veel meer. Bijvoorbeeld dat we nooit weten wat we zien. Tenzij we daar afspraken over maken en die ook handhaven (zoals Linux met dat X bit). Menselijke afspraken. Die door mensen geprogrammeerde programma's handhaven.
Het betekent ook dat het voor fraudeurs en criminelen betrekkelijk eenvoudig is de computer ongewenste dingen te laten doen. De crimineel in kwestie hoeft immers slechts data in de computer te krijgen en de computer er dan op te wijzen dat die data eigenlijk een programma is. Computervirussen werken volgens dit mechanisme en de moderne hacker weet er op vele manieren weg mee.
Een slordige programmeur doet overigens ook al genoeg. Ooit had ik een spelletje waarbij je na enige tijd letterlijk het programma in vloog. De programmeur had er kennelijk geen rekening mee gehouden dat een speler het einde van de data zou bereiken en had dus niet voorkomen dat het programma zichzelf als data zou gaan lezen. Best slordig. Pijnlijker wordt het, als je in C op deze manier input, strings, geheugen (de)allocatie, et cetera net niet goed geregeld hebt in je betaalapp.
Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.
Gerelateerd
Over bits & bytes
Arnout van Kempen over rommelen in een digitale wereld.
En arrays dan?
Arnout van Kempen over rommelen in een digitale wereld.
Typecasting in COBOL
Arnout van Kempen over rommelen in een digitale wereld.
Gewone variabelen
Arnout van Kempen over rommelen in een digitale wereld.
Bestanden in soorten en maten
Arnout van Kempen over rommelen in een digitale wereld.