Lær deg et scriptspråk!

La oss si at du er en systemutvikler. Du er ansatt for din ekspertise i et av de «to store» applikasjonsspråkene – Java eller C#. Disse språkene kan brukes til svært mange oppgaver. Du kan teoretisk løse ethvert problem med dem, og de er sannsynligvis hovedgrunnen til at cv-en din er salgbar. Så hvorfor lære noe mer enn Java eller C#?

Jeg skal fortelle deg hvorfor du bør lære deg et s.k. scriptspråk. Scriptspråk har andre styrker enn Java og C#, og tilfører allsidighet og produktivitet til verktøyskuffen din. En kompetent håndtverker bruker mer enn hammer på jobb: skrutrekker, meisel og knipetang må også med.

Steve Yegge skrev for noen år siden en glimrende artikkel om hvordan han skiller gode utviklere fra svakere kandidater under jobbintervjuer [1]. Et av poengene hans er at mange utviklere har en akilles-hel: det ene språket de mestrer er ikke ideellt til alle situasjoner. De er «one trick ponies».

Her er et intervjuspørsmål som Yegge bruker til å teste kandidater:

Last year my team had to remove all the phone numbers from 50,000
Amazon web page templates, since many of the numbers were no longer in
service, and we also wanted to route all customer contacts through a
single page.

Let’s say you’re on my team, and we have to identify the pages having
probable U.S. phone numbers in them. To simplify the problem slightly,
assume we have 50,000 HTML files in a Unix directory tree, under a
directory called «/website». We have 2 days to get a list of file
paths to the editorial staff. You need to give me a list of the .html
files in this directory tree that appear to contain phone numbers in
the following two formats: (xxx) xxx-xxxx and xxx-xxx-xxxx.

Hvordan ville du løse dette problemet? Hint: Java og C# er ikke førstevalget til Steve, ei heller mitt. Du KAN løse dette og mange lignende problemer i Java eller C#, men et scriptspråk lar deg løse problemet raskere og mer elegant.

Så hva er scriptspråk og hvorfor er de så nyttige? Jeg definerer kort og godt disse til å være Ruby, Python, og Perl. Alle tre er modne, populære språk. Det betyr ikke så mye hvilket av dem du lærer først: alle sammen deler de fleste av følgende styrker:

  • Førsteklasses støtte for å manipulere tekster og filer.
  • Fungerer bra sammen med kommandolinje-verktøy og shellscripting, spesielt på unix-systemer.
  • Enkle å komme igang med. Vanligvis preinstallert på Unix, Linux og OS X-systemer.
  • Gode til proof of concepts og prototyper. Passer bra til å rask iterere frem og demonstrere konsepter.
  • Ypperlige til å automatisere oppgaver (f.eks scripting av operativsystemer, applikasjoner, byggeprosesser).
  • Er gjerne dynamisk typede språk, noe som lar deg bruke mindre tid på syntax og mer tid på selve oppgaven du skal løse. [2]
  • Kan kjøre oppå, eller sammen med, de tyngre platformspråkene (se JRuby, IronRuby). Best of both worlds!
  • Gir deg et nytt perspektiv på platformer og språk du allerede mestrer. Det er alltid nyttig å utvide horisontene sine! [3]

Høres dette nyttig ut? Har du lyst til å lære mer? En god måte å komme igang på kan være å lese denne boka:

eller denne:

Sett deg så ned med et konkret prosjekt. Finn f.eks en «tidstyv» i hverdagen din – en rutine som kan automatiseres. Lag et script som løser problemet ditt.

Vips: fremtidig tid spart, og du har begynt å legge et nytt, kraftig verktøy i reportoaret ditt!

Referanser:

1) Yegges artikkel om intervju-spørsmål
2) Yegge om styrkene til scriptspråk/dynamiske språk (video)
3) Robert «Uncle Bob» Martin om hvorfor du bør lære nye språk (video)

4 kommentarer om “Lær deg et scriptspråk!”

  1. Siden Java 6 kan man også kjøre script direkte fra Java VM’en, så om man feks ønsker at noe funksjonalitet skal kunne endres uten en rekompilering og redeploy av en Java applikasjon så kan man skrive den biten i et interpretert scriptspråk og kalle det fra applikasjonen. Da er det bare å editere fila scriptet ligger og få hotdeployet endringen uten å måtte gjøre noe mer dilldall.

    Jeg har ikke fått testet dette selv, men så en demo av det på JavaZone i 2009 og presentasjonen ligger her: http://files.looplabel.net/scripting.javazone.2009.anders.sandvig.pdf

    Foreslo dette som en løsning på en brukerhistorie i prosjektet jeg jobber i, men desverre tok frykten overhånd og man endte med å bruke databasen til konfigurasjon og å fortsette med ren Java.

  2. egrep -lr –include «*.html» ‘(\([0-9]{3}\) [0-9]{3}-[0-9]{4})|([0-9]{3}-[0-9]{3}-[0-9]{4})’ /website

    Siden det nå var et unix-system 🙂 Quick ‘n dirty regex, men til sånne jobber så duger det.

  3. @Ivar: Synd når frykten tar overhånd. Takk for linken til JZ09 presentasjonen!

    @Odd Rune: Ja man klarer seg langt med basic unix-verktøy! Kjekt å være i stand til å bruke hele spekteret fra gnu verktøyene, videre opp i scriptspråk, videre opp til Java/C# for de «virkelig tunge løftene». 🙂

  4. Eneste minuset med språkene du nevner er at veien tilbake til Java er tung å gå.

Legg inn en kommentar