Hvilket dynamiske programmeringspråk du skal lære deg

Sett at jeg har overtalt deg til å lære dynamisk programmering, f.eks. da du leste artikkelen om at du MÅ beherkse et dynamisk språk. Spørsmålet du stiller deg da er: Hvilket språk skal jeg velge? Og jeg hjelper deg gjerne med det også.

Her finner du en oversikt over det som i dag er de mest populære, dynamiske programmeringsspråkene, sammen med mine meninger om hvilke egenskaper de har, og hvorfor du eventuelt skal velge dem. De er sortert etter popularitet – de mest omtalte og brukte språkene er på toppen av listen. Ta gjerne en titt på blogposten om trender innen programmeringsspråk i 2010 om du vil se nærmere på rangeringen.

PHP

php_logo PHP er for tiden på tredjeplass i TIOBE’s liste over populære programmeringsspråk. Men for guds skyld – ikke velg PHP til å lære deg dynamisk programmering! Det du gjør i PHP kan du få til i språk som Python og Ruby om du vil, men det fungerer ikke den andre veien. Har du behov for å utvikle i PHP så lærer du deg det i tillegg, men ikke som en erstatning for en orntlig språk. Det er med på denne listen for kompletthets skyld, og kun det.

Mulig jeg ikke vet hva jeg snakker om, men la oss uansett gå raskt gå videre…

Python

python_logo Python er et programmeringsspråk som så verdens lys sent på 80-tallet. Python-kode er svært konsis, legger vekt på lesbarhet, og har en syntaks som appellerer til mange utviklere. Det er et objektorientert språk, men støtter også det funksjonsbasert paradigmen. I motsetning til de fleste andre språk legger python betydning i innrykk – man bruker indentering for å angi blokker/programstruktur, og behøver derfor ikke avslutte klasser, metoder osv med “end” eller krøllparantes eller lignende.

Her er en Hello World-klasse i Python, og bruken av den for å skrive ut “Hello, T-Man”. Den kompakte stilen er herlig!

    1 class Greeter:
    2   def hello(self, name):
    3     print Hello,, name
    4
    5 g = Greeter()
    6 g.hello(T-Man)

I tillegg til den vanlige implementasjonen i C, finnes Python også på .Net-plattformen i form av IronPython og på Java-plattformen i form av Jython. Om man behersker Python kan man dermed utnytte dynamisk programmering der også, noe som bør appelere til eksisterende .Net eller Java-utviklere.

Dessuten er Python det primære språket på Google App Engine, så hvis du vil utnytte den plattformen kan det være et lurt valg (selv om App Engine nå også støtter Java-plattformen, inkludert alle språkene som kjører der). Python er mye brukt til webutvikling generelt, og det mest populære rammeverket for denslags ser ut til å være djangoThe Web framework for perfectionists with deadlines.

Vil du vite mer om Python tar du turen til python.org.

Perl

perl_logoDa Perl dukket opp i 1987 var det som et skriptspråk for UNIX, og det er kjent for å ha en spesiell styrke når det kommer til prosessering av tekst. Språket har siden utviklet seg en god del, og har influert en rekke andre språk, som f.eks. Python og Ruby. Perl kalles “the Swiss Army chainsaw of programming languages”.

Jeg våger meg ikke på noe eksempel-kode, da jeg aldri har kodet en linje Perl i hele mitt liv. Min oppfatning er at Perl er litt utdatert, men om du har lyst til å ta en titt vil du finne det du trenger på perl.org.

JavaScript

Vi har alle brukt det, om ikke mer så har de fleste av oss i alle fall klippet og limt snutter fra nettet. Men JavaScript er faktisk et spennende, dynamisk språk som brukes til mer enn bare klientside-funksjonalitet i websider. Det finnes en rekke avarter som f.eks. ActionScript i Adobe Flash, JScript på Microsoft-plattformen m.m. Man kan bruke JavaScript som skriptspråk i OpenOffice, og med verktøy som Titanium fra appcelerator kan man lage desktop og mobil-klienter vha HTML, CSS og JavaScript. Men først og fremst er det et språk for å lage dynamiske websider, og det har tatt av på nytt de siste årene nå som browserene begynner å bli bedre og mere kompatible med hverandre.

Det er derimot et litt rotete språk, og derfor ikke noe jeg ville ha valgt for å lære meg dynamisk programmering. Om du er av en annen mening bør du skaffe deg boken JavaScript: The Good Parts og lære det orntlig.

Ruby

ruby_logo Ruby er det språket som har arvet mest fra legendariske Smalltalk, og hevder å være det mest objektorienterte språket man har i dag. Det ble utviklet midt på 90-tallet av Yukihiro “Matz” Matsumoto, og er det programmeringsspråket jeg valgte for å lære meg dynamisk programmering. Matz ville lage et språk uten overraskelser, som skulle være en fornøyelse å bruke – fokuset er flyttet bort fra å programmere for maskinen, og mot å programmere for mennesker.

