Kend din historie, softwareudvikler!

Softwareindustrien er et meget ungt erhverv med mange unge softwareudviklere. Hvis man spørger en stor gruppe softwareudviklere hvornår de for første gang programmerede et lille stykke software (enten som barn, teenager eller som voksen), så vil de fleste svare mellem 5-30 år siden. Der findes altså kun ganske få softwareudviklere, der startede med at programmere for mere end 35 år siden.

På verdensplan fordobles antallet af softwareudviklere på 5-10 år. Så der vil kommer mange nye, unge softwareudviklere til, der har brug for at kende deres professions baggrund og historie. De unge mangler erfaring og modenhed, og de har brug for rollemodeller, nogle til at guide dem og lære dem nye ting (ud over hvad de har lært på uddannelserne). De har brug for at kende softwareindustriens historie, programmeringssprogenes historie og specielt hvem der var vores pionerer.

Der mangler i den grad bøger, der beskriver datalogiens historie (måske er det engelske ord computer science et bedre ord i denne sammenhæng). De bøger skal skrives snart, så vi ikke glemmer hvem der opfandt hvad og hvorfor. Men også for ar oplære nye inden for feltet.

Alle de programmeringssprog, der findes i dag, kan spores tilbage til 60’erne og 70’erne. Det objektorienteret programmeringsparadigme blev opfundet i 60’erne af Kristen Nygaard og Ole-Johan Dahl, begge fra Norge. De to gutter var godt trætte af de programmeringssprog, der fandtes på daværende tidspunkt, og nærmest ved et tilfælde opfandt de OO. Så objektorientering er ikke noget nyt fænomen.

Programmeringssproget C og Pascal blev opfundet i starten af 70’erne, og det gjorde Prolog (det første logiske programmeringssprog) også. De funktionelle programmeringssprog som ML og Scheme blev også opfundet i starten af 70’erne. Bjarne Stroupstrup var træt af de programmeringssprog, han havde til rådighed, hvilket medførte at han opfandt C++ i 1979. I øvrigt er C++ stærkt inspireret af Simula (som blev opfundet i 60’erne).

Så der skete rigtig meget i 60’erne og 70’erne inden for programmeringssprog, og det skyldes især at computeren blev mere og mere udbredt på universiteterne.

Java blev opfundet af James Gosling i 1994, idet han var træt af C++ og syntes der var for mange kilder til mulige fejl når man programmerede i C og C++.

Microsofts C# er stort set en kopi af Java (man kan skrive C# kode der, linje for linje, ligner Java kode på en prik), så der er ikke opfundet noget nyt og revolutionerende med C#.

Ruby, et af de nye, dynamisk typede programmeringssprog, er kraftigt inspireret af Smalltalk.

Agil softwareudvikling er heller ikke noget nyt koncept, og har eksisteret længe inden vandfaldsmodellen blev populær. Både NASA og IBM har i 70’erne og 80’erne udviklet software med korte sprints på typisk 1 dag, idet mennesker arbejder bare bedst med hurtige feedback loops.

Alle de store programmeringsparadigmer (objektorienteret, imperativt, funktionelt, logisk) og de dertil hørende programmeringssprog blev opfundet for omkring 45-50 år siden, og der er stort set ikke blevet opfundet noget nyt siden da !!!

Hvis man kunne tage en programmør, der levede i 1970, putte hende i en tidsmaskine og få hende frem til 2014, så ville hun kunne sætte sig ned foran en computer og begynde at programmere uden de store vanskeligheder. Det samme gælder omvendt: hvis en programmør fra nutiden bliver sendt tilbage til fortiden, til fx 1965, vil hun uden videre kunne begynde at programmere.

Det store spørgsmål er hvorfor der ikke er udviklet nye programmeringssprog de sidste 20 år (her tænker jeg fra dengang Java blev opfundet i 1994 og til i dag)? Vil der blive opfundet nye paradigmer og helt nye sprog, der adskiller sig markant fra de nuværende? Er det hardwaren, der er skyld i det? Altså fordi hardwaren ikke har udviklet sig markant (ud over at vi har fået meget hurtigere og mindre enheder)?

