Hopp til navigasjon Hopp til innhold
Åsmund Eldhuset som foreleser på NTNU i fjor høst. Tema: Algoritmer. (Ill.: Fotogjengen ved Studentersamfundet i Trondhjem)

– Dette rådet Bill Gates meg til

Silicon Valley (ITavisen): Derfor kan alle lære seg programmering.

Dette er andre og siste del av vårt intervju med programmerer Åsmund Eldhuset.

Les første del.

Hvilket programmeringsspråk mener du per dags dato er mest ambisiøst. Er det noen ny på vei? 

– Det kommer veldig an på hva man ønsker å lage – forskjellige språk egner seg til forskjellige formål. En ulempe med å jobbe er at man må fokusere mer på teknologiene som trengs på jobben – man får mindre tid til å lære seg nye ting (utover det jobben eventuelt legger opp til), så jeg er ikke så veldig oppdatert på språkfronten – skal heller prate om de jeg kjenner til. 

Min personlige favoritt er C#. Jeg synes dette språket har en veldig fin kombinasjon av gode ideer fra mange andre språk uten at språket er blitt for stort; ulempen er at det fungerer best på Windows.

Den nyeste utgaven av Java er helt kurant (og fungerer overalt), men jeg irriteres ofte over hvor mye kode man må skrive for å oppnå noe som mange andre språk kan uttrykke mer kompakt.

C++ kan brukes til veldig mye
– C++ er en traust arbeidshest som man kan bruke til hva som helst, men det er et enormt stort – det er mest realistisk å lære seg deler av funksjonaliteten. Dessuten finnes det mange fallgruver og muligheter til å skyte seg selv i foten. Man vil forstå mer om hvordan datamaskinen fungerer ved å lære C++ (eller det mye mindre omfattende C), men jeg ville ikke ha anbefalt det som et første språk.

JavaScript er populært og ganske lett å komme i gang med, men fra et språkteoretisk ståsted er det nokså rotete, og man må bruke språket på bestemte måter for at det ikke skal bli et stort virrvarr.

LISP er enormt fascinerende fra et matematisk ståsted, siden det har utrolig enkel syntaks (grammatikk), men samtidig lar deg uttrykke mye på en veldig elegant måte. Men det er såpass annerledes enn de fleste andre språk at det kan være tungt å bytte bort fra det hvis du begynner her.

Hva med iOS- og Android-utvikling?
-På iOS-siden har jo Swift nettopp kommet, og Apple sin plan er at Swift skal ta over for det noe gammeldagse språket Objective-C.

Andre forholdsvis nye og hippe språk er Rust og Google Go, men disse har mer spesialiserte anvendelsesområder.

For nybegynnere vil jeg anbefale Python, som har en pen og enkel syntaks samtidig som det er veldig kraftig og kan brukes til mange seriøse formål. Barn kan ha nytte av å starte med et grafisk språk som f.eks. Scratch, hvor man «bygger» programmer ved hjelp av LEGO-aktige blokker, i stedet for å skrive koden for hånd. 

«Jeg kan ikke programmere, men ønsker å lage apper til Android og iOS, hvor starter jeg?»

– Det går an å begynne direkte med Java (Android) eller Swift (iOS), eller til og med C# (hvor man ved hjelp av et system som heter Xamarin kan lage apps som fungerer både på Android, iOS og Windows Phone) – dette er ikke de enkleste språkene, men kanskje det som vil være mest motiverende for mange. 

Det finnes jo massevis av veiledninger på nettet, men de er ofte ganske overfladiske og gir ikke et godt nok bilde av hva som skjer bak kulissene – det er veldig lett å ende opp med å følge veiledninger, og ende opp med et imponerende sluttresultat, men uten å skjønne noe særlig av hva man gjorde underveis.

Derfor tror jeg at det kan lønne seg å starte med en god lærebok. Søk på Amazon og les hva anmelderne sier om hvor dyptpløyende bøkene. Bruk heller nettet som støtteinformasjon, og til å søke opp informasjon om feilmeldinger, som man som regel får mange av i starten. 

Lurer du på å ta «det store steget»?
«Jeg ønsker å flytte til Silicon Valley og starte min egen bedrift eller bli med i en startup. Hvor bør jeg starte»? 

– Hvis du vil starte en egen bedrift, er jo det åpenbare første steget jo å ha en god idé og høy gjennomføringsvilje.

Hvis du vil være ansatt i et firma, gjør visumreglene til USA det ganske vanskelig for utlendinger, selv om det er et stort behov for kompetente programmerere her borte. Med mindre du gifter deg med en amerikaner, finnes det så vidt jeg vet fire muligheter som er noenlunde tilgjengelige:

* Standard arbeidsinnvandringsvisum (H-1B):

Man må først få et jobbtilbud fra et firma som er villige til å betale for å søke om visum på dine vegne (det er ikke mulig å søke om dette visumet på egen hånd).

