Verhalen vertellen
Arnout van Kempen over rommelen in een digitale wereld.
COBOL is een taal bedoeld voor mensen die liever een memo schrijven, dan een wiskundige formule. In COBOL schrijf je een verhaal en dat verhaal vertelt wat je programma moet doen. Voor moderne programmeurs voelt dat heel ongemakkelijk en lijkt het allemaal nogal inefficiënt. Maar voor mensen die gewend zijn dossiers te vullen met memo's, is COBOL een heel natuurlijke taal. Bekijk maar eens een controledossier. Je zal daar een vaste structuur in ontdekken. Die structuur is bepalend voor welke informatie waar te vinden is, maar bepaalt ook hoe een individueel memo, een vragenlijst, een werkprogramma, eruitziet. De opbouw van een memo ligt vast, de verwijzingen naar andere dossierstukken. En wat iedereen gemerkt heeft die wel eens wisselde van werkgever in de sector: zelfs als je de voorgeschreven structuur nog niet kent, kan je een dossier toch vrij snel redelijk goed lezen. Waarom? Omdat ieder controledossier min of meer dezelfde elementen kent en min of meer dezelfde structuur. De slimmigheden van het ene kantoor en de andere aanpak van het andere kantoor zie je natuurlijk terug. Maar ieder dossier leest toch grofweg van een stuk met identificatie, wat informatie over risico's, interne beheersing, gegevensgerichte werkzaamheden naar een deel waar alles bij elkaar wordt gebracht, conclusies worden getrokken en gerapporteerd wordt.
Wie zich dat realiseert, kan ieder accountantscontroledossier lezen. Met een COBOL-programma werkt dat eigenlijk net zo.
Een programma in COBOL kent altijd de volgende opbouw:
- Division een soort Hoofdstuk,
- Section
- Paragraph
- Sentence
- Statement
- Character
- Statement
- Sentence
- Paragraph
- Section
Een Sentence, een zin, valt samen met een Statement als die zich beperkt tot één regel. Iedere Sentence wordt afgesloten met een punt.
Ik neem aan dat wat hier staat door iedereen herkend wordt als wat je min of meer op school leerde over het schrijven van een opstel, of in je werk over een memo. Betekent dit dat je in COBOL verhalen vertelt en niet 'echt' programmeert? Nee, het betekent dat je verhalen vertelt en dat dat ook echt programmeren is. Net zoals een accountantscontroledossier vullen echt programmeren is. Het grote verschil tussen deze benadering en dat wat de meeste mensen zich voorstellen bij "echt" programmeren, is dat de COBOL-methode uitermate goed aansluit bij de manier waarop niet-programmeurs denken, werken en registreren wat ze doen.
(Terzijde: de logische conclusie is daarmee inderdaad ook dat heel veel accountantswerk geprogrammeerd werk is en dus voor een fors deel door computers gedaan kan worden. Daar is geen briljante moderne AI voor nodig, maar een programmeur die inziet dat een accountantscontroledossier een programma is.)
Terug naar COBOL. Die Divisions die de hoofdstructuur van een programma vormen, zijn in de praktijk over het algemeen altijd de volgende vier, in deze volgorde:
Identification division: In deze divisie wordt voornamelijk informatie opgeslagen over het programma zelf. In de meeste andere programmeertalen ontbreekt zoiets en wordt eventueel een commentaarregel gebruikt. In COBOL moet hier de naam van het programma worden opgenomen en het is ook gebruikelijk de schrijver hier te benoemen.
Wat heeft de computer daar aan? Vrij weinig, eigenlijk is alleen de naam van het programma voor de computer van belang. Maar COBOL richt zich niet in de eerste plaats op wat de computer nodig heeft, maar wat de mens nodig heeft. En identificatie van het programma hoort daar bij.
Environment division: Ook deze divisie is vooral handig voor mensen. Hier leg je iets vast over de context waarin het programma werkt. Bijvoorbeeld: op welke computer is het programma geschreven en voor welke computer? Daar heeft de computer zelf weer niets aan en daarom is deze hele divisie zelfs niet verplicht in COBOL, maar het is wel degelijk handig deze toch te vullen. Tegen de tijd dat een programma bijvoorbeeld van een S/370 moet worden omgezet naar een AS/400, wil je graag weten dat je programma wel eens wat specifieke eigenaardigheden van die S/370 in zich kan herbergen.
Data division: In deze divisie komen zaken aan bod die voor de computer essentieel zijn. Hier beschrijf je alles wat je aan data gaat gebruiken. In de simpelste vorm betekent dat, dat je hier de variabelen benoemt, hun type aangeeft en hun format. COBOL doet dat op een manier die nogal afwijkt van wat in de meeste andere talen gebeurt, maar grappig genoeg op een manier die accountants wel zullen herkennen. Het is namelijk de manier die ook Microsoft Excel gebruikt.
Procedure division: Tenslotte beschrijft deze divisie alles wat het programma moet doen. Alle te nemen stappen, de acties die met de data moeten worden uitgevoerd, ze zijn in deze divisie beschreven.
In de volgende afleveringen zal ik de verschillende divisies meer in detail bespreken en zullen we dus ook zien welke secties zoal gebruikt kunnen, of moeten, worden.
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
Omgeving: de configuratie
Arnout van Kempen over rommelen in een digitale wereld.
Identificatie
Arnout van Kempen over rommelen in een digitale wereld.
AI? Hou op! COBOL!!
Arnout van Kempen over rommelen in een digitale wereld.
Commandeur Grace Hopper
Arnout van Kempen over rommelen in een digitale wereld.
Wat is het verschil tussen een computer en pen en papier?
Arnout van Kempen over rommelen in een digitale wereld.