3 comments for “Kend din historie, softwareudvikler!

  1. Ligesåvel som C# ikke “opfandt” noget nyt så gjorde Gosling det vel i grunden heller ikke med Java? Garbage-collection og JITing blev opfundet tilbage i slutningen af 50’erne og 1960’erne da McCathy implementerede LISP og der er rigeligt med andre eksempler på GC’ede sprog inden Java. Så du skal vel i grunden tidligere tilbage for at finde nye sprog hvis din definition af nye sprog er at de skal komme med nye hidtil ukendte features.

    Med hensyn til hvorfor der ikke er blevet udviklet så meget totalt nyt de sidste mange år et godt spørgsmål – måske er det gode idéer givet vores hardware forudsætninger bare taget?

    Det der dog er hver at nævne i denne diskussion er at flere og flere features som tidligere hørte til hvad den almindelige programmør ville betragte som esoteriske sprog begynder at sprede sig til mere og mere mainstream sprog. Ethvert moderne sprog med respekt for sig selv har lambdas og closures (selv Java og C++!) hvilket ellers tidligere kun var kendt fra LISP og primært funktionelle sprog. Forskellige concurrency-modeller der adskiller sig fra system-tråds tankegangen begynder også at sprede sig gennem sprog som Go og Erlang omend de nok stadig også må betragtes som værende esoteriske for de fleste udviklere.

    Hvis der skal nævnes et par ting som jeg ville betragte som strickly nye de seneste 7 år så må det være async/await funktionaliteten som findes i C# og som første gang var at se i F# i 2007. Haskell har så vidt jeg kan se haft lignende muligheder med async Monad siden før 2010 men jeg er ikke klar over hvornår det først var at finde der. Derudover kan F#s Type Providers der giver en typestærk tilgang til dynamisk untyped data og sprog også nævnes som værende noget der er nyt og tidligere ikke set.

    Af de up-and-coming features som vi begynder at se og som nok vil sprede sig til flere sprog hen over tid er gradual typing som det f.eks. kendes fra TypeScript og Typed Clojure. Hidtid har der typisk været en stærk adskillelse mellem statiske og dynamiske sprog men denne bliver efterhånden udvisket med gradual typing.

    Derudover er der meget aktivitetet indenfor dependent types (som godtnok bygger på Haskell Currys arbejde fra 1930’erne) som giver os mulighed for at ligge restriktioner ned over vores typer som afhænger af en værdi. F.eks. at dependent functions som giver statisk compiletime mulighed for at garantere at en funktion der tager en positiv integer f.eks. returnere et array med samme længe som værdien af integeren.

    Så jeg ved ikke om jeg er enige i at programmeringssprog står totalt stille, det er blot mere små iterationer med udbredelse og forfininger som vi ser.

  2. Det er altid sjovt når Ruby bliver kaldt et nyt sprog, og sammenlignes med ting som Java etc.

    “The first public release of Ruby 0.95 was announced on Japanese domestic newsgroups on December 21, 1995”
    “In February 1991, Van Rossum published (labeled version 0.9.0) to alt.sources”
    “Wall began work on Perl in 1987, and released version 1.0 to the comp.sources.misc newsgroup on December 18, 1987.”
    “Lerdorf initially announced the release of PHP/FI on comp.infosystems.www.authoring.cgi on June 8, 1995.”

    Jeg tror ikke rigtigt man kan pege på noget tidspunkt, hvor der ikke har været en rig udvikling af nye sprog, det er blot spørgsmålet om hvor udbredte de blev (for sprog fra 80erne og de tidlige 90ere i høj grad afhængig af hvilken licens de blev udgivet med).

    Lige nu sker der jo fantastisk spændende ting med Dart, Go, Elixir, Rust, og selv de alle sammen på mange måder er Mere Af Det Samme, kan man ikke få for mange sprog!

  3. Jeg vil mene, at Wolfram Language er anderledes nok til at kunne kaldes et nyt sprog. De kalder det selv et ‘knowledge-based language’ og efter at have checket nogle af kodeeksemplerne, så er det faktisk ganske rammende. Det udspringer fra Mathematica, som er et enestående niche-sprog.

    Link:
    http://www.wolfram.com/language/?source=frontpage

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *