Lær nye programmeringsspråk: 5 spennende valg for fremtiden

For visse individer er det mest hensiktsmessig å ikke engasjere seg i læring av et nytt programmeringsspråk. De argumenterer for at det ikke er behov for ytterligere et språk.

Har vi ikke allerede tilstrekkelig mange?

Kan ikke de eksisterende verktøyene utføre jobben?

Og så finnes det de utrettelige utforskerne, som griper muligheten til å teste nye konsepter og oppdage skjulte perler. For dem er læring et selvstendig mål, og de trenger ikke mye overtalelse for å investere sine helger i å utvikle et konsollbasert kortspill på et obskurt og nyutviklet språk.

Uansett hvilken gruppe man tilhører, er det et felles ønske: Vi ønsker alle å bruke tiden på noe som ser lyst ut for fremtiden.

For tilhengerne av de etablerte språkene har deres foretrukne språk allerede oppnådd betydelig fremdrift og vil sannsynligvis fortsette å ha en positiv fremtid. Til dem vil jeg minne om at deres nå modne utviklingsverktøykjede en gang ble ansett som noe mange var skeptiske til. Slik er det også i dag; ny teknologi blir introdusert for å løse nye utfordringer eller for å forenkle utviklingsprosessen.

Hvis noe gjør dette på en radikal måte, er det stor sannsynlighet for at det vil vinne terreng og til slutt nå toppen. Når det skjer, vil du ikke bli hengende etter. 🙂

Og til de som er entusiastiske for det nyeste, en advarsel: Det er viktig for en programmerer å ha det gøy, men vi må også sørge for at vi ikke sløser bort energien vår uten et klart mål.

Javisst, Brainfuck er et usedvanlig komplekst, puslespill-lignende og morsomt språk, men det vil neppe være nyttig å forfølge det på alvor. Du trenger noe som er innovativt, meningsfullt og har en solid base.

Utvelgelsesprosessen for disse språkene

Å velge et språk, spesielt når man vurderer nye språk for fremtidig nytte i arbeidslivet og tilfredshet, kan være en krevende oppgave. Hver språkutvikler er overbevist om at de har konstruert det optimale språket og har løst alle utfordringene som finnes. Hvordan skal man da velge?

I denne artikkelen har jeg fokusert på et par kriterier for å begrense søket mitt.

Lanseringsdato

Jeg har bevisst unngått språk som er ekstremt nylig utviklet.

Med nylig mener jeg språk som er mindre enn 5-6 år gamle på tidspunktet for denne artikkelen, spesielt de som ikke har nådd stabilitet (dvs. versjon 1.0). Dette utelukker dessverre noen ekte perler, som Crystal. Jeg håper likevel å komme tilbake til dette og skrive om suksessen en dag. 🙂

En kodebit i Crystal («Fast som C, Slick som Ruby»)

For meg er 5-12 år et ideelt tidsrom, da språket har stabilisert seg og flere forbedringer er under utvikling. Det finnes selvfølgelig unntak, som vil bli vurdert der det er relevant.

Dette er et opplagt poeng, men blir ofte oversett når vi blir begeistret for noe nytt. For mange er støtte fra et stort selskap nok til å garantere suksess, men dette er ikke alltid tilfelle.

Apple’s Objective-C og nå Swift har lyktes fordi de var de eneste alternativene i et svært kontrollert økosystem, men Facebook’s D og Hack (en mindre vellykket versjon av et allerede upopulært språk, etter min mening) er fremdeles lite mer enn eksperimenter.

Den ideelle kombinasjonen ville være et språk som er støttet av et stort og stabilt selskap, samtidig som det vokser raskt i popularitet (som React).

Men kjernen i saken er fellesskapet. Hvis et språk ikke skaper engasjement, og det ikke er tilstrekkelig antall utviklere som kan utdanne og spre budskapet, vil det neppe klatre ut av GitHub-arkivet.

Dette utelukker modne og fascinerende språk som Racket og Erlang, ettersom deres vekstkurve har stagnert.

