Wednesday, October 17th, 2012
Skriv en kommentar

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.

Kategorier: Softwareutvikling.
RSS feed for kommentarene. Tilbaketråkk.

6 kommentarer til “Hva er programmering?”

  1. Torbjørn Says:

    Denne posten ble kanskje litt usammenhengende, men jeg hadde et veldig behov for å skrive denne artikkelen, så får heller resultatet være så som så :)

  2. Kjersti Says:

    Oooh. Her var mye godt kranglestoff! :D

    Eller i hvert fall den siste halvdelen, om de geniale utviklerne. De som er så effektive og produktive. (Ofte er det uklare referanser, og uklart hvem de er sammenlignet med, og under hvilke omstendigheter, og hvorfor man antar at resultatene fra en studie kan ekstrapoleres til hele vår bransje. I call bullshit!

    Nei, da liker jeg bedre denne innfallsvinkelen:
    “No organization can depend on genius; the supply is always scarce and unreliable. It is the test of an organization to make ordinary human beings perform better than they seem capable of, to bring out whatever strength there is in its members, and to use each person’s strength to help all the others perform. The purpose of an organization is to enable common people to do uncommon things.” (Peter Drucker) Denne snakker ikke om programmerere spesielt, men det er kanskje like greit, fordi vi tross alt først og fremst er mennesker?

    Kan jeg bare legge til at programmerere er noen av de mest selvopptatte yrkesgruppene vi har i dag? Som elsker å analysere seg selv og sin posisjon i verden og hvilket unikt arbeid de gjør? Og jeg er ikke noe unntak, altså. ;-)

  3. Torbjørn Says:

    > er noen av de mest selvopptatte yrkesgruppene vi har i dag

    Det er kanskje ikke så rart at man er litt selvopptatt om halvparten av det jeg sier i blogposten stemmer :)

    Dette med de geniale utviklerne har jeg diskutert med folk før (skal finnes en lengre kommentar-tråd på bloggen et sted), og jeg er fullstendig klar over at det ikke finnes noe empiri for påstandene. Men at en person som Bill Gates sier at en dyktig utvikler kan være verdt ti tusen ganger så mye som en gjennomsnittelig utvikler sier noe.

    For meg er det noe å strekke seg etter. Jeg vet at jeg kan prestere MYE MYE bedre enn jeg gjør, og det får meg til å søke etter hva det er som kan gjøre noen hyperproduktive (eller hva man skal kalle det). Det gjør meg også bevisst på at man som utvikler kan være en belastning – i uheldige stunder bidrar man negativt. Påstanden om de store forskjellene gjør at jeg ikke tar så lett på hva jeg selv gjør.

    Men vinklingen du trekker frem er også bra. Den sier at potensialet til å bli en høyt-ytende person finnes i oss alle. Og det er dette jeg mener også egentlig – jeg tror ikke at noen utviklere bare er bedre enn andre, og at de andre ikke har en sjangse. Med den rette instillingen og viljen til å lære kan man komme veldig, veldig langt!

  4. Torbjørn Says:

    Noen interne lenker for dem som er interesserte:

    Jeg tror første gang jeg presenterte påstanden om den store forskjellen mellom utviklere var i blogposten Menneske-problemet. Her presenterte jeg noen “fakta” fra boken Object Thinking. Den boken var utrolig inspirerende, og endret funamentalt hvordan jeg så på Agile. Og i fjor skrev jeg om Et lite team, som på en måte handler litt om det samme, og hvor påstanden ble diskutert i kommentarene…

    Uncle Bob’s kommentar om at det er for mange utviklere som ikke bryr seg er også aktuell i denne sammenhengen.

  5. Stian Says:

    IDG skrev nettopp om litt samme problemstilling: http://www.idg.no/incoming/article261861.ece

    En person satte ut samme oppgave til 6 personer/team. En av personene leverte topp kvalitet på bare 29 timer (inkl tester, dokumentasjon, deployment, osv). Noen av de andre timene var ikke blitt ferdig og lå an til å bruke 200-400 timer, mye søppel produsert/levert.

  6. Kjersti om den geniale utvikleren [Luke 19, 2012] Says:

    [...] Kjersti står også bak Bergen CodingDojo, og er med og arrangerer BOOSTER-konferansen. I dag følger hun opp en kommentar hun kom med her på bloggen for litt siden… [...]

Skriv en kommentar

Tillatte tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Siste kommentarer

best seo services company
I'm not sure where you are getting your information, but good topic. I needs to spend some time learning more or understanding more. Thanks for wonder...
Louis Vuitton Outlet
30 years old Kalamazoo-born Vitalia totally likes it barbecuing bicycling. Last but not least she is intrigued by charters and flights as an example, ...
Børge Hansen
Denne likte jeg veldig godt. Du skriver godt og har gode betraktninger  Keep it up – flere trenger å tørre å lære mer om ledelse – du l...
Tormod
Er egentlig ikke overrasket. F# sin fortè er programmererens produktivitet/kvalitet og anledning til parallell kjøring. Men kjøremotoren har ...
Stian
Ville også prøvd med et større problem (x100 eller x1000 f.eks). Når man snakker så små brøkdeler av et sekund som her så kan tiden for en ell...
Torbjørn
Har ikke sjekket - tar en titt i morgen hvis tid :)...
Einar W. Høst
Mhp tco: hva sier ILSpy?...
Torbjørn
Har ikke sett noe på PSeq før, men kjenner til den typen funksjoner fra blant annet Clojure. Og problemet med slike funksjoner i sammenhenger som de...
Håvard
Veldig bra sammenligning! Har du sett på ytelsen av PSeq.* fra powerpakken? Tipper den vil gi performancehit på små mengder, men kan kanskje resul...
Torbjørn
Jeg kom på en demonstrasjon-variant til jeg burde inkludere, nemlig bruk av list comprehension (en type computation expression (også kalt monads)). ...
Creative Commons-lisens
Innholdet på denne bloggen er tilgjengelig under Creative Commons Navngivelse-Ikkekommersiell-DelPåSammeVilkår 3.0 Norge lisens.

Programmeringsbloggen
Kjempekjekt.com

© 2006-2013 Torbjørn Marø

Jeg har vært en profesjonell programmerer siden 1999, og dette er min blogg. Målet med bloggen er å stimulere meg selv og alle andre til kontinuerlig eksperimentering og læring.

Jeg forsøker å være allsidig, og programmerer blant annet i C#, Ruby, Erlang og Clojure.

Jeg praktiserer TDD og andre smidige utviklingspraksiser. Jeg er opptatt av kvalitet og ren kode.

Dette og ganske mye mer kan du lese om på denne bloggen!