Intervju med en guru

Litt bakgrunnsinformasjon om Anders Heljsberg
Anders Heljsberg er virkelig et stort navn innenfor utvikling. Han begynte som student i Danmark, men landet ble snart for lite for Anders. Han står blant annet bak utviklingen av Turbo Pascal på 70-tallet. Anders stoppet midlertid ikke der - han jobbet fram til 1996 hos Borland, der han var ansvarlig for utviklingen av Delphi. Da ble han hyret inn av Microsoft, hvor han i dag leder selskapets C#-satsning. Han er også en sentral medarbeider på Microsofts .NET-plattform, og er en av kun 16 ansatte som har fått tittelen "Distinguished engineer".

HWB.no: Jeg tenkte vi kunne starte med et lite blikk inn i fremtiden. Hvilket språk tror du blir ”fremtidens språk”, og hvilke grunner er det til det?

Anders: Jeg vet ikke hvilket det fremtidige språket blir, men jeg vet at det blir fremtidige språk. Det har vært mange språk, og det kommer til å komme mange språk fremover. Noe vi ser i C#-prosjektet er at vi bygger på en rik tradisjon av C og C++. Jeg tror at vi lærer noe nytt for hver runde. Og jeg tror noen av de tingene som det er verdt å lære seg i dag, vil vi se i bruk i fremtiden. For eksempel det å gjøre språkene mer deklarative, og mindre imperative. I dag, når vi skriver programmer, er de veldig imperative. Det er mye snakk om å si ”hvordan du vil ha det gjort”. For å ta et eksempel: ”Ta ”i”, legg til 2, flytt det hit bort”, og så videre. I stedet burde vi snakke om ”hva du vil ha gjort”: Jeg vil ha dette prosessert slik eller slik. I større og større grad vil vi se deklarativ programmering, fordi det er begrenset hvor langt du kan gå med imperativ programmering. Jeg tror vi allerede har de fleste brikkene på plass, og jeg ser ingen videre fruktbar utvikling i den retningen. Når det gjelder deklarativ programmering er det derimot mye man kan gjøre. Og dette ser vi mye av i dag, innenfor såkalt utvikling av domene-spesifikke språk (DSL-er). Dette kan være bedriftssystemer, SQL og andre spørringsspråk.
En interessant utfordring er derfor å sørge for at programmeringsspråkene ”modnes”, og dermed blir rike nok til at man kan lage DSL-ene innenfor språk som for eksempel C#. Og dette er et eksempel på ting jeg er veldig interessert i å jobbe videre med. Og hvilke grep vi trenger å gjøre for at C# blir rikt nok til at vi innenfor dette kan utvikle et spørringsspråk, ”business processing” språk eller en ”rules engine”.
Mange av brikkene er som sagt allerede på plass, men det mangler også noen. Og i denne sammenheng er det interressante steder vi kan hente ideer fra. Funksjonelle programmeringsspråk som ML og Haskell har mange spennende egenskaper som kunne bidra på dette området. Dette er derfor det jeg tror vil karakterisere programmeringsspråk om, la oss si, fem til ti år. Språkene vil semantisk sett være rikere og være mer ekspressive, slik at du kan gjøre de domene-spesifikke tingene uten å måtte bruke anførselstegn slik man må i SQL-spørringer. En større integrasjon mellom disse to verdenene kan føre til spennende muligheter.

HWB.no: Tror du man når et punkt der det er ”farlig” å blande imperative og deklarative programmeringsstiler?

Anders: Jeg tror ikke det blir ”farlig”, men at det tvertimot kan være fruktbart å gjøre dette. Jeg tror dette er måten vi kan gjøre programmerere mer produktive på.

HBW.no: Vil vi se grunnleggende endringer i syntaksen i språkene?

Anders: Syntaks er i utgangspunktet bare syntaks. Eller det kommer forresten helt an på hvem du spør. Spør du en akademiker, er syntaksen bare den nedskrevne semantikken. Og semantikken er det interessante. Jeg har en tendens til å følge begge.
Noen vil fortelle deg at syntaks ikke har noe å si. Jeg mener det tvertimot har mye å si, fordi det hjelper deg til å tenke og resonnere rundt koden. Dersom det er for mange parenteser eller lignende slik mange klager på med LISP, er det vanskelig å se for seg koden klart. Dersom syntaksen er uforståelig, blir det vanskelig å se noe for all støyen. Når det er sagt er det viktig å få syntaksen riktig, men du starter med det semantiske. Det er her man, semantisk sett, må legge til nye egenskaper.

HWB.no: Sikkerhet og programmeringsspråk, hvordan er disse relatert til hverandre? Som et tilleggspørsmål til dette, hvordan vil .NET versjon 2.0 være ”sikrere” enn versjonene 1.0 og 1.1?

