COBOL en realistisch rekenen

COBOL is een programmeertaal. De letters staan voor COmmon Business Orientated Language. Het is een van de eerste programmeertalen die bestond uit min of meer begrijpelijk opdrachten in plaats van de destijds gebruikelijke assembler of machinetaal.
Mijn kennismaking met COBOL stamt uit de tweede helft van de jaren 80. COBOL was toen 20 jaar oud en ik kende al veel geavanceerdere programmeertalen. Maar om redenen die buiten het bestek van deze blog gaan, moest en wilde ik COBOL leren.

Ik ben de precieze syntax van de taal kwijt, maar er staan me opdrachten bij als:

ADD BTW TO PRICE.
en
MULTIPLY PRICE BY 1,09.

Is het niet gemakkelijk: er komt geen wiskundige formule aan te pas. Veel en veel simpeler als de Pascal alternatieven:

price := price+btw;
en
price := 1.09*price;

Ik had destijds de indruk dat men bij het ontwerp van COBOL veel aandacht had besteed aan het vermijden van wiskundige, algebraische operaties.

Maar dat heeft zn prijs. Het sommetje hoeft maar iets ingewikkelder te worden en met gewone taal, of COBOL taal, red je het niet meer. Een eenvoudige rente op rente formule wordt al snel te lastig, terwijl het in de wiskundige schrijfwijze een fluitje van een cent blijft.

Vanwaar nu deze trip to memory lane op dit onderwijs forum? De reden is eenvoudig de overeenkomst tussen realistisch rekenen en het ontwerp van COBOL. Beide doen enorm veel moeite om efficiënte algebra te vermijden en bij beiden wordt het er daardoor niet beter op. Het gaat er om een taal te kiezen die je probleem of je oplossing zo goed mogelijk beschrijft. Daar waar het gaat om wiskundige zaken is er maar één taal die je daarvoor kunt overwegen: wiskunde. Die wiskunde taal is op Darwineske manier tot stand gekomen en “the fittest” (beide betekenissen) gebleken, universeel over vele domeinen en globaal in ruimtelijke zin. Om in plaats daarvan zelfbedachte notaties en methoden te kiezen (kolomsgewijs optellen bv), of te lang te blijven hangen aan natuurlijke taal (Nederlands) maakt dat die problemen en die oplossingen moeilijker worden.

Elders op dit forum heeft Joao een prachtig voorbeeld gegeven uit de lespraktijk van een basisschoolleerkracht.

Net als op realistisch rekenen is er ook kritiek op COBOL. Edsgar Dijkstra, de beroemde Nederlandse informaticus verwoordde het ooit zo:
“The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence.”

I plead guilty your honor: I tought COBOL as well as RR ;-). Doe nu wel mn best om het goed te maken.

7 Reacties

  1. Nostalgie
    Cobol was het jongere broertje van Algol. Het werd ontworpen voor niet-nerds in de boekhouderij die de strenge syntax van het Algol boven de pet ging.
    Kennelijk is rekenen in de commerciele wereld van een heel andere orde dan de gebruikelijke algebra.

  2. Inzake het veelgesmade COBOL
    Ik heb zelf zowel ALGOL als COBOL geleerd; het een was beslist niet moeilijker dan het ander. De reden dat COBOL zo wijdverbreid was (en welllicht bestaan er hier of daar nog wel lopende COBOL-applicaties) heeft met andere dingen te maken dan wat 1945 noemt. In de jaren tachtig (en wellicht al eerder ook al) bestond in COBOL het statement ‘COMPUTE’, waarmee je alle bewerkingen uit ‘meneer van Dalen’ op een keurig wiskundige manier kon aangeven. Zodra het ook maar even ingewikkeld werd gebruikten wij dat ook.
    COBOL was niet speciaal een taal die geschikt was voor de zakenwereld, wat de naam suggereert, maar een die geschikt was voor administratie in het algemeen. De reden voor zijn populariteit ligt niet zozeer in de sfeer van het rekenen, maar in de facilitering van het werken met ‘records’, oftewel gegevensstructuren. Bestanden en records vormden en vormen het hart van elke computeradministratie; COBOL was destijds het geschiktste om dergelijke bestanden te lezen en te manipuleren. Het eigenlijke rekenwerk, als dat al nodig was, speelde een volstrekt ondergeschikte rol.

    • Met respect voor al je
      Met respect voor al je houtsnijdende reacties hier, 1945, wil ik toch kwijt dat ik het vergelijken Cobol en RR van een hoog ‘appels-en-peren’-gehalte vind.
      De uitleg van Bernard is, naar mijn beste weten, correct: Cobol faciliteert vooral invoer/uitvoer in de administratieve omgeving (simpel rekenwerk). Voor het ‘betere’ rekenwerk was daarvoor reeds Fortran bedacht, dat veel minder bruikbaar is voor het werk waarvoor Cobol ontworpen is.
      De verschillende programmeertalen hadden (hebben?) alles te maken met ‘verhoging van de productiviteit’ in het bijbehorende domein. Ik meen mij te herinneren dat een maatstaf voor de hoogte van de productiviteit het aantal correcte regels programmacode per tijdseenheid was. Dat aantal bleek onafhankelijk te zijn van de gebruikte programmeertaal.
      Aanvullend:
      Algol 60 was het ‘gestructureerde’ Europese antwoord op het ‘ongestructureerde’ Fortran.
      Voor de liefhebbers: De manuscripten van Edsger W Dijkstra zijn hier te bekijken.

      • Klopt
        Niet elke vergelijking is inderdaad geheel raak. En jullie hebben gelijk: er is een compute statement in COBOL en COBOL is inderdaad voor dataverwerking in batchvorm. Wordt overigens (in moderne versie) nog steeds gebruikt.

        Ook de kritiek van Dijkstra was minder gericht op de voorbeelden die ik noemde maar meer op het ongestructureerde karakter van COBOL en het gebruik van het GOTO statement.

        Ik realiseerde me dat toen ik het stukje schreef, maar meen(de?) dat een deel overeenkomst ook als vergelijking te gebruiken is. Ik maakte dat niet expliciet omdat daar een heel uitleg bij zou horen en er dan een verwaterd verhaal staat. Achteraf vraag ik me af of dat verstandig was. Op dit forum kon je niet weg met halve waarheden (halve vergelijkingen). Dát maakt me dag overigens goed.

    • Databeheer
      Bedankt Bernard en Lex voor het opfrissen van mijn geheugen.
      Cobol was inderdaad een taal die gericht was op het beheren van gegevensstructuren en had dBase, een database taal, als nazaat. Dank zij deze voorlopers kunnen nu vlekkeloos allerlei databanken met een computer worden bewerkt. Rekenen met getalgegevens is maar een klein onderdeel van databeheer.

Reacties zijn gesloten.