Monday, December 26th, 2011
Skriv en kommentar

I år lagde jeg en julekalender hvor jeg hver dag i advent presenterte et nytt programmeringsspråk for mine lesere. Det tok mye tid – jeg begynte så smått på kalenderen i oktober – men det har vært en utrolig gøy og lærerik prosess.

summary

Å forsøke å fange essensen og mitt inntrykk av hvert av språkene i robot-tegninger var også gøy. Kjekt å få kombinere flere hobbier på en gang :)

Om valg av språk

Jeg forsøkte å vise et så bredt spekter av språk som mulig, men det var vanskelig å velge hvilke jeg skulle ta med. En rekke språk jeg planla å inkludere nådde ikke opp – ofte fordi jeg fant ut at de ikke ville bidra med noe spesielt nytt i forhold til de andre språkene. Språk som nesten ble med var Icon, Self, CLIPS, Dylan, Go, R og Awk. Andre som ble vurdert var Falcon, Processing, ooRexx, Tcl, Joy, m.fl. Jeg kunne også godt ha tenkt meg å vist frem esoteriske språk som INTERCAL, FALSE, Piet og Shakespeare.

Men jeg er ganske fornøyd med språkene jeg valgte (kun med ett unntak egentlig). Jeg inkluderte brukbart med funksjonelle språk, et par-tre stack-baserte språk, og fikk dekket områder som logisk programmering, DSL’er, og flere moderne språk som blander de beste elementene på ulike måter.

Hvilke språk jeg likte best

Jeg har laget en høyst personlig og uhøytidelig rangering av språkene fra kalenderen. Jeg har vurdert hvert språk i forhold til fire områder:

1) Hvor interessant det var å lære språket
2) Hvor nyttig språket er for en moderne utvikler
3) Hvor betydningsfullt språket er eller har vært
4) Hvor gøy det var å lære og å jobbe med

Hver kategori vektes likt. Dette har gitt følgende resultat:

languages_chart

Språkene på toppen av denne listen er altså de jeg har mest tro på, og som jeg vil anbefale dem som ønsker å utvide horisonten sin. Haskell er et allsidig og nyttig språk som vil utfordre deg, og vil tilfredstille ditt behov for å fordype deg i den funksjonelle paradigmen. REBOL er et praktisk og enkelt skriptspråk som kan fungere som en inngangsport til Lisp. Smalltalk vil gi deg et nytt syn på objektorientert programmering, og åpne øynene dine for hva et programmeringsmiljø kan være for noe. Og logisk programmering med Prolog er noe alle utviklere burde prøve seg på.

Nemerle, Boo, Cobra og Fantom er mer generelle språk med hver sine styrker, og er alle kandidater til å bli ditt nye “hverdagsspråk” – om du ikke er fornøyd med det du benytter i dag.

Språk jeg selv ser for meg (akkurat nå) at jeg vil jobbe mer med inkluderer Haskell, Rebol, F#, kanskje Nemerle, og muligens flere. CoffeeScript ligger allerede i min verktøykasse.

Hva har jeg lært

Å gjennomføre denne kalenderen har gitt meg nyttig erfaring i å raskt sette meg inn i nye språk. Det har også gitt meg en dypere forståelse for hva som er felles, og hvordan språkene har utviklet seg. Jeg har senket min egen terskel for å forsøke nye ting, og bygget opp kunnskap om hvordan jeg kan vurdere ulike språks egnethet i forhold til ulike oppgaver.

Men jeg sitter også igjen med en enda sikrere følelse av at jeg aldri vil finne et kraftigere programmeringsspråk enn Lisp (Common Lisp, Scheme, Clojure). Alle språk tilfører noe, men de tar samtidig bort andre ting. Akkurat nå er jeg aller mest fasinert av de mange mulighetene i språkene med få restriksjoner.

Det jeg ikke har lært så mye om, men bare sett noen små glimt av, er hvordan de ulike språken egner seg til utvikling av større systemer. Dette vil selvfølgelig ta lengre tid og mer erfaring.

Personlige høydepunkt

Det absolutte høydepunktet for meg var å lære Rebol. Det er et meget elegant men også praktisk språk. Det har mange likheter med Lisp som gjør det meget fleksibelt, og jeg har endt opp med å bruke mye mere tid på dette språket enn den de andre.

Ellers var det ekstra givende å implementere løsninger i  Forth, Factor og Befunge. Det var disse språkene som i størst grad utfordret måten jeg tenker på.

Den absolutte nedturen var da jeg valgte å gi opp å implementere en løsning i Unlambda.

Tilbakemeldingen

Jeg har fått utrolig mye positive tilbakemeldinger på kalenderen min, både i form av kommentarer på bloggen, i diskusjonsforum og på twitter. Antall besøk på bloggen steg også med 160% i forhold til november – tolker jeg analytics korrekt var over to tusen norske utviklere innom og leste kalenderen i år.

Utviklerne på Computas lagde til og med et pepperkakehus som viste min nye Euler-løsning på en lite skjerm hver dag.

461343912

Jeg hadde håpet på mere diskusjon rundt hvert av språkene, men det er få utviklere som eksperimenterer med mange ulike språk, så jeg forstår det.

Jeg håper likevel at kalenderen min har inspirert folk til å forsøke flere ting. Dere har nå sett hvordan man løser en enkel oppgave i vidt forskjellige språk. Det var ikke mange av disse språkene jeg hadde noe forhold til før jeg startet arbeidet med kalenderen, så det bør vise at det er fullt mulig å plukke opp nye språk ganske raskt; for å lære litt, vurdere muligheter, og kanskje finne seg et nytt verktøy som kan gjøre deg til en bedre utvikler.

Nå gjelder det bare å finne på noe jeg kan basere neste års kalender på. 24 design patterns? Eller kanskje 24 ulike algoritmer? Forslag mottas med stor takk!

Kategorier: Julekalender, kjempekjekt.com.
RSS feed for kommentarene. Tilbaketråkk.

5 kommentarer til “Oppsummering av julekalenderen 2011”

  1. Ingve Says:

    Julekalenderen levde virkelig opp til navnet på bloggen. Det var kjempekjekt! Fikk til og med lyst til å børste støvet av gamle COBOL-kunnskaper! :)

  2. Torbjørn Says:

    > Fikk til og med lyst til å børste støvet av gamle COBOL-kunnskaper!

    Det beklager jeg virkelig! ;)

  3. Alexander Refsum Jensenius Says:

    Takk for flott adventskalender! Som musikkteknologiutvikler hadde det vært gøy å se noen musikk/multimediaprogrammeringsspråk på listen, f.eks. noen grafiske (f.eks. Max/MSP/Jitter eller PD) eller tekstbaserte (f.eks. CSound, SuperCollider, Chuck, Processing). Jeg får lage min egen kalender med disse neste år :).

  4. Torbjørn Says:

    Alexander: Processing hadde jeg faktisk tenkt å ta med, men måtte droppe det i siste liten – rakk ikke sette meg inn i det. Har ikke hørt om noen av de andre faktisk :/

  5. Jul med programmeringsbloggen « Dærnt's Corner Says:

    [...] D, Prolog, Regex, og på selveste julaften falt valget på en Euler DSL. Marø´s egen oppsummering av julekalender for 2011 er også interessant lesing der han også begrunner hvorfor valget falt på [...]

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

Torbjørn
PS: Takk til Børge Hansen, som delte SCARF-modellen med meg!...
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)). ...
Einar W. Høst
Interessant, det blir en trade-off mellom eleganse og fart på en måte. Den funksjonelle løsningen med vanlig filter er ren og pen, mens den imperat...
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!