Anders: Måten sikkerhet og programmeringsspråk er relatert på er som følger: Noen ganger gjør vi feil eller glemmer å tenke på visse ting som kan medføre en sikkerhetsrisiko. Visse programmeringsspråk lager sterke garantier for hva man kan gjøre og for hva som sjekkes i når programmet kjøres, mens andre har løsere garantier for dette. Eldre språk som C eller C++ lager for eksempel ingen garantier for sjekking når man indekserer inn i et array, f.eks. om man indekserer utenfor grensene til det arrayet. Om man ikke setter opp koden riktig og hvis man ikke eksplisitt gjør alle grensesjekkene alle steder, åpner man opp for sikkerhetshull. Dette er helt klart ikke ønskelig.

Kontrollerte kjørbarhetsmiljøer, som .NET, har noen iboende fordeler i forhold til de eldre programmeringsspråkene. .NET er i sin natur mer sikker fordi vi for eksempel har gjort alle grensesjekker for arrayer standard. Disse kan du ikke skru av, og du vil derfor ikke opplever såkalte buffer overrun-problemer i .NET.

Et annet problem man ofte ser er løse pekere (”stray pointers”) eller ”pointer overruns”. I .NET har vi forsøkt å tette disse hullene. Dette ble ikke bare gjort av sikkerhetshensyn, men også for å gjøre applikasjoner mer robuste. Klarer man å fjerne problemene, klarer man også å fjerne sikkerhetshullene. Derfor er kontrollert kode mer sikkert, simpelthen fordi det ”lever” i et mer robust designet miljø.

HWB.no: Du frykter ikke at dette kan virke som en hindring for programmerere?

Anders: Nei, det tror jeg ikke. Det er klart det medfører visse restriksjoner – alt har en pris. I dette tilfellet vil det være en liten pris å betale i kjørehastighet. All grensesjekkingen tar tid, men det positive ved dette er at «Just in time»-kompilatorer kan ”se” mønstre i dette, og forutse hva som kommer til å skje. Slike smarte ting kan man gjøre for å få opp prosesseringshastigheten, samtidig som man har en sikker og robust infrastruktur.

Tilbake til spørsmålet om hva .NET versjon 2.0 gjør bedre enn versjonene 1.0 og 1.1.

For det første fokuserer vi mye på sikkerhet i våre utviklingsprosesser, noe som har endret seg mye siden jeg kom til Microsoft for åtte år siden. På den tiden var det ikke mye snakk om sikkerhet, og dette er derfor et ganske nytt fenomen. Vi har måttet endre måten vi tenker på omkring utvikling av programvare. Et eksempel er at vi i vår utviklingsprosess nå alltid legger inn en sikkerhets-milepæl, hvor bokstavelig talt hele avdelingen fokuserer på sikkerhet. Dette innebærer at vi forsøker å knekke koden, kjøre verktøy for å bryte sikkerheten, og så videre. Dette er i grunnen en spesiell prosess. Det finnes ingen matematisk formel man kan benytte i dette arbeidet. Så til syvende og sist dreier dette med seg sikkherhet mye om mennesker med et skrudd syn. Gjerne intelligente og smarte folk, men ført på villspor, som bruker sin tid på å finne ut hvordan de kan ødelegge livet for andre. Derfor blir søkingen etter sikkerhetshull en fantasirik og spennende prosess, som det som sagt ikke finnes noe verktøy for.

En annen ting man oppdager når man jobber med dette er at sikkerhet ikke er en bryter som man kan skru av eller på. Det er her snakk om en balanse mellom fleksibilitet og egenskaper på den ene siden og uleilighet og mangel på egenskaper på den andre. Det ultimate sikre system er jo et system som er skrudd av! Det gjør til gjengjeld ingenting for deg. I den andre enden har man det helt åpne, men sårbare systemet. Et eller annet sted i mellom disse ytterpunktene finnes det systemet som vi må kjøre på. Vi blir nødt til å endre mange av våre standarder til for eksempel ”slå av makroer”, men dette blir tungvint for brukerne. Plutselig er et regneark som var lettvint å bruke, blitt vanskelig å bruke. Vi må alle dessverre betale for økt sikkerhet i form av mindre brukervennlighet.

Kommentarer (0)

Norges beste mobilabonnement

Desember 2016

Kåret av Tek-redaksjonen

Jeg bruker lite data:

ICE Mobil 1GB


Jeg bruker middels mye data:

Hello 5GB


Jeg bruker mye data:

Hello 10 GB


Jeg er superbruker:

Telia Smart Total


Finn billigste abonnement i vår mobilkalkulator

Forsiden akkurat nå

Til toppen