Sådan blev Danmark en supermagt i programmeringssprog

Regnecentralen. Billedet stammer fra en af de tidlige årsberetninger. Illustration: Dansk Datahistorisk Forening
Hvad er årsagen til, at så mange væsentlige programmeringssprog har danske rødder? Version2 har set på sagen.

At nogle af de bedste og mest succesfulde designere af programmeringssprog kommer fra et land med blot 5,7 millioner indbyggere er noget, vi som danskere bør være stolte af.

Det er nemlig en række danskere, der står bag nogle af de mest udbredte og anvendte programmeringssprog og miljøer i verden: C++, C#, Ruby on Rails, PHP og Typescript.

Foruden de nævnte sprog har danskere været med til at lægge fundamentet for væsentlige sprogkonstruktioner i sprog som Java og Rust, ligesom danskere har været med til at speede eksekveringsplatformen for Javascript væsentligt op.

Iført en dannebrogsflagrende stolthed forsøger Version2 at indkredse, hvad der egentlig er årsagen til den ejendommelige situation, at et lille land har haft så uforholdsmæssigt stor indflydelse på den digitale verdens væsentligste værktøj: programmeringssprog.

Ildsjælen og Regnecentralen

Peter Sestoft, professor på IT-Universitetet i København, forsker selv i programmeringssprog og er ofte blevet spurgt af kollegaer om det danske mysterium.

»Der var en amerikansk kollega, der spurgte, om der var noget særligt i vandet i Danmark, siden der er så mange, der laver noget godt indenfor programmeringssprog,« siger Peter Sestoft.

Det er dog ikke i det danske grundvand, at vi skal finde svaret, men mere i den historiske baggrund for programmeringssprog. I modsætning til en compiler, der skal levere en entydig oversættelse af en sprogkonstruktion, så er forklaringen på den danske succes dog lidt mere tvetydig.

Der er ikke en enkelt årsag, men mere et samspil af omstændigheder. Peter Sestoft sporer dog begyndelsen tilbage til den afdøde datalogi-professor Peter Naur og Regnecentralen.

»Det er svært at sige, præcist hvad der er årsagen, men der er ingen tvivl om, at Peter Naur har haft en væsentlig rolle, i kraft af at han spillede en central rolle i udviklingen af programmeringssproget ALGOL. Vi skal også tilbage til Regnecentralen, der lavede de første danske computere,« siger Peter Sestoft.

Regnecentralen blev stiftet i 1955 med støtte fra Marshallplanen på 900.000 kroner, og det var Regnecentralen, som stod bag de første danske datamaskiner som Gier og DASK.

Peter Naur kom med i en international komité der var i gang med at udvikle programmeringssproget ALGOrithmic Language (ALGOL), der kunne anvendes på forskellige typer datamater, hvilket var banebrydende på det tidspunkt.

Peter Naur kastede sig med ildhu ind i arbejdet med at specificere sproget og blev redaktør for den banebrydende ALGOL60-rapport fra 1960. Efterfølgende udviklede han sammen med Jørn Jensen ALGOL-compilere til de to danske datamater DASK og GIER.

»Regnecentralen spillede en central rolle, da det var det sted i Skandinavien, hvor man først implementerede oversættere. Programmeringssprogsforskning i Skandinavien var stærkt påvirket af København,« siger Peter Sestoft.

ALGOL over Simula til C++ med øl

Det gjaldt eksempelvis nordmændene Ole-Johan Dahl og Kristen Nygaard, der udvidede ALGOL 60 med nye koncepter som klasser, objekter og nedarvning. Med andre ord et objektorienteret sprog.

Nordmændene arbejdede sammen med Aarhus Universitet, hvor manden bag C++, Bjarne Stroustrup, senere studerede datalogi. Her blev han introduceret til Simula, som han syntes var et fantastisk sprog, men Simula-programmerne kørte forfærdeligt langsomt.

Som Stroustrup tidligere har fortalt til Version2’s journalist:

»Klassekonceptet gjorde det muligt for mig at mappe systemkoncepter til sprogkonstruktioner på en direkte måde, der gjorde min kode mere læsbar, end jeg havde set i noget andet sprog. Der var dog en væsentlig begrænsning ved Simula. Performance var en katastrofe.«

Det hjalp også med til den unge Bjarne Stroustrups indsigt i Simula og objektorientering, at Kristen Nygaard var gæsteprofessor på Aarhus Universitet i starten af 1970'erne.

