Skal jeg lære flere programmeringssprog?

Som udvikler er programmeringssprog et af vores centrale værktøjer. Det kan derfor være tiltrækkende at definere sig ud fra vores programmeringssprog og med stolthed i stemmen sige "Jeg er Java-udvikler!" Når det kommer til stykket kan man jo det samme i alle sprog og det letteste er bare at bruge det samme hele tiden, ikke?

Det er det basale spørgsmål Stefan Tilkov stiller i sit foredrag Challenges & Chances in Polyglot Programming og besvare gennem en række teser.

Første pointe er at sprog ikke er ens og at de i høj grad påvirker hvordan vi tænker. Det gøre os derfor til bedre programmører at lære forskellige sprog, fordi vi får udvidet vores horisont.

Programmeringssprog er også meget mere end bare syntaks og semantik. Det er et helt økosystem, der ud over selve sproget består af alle de omgivende libraries og communities. Hele dette økosystem påvirker hvordan sproget kan bruges og hvilke problmer der er lette at løse.

Desuden bliver det lettere og lettere at bruge forskellige sprog som en del af samme projekt. I dag bliver mange sprog baseret på virtuelle maskiner der understøtter flere forskellige sprog. For eksempel kan man med JVM køre vidt forskellige sprog som Java, JRuby og Clojure i samme applikation. Desuden lægger distribueret design i langt højere grad op til at de enkelte services ens applikation består af kan implementeres individuelt.

Så selvfølgelig skal vi ikke frygte at bruge flere sprog i et fornuftigt miks. Men der betyder ikke at der ikke er grænser. Hvis hver enkelt udvikler i et større projekt bruger hver sit sprog, gør man det umuligt at vedligeholde projekter.

Common sense applies!

Kommentarer (18)
Jacob Sparre Andersen

Jeg håber at nye programmeringssprog repræsenterer ny viden om hvordan man programmerer. Hvis det ikke bare er et naivt håb, så bør man jo lære et nyt progammeringssprog af og til, for at opdatere sin egen viden.

Personligt må jeg dog tilstå at jeg ikke for alvor har lært et nyt programmeringssprog siden 1995. At lære at programmere i Parasail står dog højt på min projektliste.

Principielt bør jeg nok også tage mig sammen og udvikle noget større end små legetøjsprogrammer i et funktionsorienteret sprog.

Nogle forslag til hvilke sprog man kan lære noget nyttigt af?

Troels Henriksen

Haskell er et stereotypisk svar... men det er faktisk også ret relevant. Uanset ens holdning til dets brug i praksis, så er det en ret effektiv måde at udsætte sig selv for en masse usædvanlige idéer indenfor programmering. Man kan naturligvis gå videre med sprog som Agda og Epigram, der er på grænsen mellem bevissystemer og programmeringssprog, men det er nok svært overhovedet at forstå idéen med mindre man i forvejen har erfaring med statisk typet funktionsprogrammering.

Derudover er Erlang et sprog der har utroligt meget at foreslå omkring hvordan man bør designe robuste systemer. Erlang været også været brugt til konstruktion af store industrielle systemer i mange år, så det er et eksempel på hvordan avancerede idéer kan inkarneres i "virkeligheden".

Lars Tørnes Hansen

Nogle forslag til hvilke sprog man kan lære noget nyttigt af?