Ruby on Rails, et rammeverk for høy-effektiv webutvikling, er sansynligvis det som har gjort Ruby så populært som det er i dag, men det finnes et hav av andre verktøy og biblioteker også. Ruby-syntaksen egner seg dessuten godt til å lage domenespesifike språk som kan la seg forstå av mindre tekniske personer, og brukes derfor ofte til embedding.

“Ruby on Rails is an open-source web framework that’s optimized for programmer happiness and sustainable productivity. It lets you write beautiful code by favoring convention over configuration.”

Du har sansynligvis allerede sett endel ruby-kode på denne bloggen, men her er et lite eksempel til. Her demonstreres bl.a. at man ikke behøver å deklarere instansvariabler (@name) – det er bare til å begynne å bruke dem, og anta at de er der når man trenger dem.

    1 class Greeter
    2   def initialize(name)
    3     @name = name.capitalize
    4   end 
    5   def salute
    6     puts Hello #{@name}!
    7   end
    8 end
    9  
   10 g = Greeter.new(world)
   11 g.salute # Output “Hello World!”

Som Python finnes også Ruby på både .NET-plattformen (i form av IronRuby) og på Java-runtimen (JRuby) i tillegg til den “vanlig” implementasjonen i C.

Er du interessert i Ruby kan du begynne på ruby-lang.org.

Objective-C

Objective-C er en slags blanding av C og Smalltalk, dvs. hardcore, low-level kombinert med elegant og dynamisk objektorientering. Språket har fått sin renessanse på grunn av at det er det primære programmeringsspråket for Apple’s Mac OS X og iPhone OS. Hvis det er din greie kan det sikkert være et spennende språk, selv om mange sier det er litt gammeldags og tungt å jobbe med. Selv synes jeg det ser litt gresk ut :-/

Jeg finner ikke noen kanonisk skilde til Objective-C, men Mac OS X Reference Library har en brukbar introduksjon.

Lua

lua_logo Lua er et lettvekts, prototype-basert språk som er designet for å være utvidbart. Som JavaScript er mye av inspirasjonen hentet fra Scheme – JavaScript og Lua har derfor mye til felles, selv om syntaksen er ganske anderledes.

Lua har blitt populært fordi det har blitt embeddet som skriptspråk i World of Warcraft og mange andre spill. Hvis du er en gamer kan dette selvsagt være inspirerende, men også om du ønsker å lage programvare som skal være utvidbar og derfor skal hoste sin egen skripting-motor. Lua har god performance, og lar seg bl.a. lett integrere med C++.

Igjen har jeg ingen erfaring med dette programmeringsspråket, og skal ikke prøve meg på no eksempel. For mer info om Lua kan du gå til lua.org.

Groovy