»Han boede i gæstelejligheden på loftet af den gamle datalogibygning i Ny Munkegade. Mit kontor var lige ved trappen, så når Kristen ankom, råbte han til mig, at jeg skulle finde nogle studenter og noget øl. Det gjorde jeg, og så snakkede vi – det vil sige Kristen snakkede, og vi lyttede,« fortalte Bjarne Stroustrup om inspirationen og baggrunden for udviklingen af C++.

Den naurske ånd fra Regnecentralen til universiteterne

Det er ikke kun for udviklingen af C++, at personlige bekendtskaber har haft betydning. En række af Regnecentralens folk kom i løbet af årene ud på de danske universiteter, hvor faget datalogi blev etableret.

Professor Peter Naur i 2008. Illustration: Eriktj/Wikimedia

Peter Sestoft remser en række vigtige personer fra Regnecentralen op i den forbindelse.

Bjarne Svejgaard som blev professor på Aarhus Universitet, Christian Gram blev professor på DTU, Per Brinch Hansen, som først var mange år i USA og derefter kom til Datalogisk Institut på Københavns Universitet, og Søren Lauesen, der har været professor på Københavns Universitet, CBS og IT-Universitetet.

»Mange af de folk så op til Peter Naur, og selvom de ikke alle er compiler-udviklere, så har de medbragt noget af den ånd,« siger Peter Sestoft.

Som ringe i vandet spredte den naurske ånd sig ud til de danske universiteter, og der blev etableret en solid dansk tradition for forskning i programmeringssprog.

En stor bidragsyder til den tradition har været DTU, hvor Dines Bjørner og Hans Bruun har spillet en væsentlig rolle for compiler-teknologi i årevis. De har begge været involveret i formel specifikation og Vienna Development Method (VDM), som blev udviklet sammen med IBM.