Søknadene behandles bare en gang i året; søknadsfristen er 1. april, og hvis man får visumet, kan man begynne å jobbe 1. oktober – så om du får jobbtilbud nå, kan du tidligst begynne å jobbe høsten 2016. Men det mest frustrerende er at det er loddtrekning om å få søknaden sin lest, så det er under en tredjedels sjanse for å få visumet.

* Studentvisum (F-1):

Har du vært på utvekslingsstudium i USA og fullfører studiet, får man lov til å jobbe i USA i to år etterpå.

* Overflytningsvisum (L-1):

Hvis man jobber i en ikke-amerikansk avdeling i et amerikansk firma i ett år, kan man søke om «intern overflytting» til et amerikansk kontor av samme firma, men man er da bundet til det ene firmaet.

* «Green Card»:

Permanent oppholds- og arbeidstillatelse i USA, men det er dyrere, og det tar lengre tid å søke.

Slik kan du komme deg inn i USA lettere
– Et smutthull er å opprette et konsulentfirma i Norge og leie ut seg selv som konsulent til det amerikanske firmaet; så lenge det amerikanske firmaet kjøper tjenester av ditt firma og ikke gir noe penger eller andre ytelser direkte til deg, har jeg oppfattet at det skal gå greit (men sjekk med en advokat før du prøver dette selv).

Vi har fått nyss i at du har snakket med Bill Gates. Hva fortalte han deg? 

– Bakgrunnen er at jeg hadde sommerjobb i Microsoft i Redmond i 2007, i forbindelse med at han skulle slutte å jobbe for Microsoft på fulltid (for å kunne konsentrere seg om den filantropiske virksomheten sin) inviterte han alle oss med sommerjobb til grillfest i den overdådige hagen hans.

De fleste stilte seg i ring rundt ham for å stille spørsmål, og han svarte veldig jordnært og åpenhjertig på alt.

Innen jeg rakk frem var de fleste gode spørsmålene stilt, men jeg spurte om hva han mente var den beste måten å lære seg programmering på: Burde man starte ovenfra med et høynivå språk som lar deg utrette mye ved hjelp av lite kode (og mye magi i bakgrunnen), og så grave seg lenger ned og gradvis avdekke hvordan de forskjellige tingene fungerer, eller burde man starte fra bunnen av med grunnprinsippene og arbeide seg oppover?

– Svaret var noe i nærheten av: – Well, I’m a bit old-fashioned, so I’d prefer to do it bottom up – get «The Art of Computer Programming» by Donald Knuth, and get going.

Det er opp til deg som person
– Jeg kjøpte i etterkant boken, og det er et imponerende verk, men Gates hadde rett i at det er ganske så utfordrende lesing.

Etter en del egen erfaring med undervisning tror jeg at det er individuelt – folk som meg, som har høy logisk sans og liker å fikle med detaljer, bør ta det fra bunnen av, mens de som motiveres mer av sluttresultatet heller bør begynne fra toppen av (og så vil de kanskje få lyst til å lære hva som skjer bak kulissene, noe som vil gi dem større muligheter til å lage mer imponerende ting). 

For de av oss som ikke er så gode i matte, finnes det håp som programmerer?

– Matematisk tenking er veldig viktig i programmering, men det er av en annen type enn det de fleste assosierer med matematikk.

Rent regneteknisk trenger man knapt nok mer enn de fire regneartene og litt algebra; teknikker som vektorregning, integrasjon og differensialligninger trenger man bare hvis man skal lage spill eller fysiske simulasjoner.

Matte er mer enn du tror
– I stedet trenger man såkalt diskret matematikk, som blant annet inkluderer dette:

* Logikk (hvordan man kan trekke gyldige konklusjoner ut fra gitte opplysninger).

* Grafteori (hvordan man kan modellere mange forskjellige situasjoner som nettverk, og analysere nettverkene for å finne ut ting om den virkelige verden – dette brukes for eksempel i GPS-er til å finne korteste vei).

* Språkteori (hvordan man kan strukturere og analysere programmeringsspråk)

* Rekursjon (en «Inception»-aktig teknikk hvor man løser et problem ved å løse en mindre utgave av det samme problemet).

Finn kjernen i utfordringen
– Kort sagt handler det om problemløsning og abstrakt tenkning (evnen til å se bort fra irrelevante detaljer og komme frem til hva et problem «egentlig» handler om).

Litt kunstnerisk sans kommer også godt med; det ligger mye estetikk bak det å bygge kompleksitet ut fra enkle byggeklosser, og man kan gjøre mye gøy med grafikk og lyd ved hjelp av programmering.

Så hvis du liker å løse problemer med begrensede ressurser – litt som å spille strategispill – kan programmering være noe for deg.

Stikkord: intervju, programmering, Silicon Valley, utvikling