mandag 26. desember 2011 Julekalender kjempekjekt.com
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.
Å 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 :)
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.
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:
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.
Å 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.
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.
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.
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!