»Det har været med til at gøre den slags specifikationssprog til en dansk specialitet,« forklarer Peter Sestoft og nævner, at DTU-arbejdet blandt andet førte til, at den første validerede oversætter for Ada udenfor USA blev lavet i København af ansatte og studerende fra DTU på Dansk Datamatik Center (https://en.wikipedia.org/wiki/Dansk_Datamatik_Center ).

Hejlsberg: Danmark har altid været villig til at investere i uddannelse

Et fyrtårn når det gælder design og implementering af programmeringssprog, er Anders Hejlsberg, der også studerede på DTU. Efterfølgende har han stået bag Poly-Pascal, Turbo-Pascal, Delphi, C# og Typescript.

»Han kommer ikke direkte fra Peter Naur eller DIKUs indflydelsessfære, men han har et fantastisk talent for sprogdesign,« siger Peter Sestoft om den mange-programmeringssprogede dansker.

Læs også: Hejlsberg: Multiparadigme er det nye paradigme

Hejlsberg har selv tidligere har fremhævet Danmarks uddannelsesniveau og peget på Regnecentralens indflydelse.

»Vi havde vores egen EDB-industri fra starten af. Vores egen kultur omkring det,« har Anders Hejlsberg sagt ifølge denne fortælling hos DR, hvor han videre er citeret for:

»Men måske kan man sammenstille det med, at vi i Danmark altid har været villige til at investere i uddannelse.«

Udbredelsen af teknologi var med fra fødslen af dansk it. Eksempelvis skrev Christian Andersen fra Regnecentralen en lærebog om ALGOL kaldet 'DASK ALGOL for skole og hjem' i 1961.

»Titlen var lidt af en joke, da der på det tidspunkt eksisterede én maskine, og der ikke var nogen mulighed for at programmere ALGOL i hverken skole eller hjem. Men der var allerede på det tidspunkt i Regnecentralen en holdning om, at det her var noget, som skulle udbredes overalt, ikke bare i andre videnskabsgrene, men i befolkningen generelt,« siger Peter Sestoft.

Du kan læse om baggrunden for den bog med Christian Andersens egne ord her.

Beta som inspiration for Java og C

Krydsfertiliseringen af ideer og sprogkonstruktioner fortsatte på Aarhus Universitet, hvor Kristen Nygaard sammen med Bent Bruun Kristensen, Ole Lehrmann Madsen og Birger Møller-Pedersen udviklede sproget Beta.

»Det er ikke et særligt udbredt sprog, men et forskningssprog, der har haft indflydelse på designet af Java og senere hen C#,« forklarer Peter Sestoft.

Den indflydelse kom blandt andet fra en anden dansk sprogdesigner Mads Torgersen som studerede på Aarhus Universitet i 1990'erne, hvor han inspireret af Beta-sproget udviklede Javas generiske typer i form af wildcards.

Ligesom Anders Hejlsberg er Mads Torgersen i dag ansat hos Microsoft, hvor han er programansvarlig for C#-sproget og også deltager i designet af Typescript og Visual Basic.

Læs også: Nej til null: Her er nyhederne i C# 8

Det er også værd at nævne det aarhusianske makkerpar Lars Bak og Kasper Lund, som blandt andet stod bag Chromes epokegørende Javascript-engine V8, der formåede at speede javascript-eksekveringen i browsere op.

Makkerparret stod også bag scriptsproget Dart, der dog ikke har formået at få den samme succes som C#, C++, Typescript eller andre programmeringssprog med danske aner. Sproget spiller dog en rolle i Googles Android-miljø Flutter, der har førnævnte Kasper Lund som medskaber.

Læs også: Her kommer Flutter - Googles nye mobil-system fra Aarhus

Vi har programmeringssprog nok

Ser man på nyere sprog som Swift og Rust, havde Version2’s journalist den vildfarelse, at der ikke var nogen dansk indflydelse, men Rust har faktisk en væsentlig dansk indflydelse. Nemlig fra Mads Tofte, der blandt andet er tidligere rektor på ITU.

»Et af de centrale koncepter i Rust kommer fra Mads Tofte. Region inference, som er programanalyse og hukommelsesadministration, udviklede han sammen med Jean-Pierre Talpin,« siger Peter Sestoft og fortsætter:

»Mads Tofte lavede den første implementering i MLKit og så kom Bit-C og Cyclone fra USA. Det er døde projekter i dag, men Rust er inspireret af Cyclone, selv om den præcise mekanisme til hukommelsesadministration er lidt anderledes,« siger Peter Sestoft.

Læs også: Microsoft: Rust kan løse hukommelsesproblemer i C og C++

Med hensyn til Swift har Peter Sestoft ikke mange positive ord set fra en sprogdesignmæssig vinkel, og han ser Apples app-udviklingssprog som et eksempel på programmeringssprog, som ikke bidrager med noget nyt.

»Jeg havde nær sagt, at jeg håber, der ikke kommer flere sprog. Der har ikke været meget dybsindig innovation de seneste år. Swift er en overflødig innovation. Apple kunne lige så godt have anvendt C#, hvis det ikke handlede om licenspolitikker og forretningsmodeller,« siger Peter Sestoft.

Han vil dog ikke afvise, at der kan komme programmeringssprog med radikale forbedringer fremover.

»Jeg skal ikke kunne sige, om der kommer nogle radikale forbedringer, men jeg tror, mange skridt er taget med Erlang, Scheme og Haskell. Scala er et godt ægteskab mellem funktionsprogrammering og objektorientering, men til gengæld er Scala vanvittigt komplekst med et afsindig indviklet typesystem,« siger Sestoft og tilføjer:

»Der er man nok nødt til at gå tilbage til ideer om dependent types. Der findes sprog som Agda og Idris, der gør det, men de er ret akademiske. Det stammer fra konstruktiv typeteori, der er en ret teoretisk affære, men der har vi en helt ny slags typesystem, som Scalas og Haskells efterfølgere måske skal baseres på, så det er bestemt ikke sådan, at vi er færdige med sprogudviklingen.«

Mon der vil være danskere involveret i den udvikling?

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (22)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Marcel Buttrup

...hvis nogen skulle være i tvivl. (Lidt off topic)
Jeg ved ikke hvorfra Peter Naur arvede sin, men min søn kom i en længere periode sammen med hans barnebarn. Hold da helt k... hvor var hun skrap!
Desværre havde min søn kun arvet min :-) så det holdt ikke i længden.

  • 7
  • 1
Frithiof Andreas Jensen

Hvis vandet gör en forskel så skyldes det mere hvad der IKKE er i vandet i Danmark.

Forfärdeligt mange steder i USA er drikkevandet forurenet.

Blandt andet med bly fra old-gamle vandrör som man ikke har "råd" til at skifte ud (formodentligt fordi problemet findes der hvor de fattige bor).

Bly i barndommen koster en 10-15 point på intelligensskalaen, oveni livslange problemer med impulskontrol og planlägning.

  • 3
  • 1
Karl Johan Simonsen

Hvis man gerne vil genopfriske gamle dage med Simula eller ALGOL60 så kan man bruge CIM compileren. Den vigtigste forskel mellem Simula og ALGOL60 er default parameteroverførsel til procedurekald.
ALGOL60 valgte call-by-name som skal specificeres explicet i Simula.
Call-by-name bør kun bruges hvor det virkelig udnyttes. "Jensens device" er noget speciel, men programpakken SAFEIO er et godt eksempel som vanskeligt kan laves uden call-by-name.
GUI programmering i Simula behøver ikke et GUI-framework men man kan starte med et hovedprogram der danner vinduer med indhold og agerer på brugerens interaktion.

  • 1
  • 0