Fokusert og tydelig unik salgsposisjon (USP)

Det tredje jeg ser etter er et klart formål med språket. For eksempel er en forbedret versjon av PHP, som løser navneproblemer og oversetter til standard PHP, ikke interessant for meg.

Fordelene er for små til å rettferdiggjøre overgangen hvis alle prøver å adoptere det. Med dette som kriterium må jeg avvise prosjekter som CoffeeScript og mange andre lignende kompiler-til-JavaScript språk.

Helt ærlig må jeg avvise forbedringer som kun gjelder syntaks. Historien viser at nytte er viktigere enn brukervennlighet når det gjelder språk. Så hvis alle nye språk bare fokuserer på en bedre brukeropplevelse, vil de ikke bli vurdert for denne listen.

Tydelig og konsekvent syntaks

Jeg vet. Jeg sa nettopp at syntaks ikke er viktig. Vel, for å være presis, sa jeg at «forbedringer kun for syntaks» ikke spiller noen rolle. Men det er sagt, er syntaks fortsatt en viktig faktor for produktivitet og vedlikehold, så det er noe som definitivt tas med i mine vurderinger.

Sammen med syntaks kommer ideen om konsistens. Funksjonsnavn, modulstrukturering osv. er avgjørende ting et språk ikke kan ignorere. Det er 2018, og enda et PHP-lignende språkdesign ville være en skam for oss alle. Så, la oss gå videre til mine fem beste anbefalinger.

1. Julia

For forskerne ved MIT var de tilgjengelige språkene for datavitenskap i beste fall et kompromiss. Python, til tross for sin klarhet og popularitet, manglet iboende funksjoner for å håndtere dataobjekter. I tillegg var Python, som et tolket språk, for tregt for dem (ikke bibliotekene, som stort sett er skrevet i C).

Men kanskje den største innvendingen var den kompliserte samtidighetsmodellen, og mangelen på en modell for parallell databehandling, som er en nødvendighet innen superdatabehandling.

Som et resultat ble Julia utviklet.

Julia nådde sin stabile utgivelse 29. september 2018, knapt noen dager før denne artikkelen ble skrevet! Her er hva den offisielle nettsiden sier om dens egenskaper:

Julia er spesielt god til numerisk databehandling. Syntaksen er ideell for matematikk, mange numeriske datatyper støttes, og parallellitet er tilgjengelig fra starten. Julias multiple sending er naturlig for å definere tall- og array-lignende datatyper.

Syntaktisk sett kan Julia beskrives som en kombinasjon av Python og C. Dette er trolig første gang et språk har forsøkt å kombinere disse egenskapene med hell.

For å gjøre det enkelt, er Julia lynrask og krever ikke streng skriving. Her er noen ytelsesresultater:

De offisielle Julia-referansene

Som du ser, er Julia litt tregere enn C, men betydelig raskere enn Java og Python. Og hva slags kode gir Julia oss?

Her er implementeringen av en funksjon for å beregne hypotenusen i en rettvinklet trekant:

Selv om store deler av Julias økosystem er rettet mot matematisk arbeid, tror jeg det har en lys fremtid også for generell bruk.

Det er det første språket jeg vet om som har innebygd støtte for parallell databehandling, så det vil ikke være overraskende om det blir mer populært i web- og IoT-domener.

2. Rust

Hvis du har sett de nyeste versjonene av Firefox, vet du at etter mange års arbeid ser det ut til at de endelig kan ta markedsandeler fra Chrome.

Hvis nettleseren oppleves som lett, rask og gjengir sider raskt, er det takket være språket Mozilla har utviklet: Rust.

Å si at Rust har en lys fremtid ville være en underdrivelse; språket er allerede en stor suksess, og hvis du ikke har hørt om det før, er det fordi bruksområdene er spesialisert og målet er ambisiøst: å erstatte C++! Vi har endelig et språk som ikke bare er i stand til dette, men som allerede gjør det.