Tag et kig på D (i dag er D = D2 = D version 2.x) programmeringssproget: http://dlang.org/
- type stærkt (men Ada er mere type stærkt end D2)
- med GC (man kan også kode således at GC ikke bruges), man styrer det selv
- bruger man GC kan man frakoble GC i de tidskritiske steder i programmet, hvor en GC indsamling er højst ubelejligt. En GC stopper alle tråde i programmet, som D compileren kender til.
- virker med C kode.
- concurrency imellem tråde a la Erlang. (Indført i D2).
- mixin macro i stil med macros som i Common LISP (køres kun på oversættelsestidspuktet).
- Walter Bright (ham der skriver reference implementationen af compileren) har skrevet noget om at han muligvis vil give adgang til hele compilerens AST i det 4. subset (mere om det lidt længere nede). Det vil så markant ændre hvad man kan med mixins.
- generics/templates, meget nemmere end i C++.
- strings er en del af sproget, og er UFT8 som standard
- Phobos og Tango for D2 - standardbiblioteker kan bruges samtidigt.
- har 4 subsets af D programmering:
-- 'safe' (mindste subset af D, ingen adgang til pointers her),
-- 'restricted' (mellemste subset af D), og
-- 'system' (hele D programmeringssproget er til rådighed, incl pointers, og man kan lave lav-niveau system programmering i 'system' tilstand.
-- dele af D programmeringssproget er til fuld rådighed, imens du oversætter (det 4. subset).
- programmet kører ikke i en VM - det oversættes til maskinkode
- ... men skrives mere som i et (type stærkt) scripting sprog
- ... og oversættelse er lynhurtig

Når det så er sagt synes jeg personligt at sprogets compiler reference-implementation (DMD) mangler noget afpudsning.
Ligeledes er der bugs i Phobos (memory leaks ved RTTI operationer på objekter), og Tango for D2 har mange af de mere standard ting som jeg savner i Phobos, men Tango for D2 standardbiblioteket har pt alfa/beta status. Det er ting man ville forvente på et lidt højere plan end bare det mest basale for et standard bibliotek jeg savner.

Jeg kiggede på det sidst i 2010, og købte der også en god bog (den eneste der findes) om sproget. Her i 2012 har jeg så også kodet en del tid i det, og jeg vil vente lidt mere tid. Om 1-2 år kan det være at de er ved at være der, hvor jeg synes at der er godt nok til at lave produktionskode med.

Men alt i alt et spændende sprog der slår C med adskillige længder, og meget mindre komplekst end C++ (det sidste er ikke min påstand, men Digital Mars, der selv har lavet en C++ compiler, så de må jo vide hvad de snakker om).

Lars Tørnes Hansen

D's kvaliteter til trods, så ved jeg ikke om det giver meget ny viden om hvordan man programmerer.


Hvorfor skal et nyt programmeringssprog give ny viden om hvordan man programmerer?, og
Behøver et nyt programmeringssprog at give ny viden om om hvordan man programmerer?

Det er mest af alt et sprog der prøver at gøre eksisterende teknikker rarere at arbejde med.


Det er vel også bedre at smide mere arbejde over til compileren for den største del af sin kode (der er Safe D kode).
Den Safe D kode er både simplere, kortere, og har færre fejl end noget tilsvarende kode i f.eks. C.

Der er mindre kode i trusted delen af programmen, og endnu mindre i system delen. Typisk er det kun I/O delen, der er i system delen af programmet.

Simon Shine Blogger

Hvorfor skal et nyt programmeringssprog give ny viden om hvordan man programmerer?


Alt for meget diskussion om design af programmeringssprog handler om deres syntaks frem for deres semantik. Det er kun ved at programmere på radikalt anderledes måder at man risikerer at finde på smarte måder at udtrykke ting.

Populære eksempler: Monaders anvendelse i LINQ, mønstergenkendelse i funktionelle sprog, lambda-udtryk i Python/C#, generics i Java. Det er alle sammen features som er opstået i en slags sprog, men har fundet vej til andre slags sprog.

Peter Makholm Blogger

D's kvaliteter til trods, så ved jeg ikke om det giver meget ny viden om hvordan man programmerer. Det er mest af alt et sprog der prøver at gøre eksisterende teknikker rarere at arbejde med.


En ny kombination af eksisterende teknikker kan godt give en en ny indsigt i hvordan man programmerer.

En feature som 'List Comprehension' har jeg set i en række forskellige udgaver før jeg nogenlunde tør sige at det er sådan og sådan jeg mener det børe se ud og det er sådan og sådan det bør bruges.

Nye kombinationer af eksisterende teknikker kan også give en interessant indsigt. Men ser vi dog ikke snart et populært sprog der har type-inferens ala SML? (Yeah Haskell, men altså...)

David Askirk Fotel

Kan jeg klart anbefale lisp. Det er både sjovt, og det har mange dejlige ting at man kan tage fat på.

Mange af disse features er så arvet til andre sprog, så man kan som regel finde en ting eller to fra lisp i andre sprog.

Oooog lige en sjov en: http://en.wikipedia.org/wiki/Greenspun's_tenth_rule

Opdatering: Jeg skal så sige at jeg mest koder i enten nodejs eller python hvis jeg lige skal knalde noget sammen.

Troels Henriksen

Scala har type-inferens. Ikke så gennemført som SML, men godt nok.

Det er faktisk en vigtig ting man kan lære af at undersøge forskellige sprog. Hvis man vil have en feature som typeinferens er man nødt til at begrænse sig på utroligt mange andre punkter. Elegant sprogdesign handler ikke blot om minimalisme af æstetiske årsager, men fordi det tillader mere sofistikerede mekaniske operationer.

OCaml har lige så god typeinferens som SML og er ret anvendeligt. (Men det synes jeg nu altså også at Haskell er.)

Troels Henriksen

D har type-inferens

auto en_variabel = ...

Jeg ved så ikke om det så lige er a la SML, eller Haskell - som jeg ikke kender til.

Der er ingen fast definition af begrebet "typeinferens", så ovenstående kan godt gå ind under det. Jeg vil dog mene at det er et ret trivielt tilfælde, da typen antageligvis blot tages fra det udtryk, som bruges til at initialisere værdien. Det ville være tættere på Hindley-Milner typeinferens a la SML hvis man blot kunne sige auto en_variabel (altså uden initialisering), og oversætteren så ville regne ud at der må være tale om et heltal, når den senere ser udtrykket en_variabel+1.

I SML behøver du sædvanligvis ikke angive funktioners retur- og parametertyper, og naturligvis heller ikke typerne for variabelbindinger i almindelighed. Det give sikkerheden og effektiviteten fra statiske typer, men uden den notationelle belastning.

Peter Juhl Christiansen

Er ud af en særligt udvalgt skare der har lært de geniale sprog Trine og Beta mfl som studerende i Århus. Den gang havde Daimi det som deres filosofi at man skulle være bekend med de forskellige paradigmer inden for programering (procedural, Objekt-orienteret og Funktional som minimum).

Er i bagklogskabens klare lys meget glad for at være “tvunget” til at lære forskellige sprog, og har siden lært mig selv en del nye. Kastede mig fx. over Ruby for nok ca 12 år siden, og bruger det i dag til et utal af ting som Java eller C ikke er oplagt til.

Fortiden er Clojure det jeg har valgt at kaste mig over, selvom sprog som Erlang og Haskell uden tvivl også ville kunne udvide min horisont.

For mig er der ingen tvivl at Funktional programering er et nyttigt redskab. Og at det jeg i Clojure bruger Pure Functions, High order Functions (HOF’s ...skål : ) og imutabilety, har ud over at gøre mig til Clojure programmør også har gjort mig til en bedre Java programmør.

Så til enhver derude der betragter sig selv som software udvikler vil jeg anbefale at man finder sig et nyt sprog man kan lære, også selvom det bare er fx Dart ...(that was a joke)

Log ind eller Opret konto for at kommentere