Mikkel Løkke

At sige at C++ har "rod i Danmark", når det blev udviklet på Cambridge Universitet, og har rødder i C og Simula, for ikke at nævne at Anders Hejlsberg's forskellige Pascal dialekter står som selvstændige sprog til trods for at de blev udviklet hos Borland og Micrsoft henholdsvis, og naturligvis har rødder i Pascal, og derfor har norske "rødder". Så er der Ruby on Rails som ikke er et programmeringssprog., hvis vi bare skal tælle software som er udviklet af folk som er født i Danmark fuldstændigt ukritisk, synes jeg at PHK's Varnish mangler fra listen, eller Rune Gram-Madsen's ASM-One.

  • 1
  • 5
Jacob de Meza

Swift er en overflødig innovation. Apple kunne lige så godt have anvendt C#, hvis det ikke handlede om licenspolitikker og forretningsmodeller

Det er sikkert ikke helt forkert, men spøjst at benytte C# i sammenligningen.

Spol tiden tilbage og udskift "Apple" med "Microsoft" og "C#" med "Java".
Alle der kender historien ved at Microsoft på daværende tidspunkt ikke opfandt et nyt sprog som C# for at være innovative, udelukkende for at fremme egen forretning.

  • 3
  • 0
René Schalburg

Datalogi i århus har faktisk lavet endnu to (eller flere) specielle sprog til undervisningen (se f.eks. http://skema.secretman.dk/mesterdatalogen/trine.html).

Det første AKA, fik vi dengang beskrevet som "så smukt at man er NØDT til at programmere ordentligt" - så kunne vi lære det.
Det andet Trine, kender jeg ikke så godt, men da det var mere rigt og komplekst, var det væsentligt svære at lære og man kunne godt komme til at lave nogen unoder...

  • 0
  • 0
Louise Klint

Det er spændende læsning, tak.

Det er også et prægtigt foto, hvad.
Det er ikke altid arkitektur og indhold passer så godt sammen.

Jeg vidste slet ikke, at Regnecentralen havde ligget dér.
Nogle der ved indtil hvornår?
(Periode, årstal? Kan finde adresser i Præstø, Valby/Bjerregårdsvej 5, Ballerup, Glostrup + div. service).

”På 5. sal i Rialto-bygningen” ...
(Vedr. oprettelse af RC4000 softwareudviklingsafdeling, 1967. Hvor de blandt andet skal beskæftige sig med projekter som ”Flydende regning”.
”Afdelingens arbejdsopgave skønnes afviklet over 2 ½ - 3 kalenderår” ...?)
http://datamuseum.dk/site_dk/rc/pbh/SoftwareGroup.pdf
Men ”Rialtoafdelingen” har ligget der endnu før (1963):
http://datamuseum.dk/site_dk/rc/pbh/Ansaettelsesbrev.pdf

Det er Rialto-bygningen på Frederiksberg.
Falkonér Allé 1-5 (du kan se på foto og fortsat rundt om hjørnet ad Smallegade).

En biograf-, kontor-, butik- og boligbebyggelse fra 1964 med Rialto Teatret.
Tegnet af (”velfærds”-)arkitekten Svenn Eske Kristensen (1905-2000):
https://da.wikipedia.org/wiki/Svenn_Eske_Kristensen
https://slks.dk/fileadmin/user_upload/kulturarv/publikationer/emneopdelt...

Jeg kan godt lide, at gå over den lille fodgængerovergang dér. Se facaden, der rejser sig op, knejsende. Der er en masse halløj på bygningen nu, ud mod gaden. Ikke mindst butikkerne i bunden, derfor er det godt at gå på samme side, ”ind under” bygningen, hvis man skal den vej forbi. Det er da meget godt at tænke på, at Regnecentralen har ligget dér engang :)

  • 0
  • 0
Jarnis Bertelsen

Der har været meget lidt udvikling af sprog som minimerer programmerings fejl og konsekvensen af hardware fejl.
Det undrer i betragtning af hvor mange fejl der er i programmer.


