Commandeur Grace Hopper
Arnout van Kempen over rommelen in een digitale wereld.
De eerste programmeur uit de geschiedenis was lady Ada Lovelace. De programmeur van het Apollo-project dat mensen naar de maan bracht, was mevrouw Margaret Hamilton. De uitvinder van de compiler, van het begrip debugging en de grondlegger van COBOL, was commandeur Grace Hopper. De trend is nog veel duidelijker als je de vele onbekende namen toevoegt. De geschiedenis van de computer, van informatica, begint vooral bij vrouwen. Ik noem het maar even als anekdote, want voor mijn verhaal is het niet heel belangrijk, maar toch: wie ooit tegen een meisje zegt dat computers voor jongens zijn, maakt zich historisch onsterfelijk belachelijk.
Hoe dan ook, in de geschiedenis van programmeertalen gebeurt iets buitengewoon boeiends voor accountants. De eerste computers waren vooral wiskundige machines en de eerste programmeertalen waren dan ook sterk gericht op wiskunde. De oudste relevante taal is FORTRAN, dat uiteindelijk leidde tot ALGOL. En vrijwel alle talen die nu veel gebruikt worden zijn daar een nazaat van, met C als de meest invloedrijke. Rust, waar we weken mee bezig zijn geweest, is daar weer een moderne variant van.
Het is niet zo gek dat de wiskundigen, ingenieurs en wetenschappers die met computers werkten vooral computertalen bedachten gericht op wiskundigen, ingenieurs en wetenschappers. Een tamelijk briljant inzicht van Grace Hopper, een van de vele briljante inzichten die ze had overigens, was dat je twee soorten mensen hebt: mensen die van symbolen houden en mensen die van taal houden.
Programmeertalen zijn vrijwel zonder uitzondering gericht op de eerste groep. Dat is historisch niet zo gek, maar het maakt de tweede groep wel afhankelijk van de eerste groep bij het gebruik van computers. Grace Hopper heeft de basis gelegd voor een programmeertaal die voor de meeste moderne programmeurs tamelijk bizar is. De taal is dan ook gericht op programmeurs die niet zozeer wiskundig denken, niet van symbolen houden, maar die vanuit business denken en van taal houden. Het is de COmmon Business Oriented Language, COBOL. Wie Engels kan lezen, kan COBOL lezen, tenminste grotendeels. De taal kwam in 1959 uit en werd sterk ondersteund door de Amerikaanse overheid en vrijwel alle toen bestaande computerfabrikanten in Amerika.
Dat was op zich al een bijzonderheid. Het is nu moeilijk meer voor te stellen, maar het heeft tot diep in de jaren tachtig geduurd voordat computers allemaal op elkaar gingen lijken. Tegenwoordig kan je makkelijk je hele leven als accountant niet meer computers in een zakelijke omgeving zien dan klonen van de IBM PC 5150. Het ziet er allemaal reuze gevarieerd uit, we hebben servers, desktops, laptops, die draaien op Windows in allerlei versies, en dan nog Apples en Android en iOS en Linux en wat al niet. Maar in werkelijkheid is de wereld van computers vrijwel volledig bestaande uit x86- en ARM-computers, die werken met ofwel Windows-varianten, ofwel Unix-varianten. Meer smaken ga je als accountant waarschijnlijk niet tegen komen. En dat is best mooi, want daardoor werken programma’s op heel veel verschillende computers.
Van 1959 tot pakweg halverwege de jaren tachtig was dat echt heel anders. Een PDP 10 leek niet eens op een PDP 11. En een Univac leek al helemaal niet op een IBM 1401. Op mainframe gebied heeft IBM met de S/360 wel wat eenheid gebracht in 1965, maar dat was vooral eenheid in het IBM-aanbod. Tot de S/360 waren de computers van IBM niet eens compatible met elkaar!
ALGOL was bedoeld als een taal voor symbolenliefhebbers, die op allerlei computers moest kunnen werken. Dat werkte aardig, maar de echt universele taal die van ALGOL is afgeleid was toch pas C, uit 1972. COBOL bereikte dat resultaat dus al in 1959.
Voor accountants kan COBOL nauwelijks een volledig onbekende naam zijn. Het is, door oorzaken zoals hiervoor benoemd, de legacy taal bij uitstek. Bij banken, bij overheden, eigenlijk bij alle grote organisaties die enorm veel data te verwerken hadden voor zakelijke doeleinden, was COBOL de taal. En heel veel van die systemen draaien vandaag nog steeds. Het aantal COBOL-programmeurs neemt echter in rap tempo af, dus daar ontstaat wel een uitdaging.
Het lijkt me niet heel zinvol om als accountant een COBOL-programmeur te worden. Maar enige kennis van en inzicht in COBOL zou wel interessant zijn. En dat bereik je toch echt alleen door met de taal te gaan klooien.
De komende afleveringen gaan we daarom klooien met COBOL. Dat heeft twee nuttige effecten. Ten eerste geeft het inzicht in de belangrijkste taal voor accountants van grote dataverwerkers als banken. En ten tweede geeft het hernieuwde motivatie om Rust te leren, als je eenmaal ontdekt hoe krankzinnig programmeren in COBOL is.
Als teaser alvast een programma op GitHub, dat in COBOL hetzelfde doet als dit C programma:
#include <stdio.h>
int main() {
int nummer1, nummer2, resultaat;
printf("Voer het eerste getal in: ");
scanf("%d", &nummer1);
printf("Voer het tweede getal in: ");
scanf("%d", &nummer2);
resultaat = nummer1 + nummer2;
printf("Het resultaat van de optelling is: %d\n", resultaat);
return 0;
}
Let vooral op de regel met de berekening. Leuk voor symbolenliefhebbers. Nu in COBOL:
IDENTIFICATION DIVISION.
PROGRAM-ID. Optellen.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 NUMMER1 PIC 9(4).
01 NUMMER2 PIC 9(4).
01 RESULTAAT PIC 9(4).
PROCEDURE DIVISION.
BEGIN.
DISPLAY "Voer het eerste getal in: ".
ACCEPT NUMMER1.
DISPLAY "Voer het tweede getal in: ".
ACCEPT NUMMER2.
ADD NUMMER1 TO NUMMER2 GIVING RESULTAAT.
DISPLAY "Het resultaat van de optelling is: ", RESULTAAT.
STOP RUN.
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.