Tusenvis av dataspråk er blitt lagd de siste femti årene – men knapt noen så epokegjørende som norske Simula fra 1967.

Simula • Simula er det første objektorienterte programmeringsspråket i verden. • Pionerarbeidet ble utført ved Norsk Regnesentral i årene 1961–1967. • I spissen stod Kristen Nygaard og Ole-Johan Dahl. • Simula introduserte egenskaper som objekter, klasser, subklasser, arv, virtuelle metoder, korutiner og diskret hendelsessimulering. • Prinsippene i Simula er senere tatt i bruk i nær sagt alle moderne programmeringsspråk. • I 1968 ble Ole-Johan Dahl bedt om å søke det første professoratet i det som skulle bli informatikk-faget ved Universitetet i Oslo. Dahl og Nygaard var professorer ved Institutt for informatikk, opprettet i 1977.

Klasse og objekt • Klassene er generelle beskrivelser av begrepene i virkeligheten og i programmet. • Ut fra én slik klasse lages det ett eller flere objekter når programmet utføres. • Et objekt er da en kopi av data og handlinger i klassen. • En klasse kan også få et tillegg, en subklasse.

Det er interessant hvordan et lite forskningsprosjekt – for det meste bestående av bare to personer – kunne lage et programmeringsspråk og et sett av begreper så kraftfulle, at det femti år senere ligger under det meste av programvareutviklingen i verden, forklarer professorene Stein Krogdahl og Arne Maus på Institutt for informatikk ved Universitetet i Oslo.

– De utarbeidet ikke bare et nytt programmeringsspråk, men en helt ny måte å tenke på.

I dag bruker programutviklere over hele verden Simulas metodikk. De modellerer verden slik Kristen Nygaard og Ole-Johan Dahl gjorde for et halvt århundre siden.

– Ja, så forut for sin tid var det de gjorde, at det skulle gå tjue år før de sentrale begrepene de brukte, ble allment forstått, påpeker Krogdahl.

Men hvordan var det mulig å gjøre noe så nyskapende, og hva var egentlig Dahl og Nygaards geniale bidrag? La oss begynne med begynnelsen. Vi skal til Forsvarets forskningsinstitutt på Kjeller utenfor Oslo.

Enorme utregninger

Året er 1948. Den unge studenten Kristen Nygaard er nettopp kommet for å gjøre siviltjenesten sin. Krigen er slutt og Norge satser sterkt på atomforskning. Det voldsomme energipotensialet skal utnyttes til sivilt bruk. På Kjeller er arbeidet i gang med å bygge opp den første norske atomreaktoren.

Nygaard får i oppdrag å regne ut diameter på uranstavene i reaktoren. Denne er avgjørende for å oppnå riktig mengde atomspaltinger, som i neste omgang gir den riktige energiutviklingen. Er diameteren for liten, blir det ingen kjedereaksjon blant nøytronene i det radioaktive uranet, og prosjektet blir en fiasko. Er den for stor, vil en katastrofe skje.

Dette var før de elektroniske datamaskinene, så beregningene måtte stort sett gjøres for hånd. Metoden var å beskrive den fysiske prosessen inne i reaktoren. Forskerne kunne simulere banene og kollisjonene til et stort antall tilfeldige nøytroner og lage statistikk over hvordan disse oppførte seg samlet. Dette kaltes gjerne ‘Monte Carlo-simulering’ siden tilfeldighet spiller en viktig rolle i metoden.

Etter hvert sitter seks-sju mennesker og regner på slike nøytronbaner i flere måneder på fulltid. De regnet åpenbart riktig. Reaktoren virker som den skal da den skrus på i 1951.

Det var på denne tiden, da de aller første datamaskinene begynte å komme, at Nygaard kjente behovet for en egen notasjon, eller et ‘språk’ som, på en mer overordnet måte, både kunne beskrive slike simuleringer på en måte som var lettere å forstå for mennesker, og også slik at maskiner kunne utføre dem rett ut fra beskrivelsen.

Simulere virkeligheten

Året er blitt 1960. Kristen Nygaard er forskningssjef på det nyetablerte forskningsinstituttet Norsk Regnesentral – og overtaler vennen og kollegaen, Ole-Johan Dahl, til å følge med. Nygard er systemteoretikeren. Dahl er blant de aller fremste programmererne og behersker til fulle alle de detaljer dette innebar den gangen. Sammen skulle de komme til å sprenge grenser.

Samarbeidet bar raskt frukt. I 1961 innledet de et formelt samarbeid om et slikt simuleringsspråk som Kristen så for seg. Allerede i 1962 var skissen klar til et språk de kalte Simula (forkortelse for SIMUlation LAnguage). Dette språket, nå ofte referert til som Simula 0, presenterte de på en konferanse i München samme år. Men Nygaard og Dahl fikk snart nye ideer, og denne første versjonen ble derfor aldri implementert.