Mange af de forskele der er på sprog som Java og C# i forhold til fx C, er netop forsøg på at eliminere ofte sete fejl. Med C var fx pointeraritmetik notorisk svært, og array overløb nemt at komme til at lave. Disse problemer er elimineret i C# og Java.
Et af de tilbagevendende problemer i Java-programmer er null-pointer problemer. Det har fx Kotlin og Swift forsøgt at eliminere ved at tvinge programmøren til at tage stilling.
Mht. konsekvensen af hardware fejl, er jeg lidt i tvivl om, hvad du mener kan gøres. Selvfølgelig kan man, hvis man kan detektere/genkende dem, håndtere visse fejl i hardware, i visse systemer. Jeg har dog svært ved at forestille mig en ensartet måde at håndtere dem på, da det både afhænger af fejltypen og det system den opstår i.

  • 0
  • 0
Torben Mogensen Blogger

Der er gennem tiden blevet udviklet et stort antal programemringssprog i Danmark, men det er de færreste, der har fået stor udbredelse. Mange er kun brugt idenfor et enkelt firma eller et enkelt universitet, men der er undtagelser.

Man kan f.eks. med en vis ret kalde scriptingsprogene for Navision (https://en.wikipedia.org/wiki/C/AL) og Axapta (https://docs.microsoft.com/en-us/dynamicsax-2012/developer/x-language-pr...) for udbredte sprog. Godt nok bruges de kun(?) i sammenhæng med ERP-systemerne, men det gør de til gengæld mange steder.

Andre sprog har ikke endnu den store udbredelse, men det kan komme. Et par eksempler på sådanne "boblere" er:

  • 0
  • 0
Thomas Brodersen

Der er gennem tiden blevet udviklet et stort antal programemringssprog i Danmark, men det er de færreste, der har fået stor udbredelse. Mange er kun brugt idenfor et enkelt firma eller et enkelt universitet

På DIKU skrev vi på et tidspunkt i "M-kode" (tror jeg de kaldte det), et vist nok hjemmeudviklet sprog som vi brugte i undervisningen, da vi lærte om compilere og fortolkere.

  • 0
  • 0
Jacob Gorm Hansen

Det er sludder at naevne AsmOne (som kom fra SEKA og var en assembler og ikke et sprog), Ruby-on-Rails (som er en katastrofe og ikke et sprog), og Varnish (som er noget helt andet) i denne sammenhaeng. Til gengaeld er det vaerd at vide, at TurboPascal faktisk blev udviklet i Danmark, under navnet PolyPascal. I lang tid koebte Borland bare licenser til det og renamede det. Borland paastod, at de havde en mand der som ned fra bjergene med en diskette ind i mellem, men reelt kom manden fra Danmark. Jeg har i min pure og letpaavirkelige ungdom indtaget en del genstande sammen med Preben Madsen, som var direktoer for PolyData, og hoert mange sjove historier om hvordan de vaeltede sig i penge og havde det sjovt dengang i yuppiefirserne, se http://itverden.blogspot.com/2007/09/commodore-64-og-anders-hejlsberg-ns... .

  • 3
  • 0
Jens-peder Vium

Per Brink Hansen udviklede Concurrent Pascal, mens han var professor i Californien. I run-time blev overførsel mellem processer udført ved kopiering af data. Så udviklede RECAU (= Regionale Center på Aarhus Universitet, hvis forste leder var Bjarner Svejstrup) et sprogvariant, de kaldte Platon. I run-time blev data overført ved at man alene overførte descriptoren til data. RC udviklede så RC 3500 computeren/Controlleren med Bent Skarø (= Designeren af DASK). RC 3500 havde 32 registersæt og to typer RAM-lager, et der kunne indeholde program og data og et andet, der kun kunne indeholde data.
Jeg var medarbejder på Regnecentralen i Aahus fra 1969 til 1979.

  • 1
  • 0
Nicolaj Rosing

Når vi nu alligevel er ved de gamle uddøde sprog så synes jeg da at prof. Olaf Kaysers MIRIAM H, M og L som blev benyttet på DIA-B i slut firserne på Supermax terminaler koblet op på UNI C , (det tidligere NEUCC) også lige bør nævnes. Det var faktisk et relativt avanceret sprog der kunne multiplicere matricer på højniveau til løsning af ligninger med flere ubekendte. Langt senere kunne man jo løse samme ligningssystemer med sin HP 15C men kun op til 8x8 matricer. Jeg husker ikke længere hvad grænsen var for MIRIAM men det var mere end 8 rækker.

  • 2
  • 0
Palle Simonsen

Chr. Rovsings Software Engineering Low Level language - SWELL - skal vel også på listen.

Et sprog der, som navnet antyder, bl.a. prøvede at få gjort det lettere at skrive optimerede programmer.

  • 0
  • 0
Log ind eller Opret konto for at kommentere
IT Company Rank
maximize minimize