For de som er frustrerte over C++’s kompliserte design og minnehåndteringsutfordringer, er Rust et friskt pust.

Slik ser et Rust-program ut:

Kortfattet og elegant, etter min mening. Rust følger en funksjonell programmeringsstil, som gjør koden mer komponerbar, og det er ingen objektorienterte hierarkier å forholde seg til.

Hva gir Rust mot til å utfordre C++? Det er den nye minnemodellen. I stedet for å bruke den gamle new()/delete() metoden, introduserer Rust konseptet med eierskap.

I stedet for å allokere og få tilgang til minne direkte, «låner» Rust-variabler fra hverandre, med strenge begrensninger satt av kompilatoren. Det overordnede konseptet er for komplekst til å forklare kort, så jeg oppfordrer deg til å sjekke ut den offisielle dokumentasjonen for å lære mer.

Poenget er at dette resulterer i 100 % minnesikkerhet uten behov for en søppelinnsamler, noe som er en stor fordel.

Rust har tatt systemprogrammeringsverdenen med storm. Det er allerede støtte på flere plattformer, driver nettlesere og gjengivelsesmotorer, erstatter raskt C/C++ kode i produksjonssystemer, og brukes til å utvikle operativsystemer.

Det er kanskje ikke alle sin drøm å lage en ny nettleser eller enhetsdriver, men Rust sprer seg allerede til andre områder. Det finnes flere velfungerende og ekstremt raske nettrammeverk i Rust, og stadig flere applikasjonsbiblioteker blir utviklet.

Hvis du er interessert i en spennende fremtid, er Rust et perfekt språk å lære nå. Rust er et tog som har forlatt stasjonen, men det er fortsatt tid til å hoppe på det på vei mot stjernene!

Lær Rust fra Dmitri Nesteruk.

3. Elixir

Blant språkene som fokuserer på utviklertilfredshet, har Ruby lenge hatt førsteplassen. Det er et språk som leses som poesi og har nok snarveier til å redusere den mentale belastningen betraktelig.

Det er ikke overraskende at Rails-rammeverket fortsetter å være dominerende innen full stack-utvikling for seriøse utviklere og startups. Men ikke alle var fornøyde med Rails, spesielt en av kjerneutviklerne – José Valim. Jeg tror skaperen selv best forklarer opprinnelsen til dette språket i et intervju:

Det er en lang historie, men jeg skal prøve å gjøre det kort. I 2010 jobbet jeg med å forbedre ytelsen til Rails når jeg jobbet med flerkjernesystemer, ettersom maskinene våre har flere og flere kjerner. Opplevelsen var imidlertid ganske frustrerende, ettersom Ruby ikke hadde de nødvendige verktøyene for å løse samtidighetsproblemer. Det var da jeg begynte å undersøke andre teknologier og forelsket meg i Erlang Virtual Machine.

Jeg begynte å bruke Erlang mer og mer, og med erfaring oppdaget jeg at jeg savnet noen konstruksjoner som finnes i mange andre språk, inkludert funksjonelle språk. Det var da jeg bestemte meg for å lage Elixir, som et forsøk på å bringe ulike konstruksjoner og utmerkede verktøy på toppen av Erlang VM.

Og dermed ble Elixir født!

På samme måte som Scala forbedrer Java, men bruker den samme virtuelle maskinen (JVM), utnytter Elixir den tiår gamle og testede Erlang virtuelle maskinen.

En diskusjon om Erlang er utenfor rammen av denne artikkelen, men det minste du bør vite er at det er telekomindustriens best bevarte hemmelighet: hvis telefonnettverkene våre er mer pålitelige enn våre nettbaserte systemer, er det takket være Erlang.

Enkelt forklart betyr dette at hvis du bygger et sanntidssystem som chat, er Elixir mye mindre ressurskrevende og mer stabilt enn Ruby (eller PHP, Python og Java).

