Hva er programmering?


onsdag 17. oktober 2012 Softwareutvikling Meninger

Denne bloggen føles ikke komplett uten en post om hva programmering er for noe.

Å programmere er å instruere en eller flere datamaskiner til å gjøre noe. Å programmere er å lage en oppskrift som datamaskinen kan følge, og som vil resultere i noe som forhåpentligvis er nyttig for noen.

Det høres jo ganske greit ut.

Men tenk litt over det...

En datamaskin kan skape en illusjon om at den inneholder fotografier, tekstdokumenter, musikk og filmer. Det eneste den egentlig inneholder derimot er bits..., det vi ofte representert som 0 og 1. Mange bits! Strukturert i mønstre det er umulig for menneskehjernen å gjenkjenne. Datamaskinen din er laget for å lagre bits, og alle filene og mappene og data av ulik art er illusjoner skapt av programmerere.

Dijkstra, en av programmeringens store helter, har beskrevet programmering som den største intellektuelle utfordringen i menneskenes historie - uten sidestykke.

Hva er det som gjør programmering så utfordrende? Dijkstra svarer selv på dette ved å påpeke at en kompetent programmerer er fullstendig klar over den begrensede størrelsen på sin egen hjerne (Kilde: The Humble Programmer, 1972). Å få en haug med 0'ere og 1'ere til å bli noe fornuftig er utrolig komplisert, og vår oppgave som programmerere er å administrere denne kompleksiteten.

“Controlling complexity is the essence of computer programming.”

Brian Kernigan

Datamaskinen gjør akkurat det du forteller den at den skal gjøre. Hverken mer eller mindre. Alle feil et program gjør er i utgangspunktet resultatet av en menneskelig feil.

“That’s the thing about people who think they hate computers.  What they really hate is lousy programmers.”

Larry Niven

Men samtidig som utviklere lager en "oppskrift" for datamaskinen så lager han ofte også noe som skal spille sammen med mennesker. Og de er ikke like rasjonelle og forutsigbare. Dette gjør programmering ekstra vanskelig - man må forstå både hvordan mennesker og datamaskiner fungerer, og det er to veldig forskjellige ting.

For å gjøre programmeringen enklere bygger utvikleren abstraksjoner – lag som skjuler kompleksitet. Vi gjenbruker ting som andre har gjort, og fjerner oss mer og mer fra hvordan maskinen egentlig fungerer. Men abstraksjonene er sjelden perfekte, og manglende forståelse fører til enda flere utfordringer for den stakkars programmereren.

“Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.”

Alan Kay

Programmerere jobber altså med datamaskiner og mennesker på forskjellige nivåer – noen kjenner veldig godt hvordan maskinen fungerer, skriver såkalt assembly-kode, og kaller seg hackere. Andre forholder seg til design av større systemer, og kaller seg gjerne arkitekter. Noen lager bare grensesnitt som mennesker kan bruke til å kommunisere med datamaskinen, og kaller seg kanskje til og med bare for designere.

Og vanskelighetsgraden kan variere veldig.

Motivational Poster: Programming

Det sies også at programmerere varierer veldig i forhold til hvor dyktige de er. Kanskje mer enn innenfor noe annet felt..

“A hacker on a roll may be able to produce–in a period of a few months–something that a small development group (say, 7-8 people) would have a hard time getting together over a year.  IBM used to report that certain programmers might be as much as 100 times as productive as other workers, or more.”

Peter Seebach

“..a great writer of software code is worth 10,000 times the price of an average software writer.”

Bill Gates

Man trenger ingen utdanning for å kunne kalle seg programmerer, og det finnes mange som har lært seg alt de kan på egenhånd, uten at det virker som noe problem. Men samtidig sies det at det å mestre programmering kan ta 30 år med kontinuerlig læring. Dessuten er det lite enighet rundt om programmering er en vitenskap, et ingeniørfag, et håndtverk, eller en kunstform. For eksempel sier man at en informatikk-utdanning (Computer Science) ikke kan gjøre deg til en programmeringsekspert, på samme måte som at det å studere pensler og pigmenter ikke kan gjøre noen til en stor maler.

Forfatteren av boken The Developers Code illustrerer hvor mange fasetter programmeringsyrket har i sin definisjon av hva en moderne programmerer er:

I am a nonaccredited, overly logical psychologist, therapist, mechanic, diplomat, businessman, and teacher working in an inductry that is still defining itself each and every day.

Programmering er et merkelig yrke. Det finnes mange, motstridende meninger om hvordan det skal gjøres. Det kan være utrolig krevende, men likevel utrolig gøy og motiverende. Man kan bygge ting av ingenting – som trollmenn kan vi skape noe i hjernen vår, skrive noen "trylleformler", og vips så bringer datamaskinen det til live.

Jeg er stolt over å være en programmerer. Samtidig føler jeg meg veldig priviligert. Tenk at noen vil betale meg for å forsøke å gjøre det mest utfordrende og kompliserte vi mennesker kan foreta oss.


comments powered by Disqus