groovy_logoGroovy er et objektorientert, dynamisk språk du finner på Java-plattformen. Version 1.0 ble lansert så sent som i 2007, og det har ikke fått så veldig stor markedsandel enda (plass #40 på TIOBE’s liste). Inspirasjonen er hentet fra Java, Python, Ruby og lignende språk. Blant annet er Java-kode ofte også gyldig groovy-kode (ifølge wikipedia), og man kan bruke alle eksisterende Java-biblioteker i Groovy.

Her er litt kode:

    1 class Greeter {
    2   def name
    3   Greet(who) {
    4     name = who[0].toUpperCase() + who[1..-1]
    5   }
    6   def salute() {
    7     println “Hello $name!”
    8   }
    9 }
   10
   11 g = new Greeter(‘world’)
   12 g.salute()   // Outout “Hello World!”

Her demonstreres bl.a. Ruby/Python-style ranges (slutten av linje 4), dynamisk evaluering av streng mot variablenavn (såkalt interpolering – linje 7) og fullstendig fravær av type-deklarering.

Er du glad i Java-plattformen og vil lære dynamisk programmering kan du ta en titt på groovy.codehaus.org.

Jeg håper og regner med du fant noe som appelerte her. Lykke til med valget!

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

7 kommentarer til “Hvilket dynamiske programmeringspråk du skal lære deg”

  1. Vidar Lund Says:

    Den beskrivelsen eg liker best om å programmere i Python er: Du skriver ca pseudokode, og så funker det…

  2. Torbjørn Says:

    En annen fordel med Python er at om du lærer deg det så har du også kommet et bra stykke på veg til å lære Boo (et spennende, statisk språk for .Net-rammeverket – http://boo.codehaus.org/) og tildels også Haskell (funksjonsbasert språk – http://www.haskell.org/) – som har ganske lik syntax.

  3. Bård Strøm Says:

    Ikke så glad i PHP skjønner jeg. Lyst å kommentere på dette? Verdens mest trafikkerte nettssted etter Google er basert på PHP f.eks (facebook: over 300 millioner brukere, halvparten aktive brukere hver dag).

  4. Torbjørn Says:

    Jeg har endel erfaring med PHP fra noen år tilbake. For det første har PHP et begrenset scope – det brukes (nesten) utelukkende til webutvikling, og jeg vil derfor anbefale å velge noe som kan anvendes til flere formål. Måten PHP normal brukes på er også svært ustrukturert, og eksisterende PHP-eksempler vil ikke lære deg å bli en bedre koder.

    Men det kan selvsagt hende PHP har features jeg ikke kjenner til, som gjør det til et bedre valg enn det jeg oppfatter det som. Men jeg tviler.. Tar du f.eks. en titt her, http://en.wikipedia.org/wiki/PHP_syntax_and_semantics , så ser det ikke ut som om dette språket har særlig mange features.

    Det at noe er mye brukt, og at folk har hatt suksess med det, betyr ikke at det vil gjøre deg til en bedre utvikler. Jeg sier ikke at PHP er noe man ikke skal bruke, men man får så mye mer om man f.eks. lærer seg Ruby.

  5. Bård Strøm Says:

    Ja, jeg er på. Interessante betraktninger når jeg nå skal inn i Bergens største(?) PHP miljø.

    Forøvrig, les gjerne “the Python paradox” om du ikke enda har gjort det :)
    http://www.paulgraham.com/pypar.html

  6. Torbjørn Says:

    Takk for linken – gir god mening! Kanskje PSWinCom burde ha ansatt han fyren som hadde SNOBOL på CV’en likevel… :)

  7. PHP ikke djevelens verk likevel Says:

    [...] Jeg har tidligere hevdet at utviklere som ønsker å lære seg et dynamisk programmeringsspråk bør holde seg langt unna PHP. Jeg tviler på at det finnes noe annet språk hvor det er skrevet like mye drittkode. Likevel tok jeg meg selv i å si på et forum nylig at jeg nå faktisk vurderer å anbefale dem som ønsker å begynne med webutvikling å starte med nettopp PHP. [...]

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>


Einar W. Høst: Det er jo læringen som gjør det morsomt! Se også http://norvig.com/21-days...

Pagliacci: OBS! tl;wr. Det er vel akuratt det jeg sliter med med min læring innenfor pr...

Torbjørn: La oss anta to ulike definisjoner av Template Method pattern - de to ytterpunkte...

Lars-Petter: Hei igjen. Siden du inviterer til å ta diskusjonen i bloggen, og har tatt deg t...

Torbjørn: Lars-Petter: Det er én måte å se det på. Det er absolutt fortsatt Template M...

Lars-Petter: Hei. Har du ikke i prinsippet her gått over fra Template Method (arv) til Strat...

Christian Abildsø: I alle fall i C#, så føles dette som kode som blir mer fleksibel men vanskelig...

Torbjørn: Hei Henrik, og takk for tilbudet. Ble oppmerksom på Rasberry Pi for under en uk...

Henrik Sandaker Palm: Ang. større hobby prosjekt. Du er som er en slik rakker på programmering har j...

Øivind Nilsen: Slutt å bruke mobilnummeret mitt som eksempel !...

Mulig relaterte linker

 Hold deg oppdatert

Søk i bloggen

Ferske innlegg

  • En historie om programmering
  • Template Method del 4: Multippel arv
  • Template Method Intermesso
  • Template Method del 3: Bare funksjoner
  • Kategorier

  • .net ninja (37)
  • Bøker (17)
  • Diverse prosjekter (35)
  • DSL (10)
  • Erlang (10)
  • F# (5)
  • Hardware (1)
  • Jobb (77)
  • Julekalender (51)
  • kjempekjekt.com (23)
  • LISP/Clojure (33)
  • NNUG / community (60)
  • O/RM & databaser (10)
  • Off topic (116)
  • OO-design/clean code (30)
  • Podcasts (14)
  • Polyglot (77)
  • Ruby (27)
  • Silverlight / RIA (3)
  • Software/verktøy (20)
  • Softwareutvikling (21)
  • Testing / TDD (30)
  • the contiki strip (13)
  • User experience (3)
  • WCF (3)
  • Webutvikling (32)
  • WPF (9)
  • WTF (12)
  • Last ned Wallpaper

    Programmeringsbloggens tøffe skrivebordsbakgrunn med snippets fra ulike språk laster du ned her!

    Abonner via epost

    Om du vil kan du få alle nye blogposter tilsendt til din epost. Abonner nå, det er kjempeenkelt!

    Meta