En maskin som kjører Ruby og har maksimalt 10 000 samtidige tilkoblinger, kan enkelt håndtere 200 000 med Elixir, og fortsatt ha nok RAM til å kjøre et 2D-spill!

Elixir-kodebit

Syntaktisk sett minner Elixir veldig om Ruby, og det dominerende nettrammeverket Phoenix minner veldig om Rails. Jeg ser på dette som positivt. Sammen med Laravel, Grails, Masonite etc., nærmer vi oss et punkt der alle språk har Rails-lignende rammeverk som kan lette overgangen. Noen vil kanskje kritisere «mangelen på originalitet», men jeg klager i hvert fall ikke.

Til slutt er Elixir en av de teknologiene som er både oppfriskende, behagelige og praktiske. Flere Ruby-butikker (og også ikke-Ruby-butikker) bytter til Elixir, og store selskaper som Pinterest bruker det i produksjon med svært tilfredsstillende resultater.

Mange mener at Node.js var et midlertidig forsøk på å løse samtidighet, og at det snart vil bli erstattet av Elixir. Jeg er enig med dem. 🙂

4. Kotlin

I 2017 slapp Google en bombe over den uvitende mengden. Selskapet kunngjorde formelt at Kotlin skulle være det primære språket for Android-utvikling, noe som sendte sjokkbølger gjennom bransjen.

At Google aktivt har ønsket å erstatte Java er ikke overraskende etter å ha blitt saksøkt av Oracle. Adopsjonen av Kotlin var imidlertid uventet, og det er en god sjanse for at Google snart vil introdusere sin egen virtuelle maskin. Foreløpig nyter Kotlin en bølge av popularitet.

Kotlin er utviklet av JetBrains, et selskap som er mest kjent for sine kraftige koderedigerere. En av dem, IntelliJ IDEA, danner grunnlaget for Android Studio. Målene for Kotlin er sikkerhet, kortfattethet og 100 % interoperabilitet med Java.

Kotlin-kompilatoren arbeider hardt for å eliminere alle nullpeker-unntakene som er så vanlige i Java-verdenen. Den reduserer også mengden kode betraktelig, noe som vil være en lettelse for mange.

Her er en flott kodesammenligning mellom Java og Kotlin:

Bildekreditt: hype.codes

Kotlin-koden er betydelig kortere og har mye mindre kognitiv overbelastning.

Men la oss gjøre en ting klart: Kotlin vil mest sannsynlig ikke erstatte Java, selv om det raskt blir en favoritt. Jeg tror at om ti år vil små til mellomstore team foretrekke Kotlin, mens store grupper vil fortsette å bruke Java på grunn av eksisterende systemer.

Når det er sagt, har Kotlin en veldig lys fremtid, siden den gjør alt det Java gjør, kan integreres med Java-kode uten problemer, og er mye mer behagelig å bruke!

5. TypeScript

Jeg måtte virkelig anstrenge meg for å ikke sette Elm på denne listen! Alt i meg skrek «Elm! Elm!», men uansett hvor revolusjonerende ideene er eller hvor god syntaksen er, er Elm ennå ikke et populært alternativ for front-end-utvikling. 🙁 Uansett, la oss gå videre til det som er populært: TypeScript.

JavaScript er som ville bær: ubehagelig og vanskelig å jobbe med, men vi må bruke det hvis vi ønsker å overleve i front-end-utvikling. Det har blitt gjort mange forsøk på å erstatte det (og den nye WebAssembly-standarden vil sannsynligvis lykkes), men det som virkelig fanget alles oppmerksomhet var supersettet utviklet av Microsoft.

Det er stor sannsynlighet for at du har hørt om TypeScript. Angular var det første rammeverket som adopterte det fra versjon 2 og utover, og folk la fort merke til det. Det er fordi TypeScript legger til sårt tiltrengte og fantastiske superkrefter til det mest kjente programmeringsspråket i verden.

Det er endelig mulig å skrive JavaScript-kode uten å lide og banne!

Her er forbedringene TypeScript tilbyr:

✓ Sterk skriving: Endelig er en tekststreng ikke et tall, og et tall er ikke et objekt, som ikke er en tom matrise!

✓ Typekontroll ved kompilering: Hvis koden kompileres uten feil, er den mer eller mindre garantert fri for de vanlige JavaScript-feilene.

✓ Klasser og moduler: Ja, klasser er standard i ES6, men de er også inkludert i TypeScript, i tillegg til et fint modulsystem.

✓ Typeslutning: For komplekse typer kan typen enkelt identifiseres av kompilatoren, noe som sparer deg for hodebry.

✓ Asynkron/vent: Nøkkelordene og mønstrene for asynkront/vent er grunnleggende, så du slipper å rote med løfter og tilbakeringinger!

Navneområder, generiske typer, tupler… Jeg kunne fortsette, men det burde være tilstrekkelig å si at TypeScript gjør en av de verste utviklingsopplevelsene til en av de beste.

TypeScript-kodebit

Effekten av TypeScript er ubestridelig. Det har utkonkurrert andre forsøk, som Googles Dart (selv om det gjør et comeback via Flutter, et mobilutviklingsrammeverk), og har åpnet øynene til JS-utviklere for fordelene med sterkere typer.

Som et resultat har betydelige biblioteker som React, D3, Vue (til og med jQuery!) nå en TypeScript-versjon, og i de beste programvarehusene rundt om i verden skrives all JavaScript-kode som TypeScript-kode. TypeScript er også tilgjengelig for Node.js.

Du vil kanskje bli overrasket over å høre at skaperen av Node.js, etter å ha beklaget offentlig opprettelsen av Node.js, jobber med en ny kjøretid (det finnes ingen offisiell nettside, bare en GitHub-repo) som bruker TypeScript som primært språk.

De gode nyhetene? TypeScript er et lett språk å lære med betydelige fordeler i fremtiden. Hvis du er en middels JavaScript-utvikler, vil du kunne lære nok TypeScript i løpet av et par dager til å overføre all eksisterende kode!

Konklusjon og ansvarsfraskrivelse

Visse språk opplever også popularitet, men har ikke blitt inkludert i denne listen av ulike grunner. Her er en rask oppsummering:

  • Golang: Allerede etablert som et populært språk, selv om det ikke er det mest populære. Jeg tror Golang har flere konkurrenter som vil holde markedsandelen relativt lav.
  • R: R er allerede populært blant dataforskere, og det er lite sannsynlig at det vil tiltrekke seg applikasjonsutviklere. Maskinlæringsbiblioteker er på vei inn i alle større språk (selv PHP har dem nå), så det er bare å vente litt. 🙂
  • Swift: Apple har et solid grep om sitt økosystem, og Swift er det eneste språket som er tilgjengelig der. Tidligere var Objective-C populært, slik Swift er nå. Jeg anser det som juks og nekter derfor å inkludere det her. 😀

Fremtiden er alltid usikker, og en måte å gjøre karriere på er å holde seg til det som fungerer, og unngå å la seg «distrahere». Hvis det er din tilnærming, er Java, PHP, Python, Ruby, etc., utmerkede språk å holde seg til. Men for noen av oss er det ikke nok å følge normen. Vi vil utforske og satse stort på fremtiden. Hvis du tilhører sistnevnte gruppe, bør et av disse fem språkene stå øverst på listen din.

Når du vurderer et nytt språk, la ikke innsatsen overvelde deg, for det er ikke så mye arbeid. Hvis du allerede kan et par programmeringsspråk, kan du lære et av disse på maksimalt to måneder, ved å bruke 5-6 timer per uke. Samtidig vil mulighetene og den økonomiske gevinsten som kan genereres i fremtiden være mye større.

Har jeg glemt et viktig språk her? Eller har jeg kanskje tatt feil av noen av språkene som er listet her? I så fall, legg gjerne igjen en kommentar og hjelp meg med å forbedre meg. 🙂