Tanken var opprinnelig at Simula skulle bygge på det nylig etablerte språket Algol 60, utviklet i Europa. Men det viste seg at ved å bryte kraftigere med den grunnleggende filosofien bak dette språk-et, noe som blant annet hadde med lagringsplass å gjøre, så kunne en oppnå et mye mer fleksibelt språk. På dette grunnlaget utformet de så et mer generelt språk for simulering. Det var ferdig implementert og klart til bruk i januar 1965 – Simula I.

Det skulle vise seg å være et ypperlig verktøy for å beskrive, både for mennesker og maskiner, hvordan en simulering skulle foretas – men språket var også helt rettet mot slike beskrivelser. Stein Krogdahl forklarer:

– Det nye språket kunne greit beskrive virkelige situasjoner og hendelser, som jo ofte er temmelig komplekse – som systemer med mange komponenter i kompliserte samspill. Samtidig kunne altså et kompilatorprogram oversette en slik beskrivelse til maskinkode som automatisk kunne utføre simuleringen som den beskrev.

I 1963 skjedde noe viktig: Da fikk Norsk Regnesentral kjøpt den amerikanske stormaskinen Univac 1107 – den nest mest avanserte datamaskinen i hele Europa, og de fikk også penger til å implementere Simula 1 på denne maskinen.

Gjennombruddet – Simula 67

Simula 1 var altså et rent simuleringsspråk, og når kompilatoren for dette var klar i januar 1965, ble språket tatt i bruk til simuleringsoppgaver, både ved Regnesentralen selv og av andre rundt omkring i verden.

– Disse erfaringene, og også viktige impulser utenfra, gjorde det snart klart at ideene fra Simula 1 kunne generaliseres og ikke minst: danne grunnlag for et språk rettet mot programmeringsoppgaver generelt, ikke bare simuleringsoppgaver. Utover høsten arbeidet de to forskerne hardt, og rundt årsskiftet begynte brikkene å falle på plass.

Kristen Nygaard forteller selv mange år senere:

«Jeg husker veldig, veldig klart, akkurat øyeblikket, rundt klokka to om natta ved skrivebordet på soverommet på Nesodden, i januar 1967, da begrepet «nedarving» (eller klasse og subklasse) ble skapt. Jeg skjønte med én gang at dette var løsningen på et viktig problem som Ole-Johan Dahl og jeg hadde kjempet med i måneder og uker. Jeg innså også at løsningen for første gang i et programmeringsspråk innførte en sterk og fleksibel versjon av forestillingene om generalisering og spesialisering, med all kraften som ligger i disse begrepene. Og sant nok; nedarving har blitt nøkkelbegrepet i objektorientert programmering, og dermed i programmering generelt.»

En konferanse om simuleringsspråk skulle holdes på Lysebu i Oslo i mai. Dahl og Nygaard arbeidet desperat. De utforsket og testet de nye begrepene. Forskerne kom i mål. De hadde greid å lage et konsistent språk med alle de nye aspektene, og de sentrale blant disse – klasser, subklasser og dynamisk genererte objekter av disse. De fikk en artikkel ferdig akkurat i tide til konferansen.

Verden inn i datamaskinen

Hva var det så som var så banebrytende ved det å tenke i disse begrepene når en skal skrive store og komplekse programmer?

– Vi tenker jo om datamaskiner at de først og fremst kan gjøre noe, som for eksempel å utføre et stort antall regneoperasjoner på kort tid. Men dermed kommer dataene vi skal gjøre noe med, mer i bakgrunnen, påpeker Krogdahl.

Med Simula-språkene kom det en helt annen symmetri inn i dette. Det var problemstillinger fra simulering som fikk fordelen med dette fram i lyset.

– Innen slik programmering blir det nå plutselig helt opplagt: Vi må sette opp en verden av ymse typer elementer for å få til en fornuftig arena som simuleringen kan utspille seg i. Disse elementene er av forskjellige typer eller klasser, og disse igjen vil forholde seg til hverandre på spesielle måter.

– Hvordan ting skal skje i denne verdenen, vil vi da ofte vente med å beskrive til det meste av denne ‘datastrukturen’ er på plass. Da vil det ofte være naturlig å knytte de forskjellige aksjonene til bestemte objekter, og så tenke at det er disse objektene selv som utfører aksjonene. En bil kan «starte», «svinge» eller «stoppe», og en kunde kan «stille seg i en kø» eller «bli ekspedert ved skranken».

– Dahl og Nygaard hadde innsett at denne symmetrien mellom data og aksjoner også i høyeste grad var fruktbar for programmering generelt. Ja, at det sågar kan være en fordel å sette opp datastrukturene først, for så etterpå å beskrive det som skal gjøres og avgjøre hvem som skal gjøre hva. Dette kan vi si danner grunntanken i såkalt objektorientert programmering, påpeker Krogdahl.

Artikkelen ble først publisert i Apollon.