Mener Go er det beste språket for nybegynnere

– Go, for nybegynnere i grunnleggende programmering, treffer bedre enn både Java, Kotlin og Python, skriver Christian Bjørnsrud, og forklarer hvorfor.

Christian Bjørnsrud
Christian Bjørnsrud er konsulent i Infosys Norway, de siste to årene ute hos Telenor, og har klare meninger om hvilke programmeringsspråk nybegynnere bør starte med.
Publisert

✍ leserinnlegg

Dette er et leserinnlegg fra en ekstern skribent, som betyr at innholdet ikke nødvendigvis speiler kode24s meninger. Vil du også bidra? Send oss en epost på [email protected], eller les mer her!

I diskusjoner om hvilket programmeringsspråk nybegynnere bør starte med, trekkes ofte popularitet, arbeidsmarked og "moderne" syntaks frem. 

Jeg mener dette er feil fokus. Spørsmålet bør heller være hvilke språk som faktisk hjelper nye utviklere med å bygge gode og generaliserbare mentale modeller for hvordan kode fungerer.

Jeg deltok nylig i en diskusjon på Reddit om hvorvidt Kotlin er et godt førstespråk for nybegynnere, i forbindelse med evaluering av et programmeringskurs på videregående nivå i USA (high school). Kurset brukte per i dag Java, men de ansvarlige vurderte Python og Kotlin som mulige alternativer.

Mitt standpunkt i denne diskusjonen var at verken Python eller Kotlin egnet seg spesielt godt som førstespråk for å lære grunnleggende programmering, selv om begge språkene utvilsomt er svært behagelige og produktive å jobbe med for erfarne utviklere. 

I stedet argumenterte jeg for at Go (Golang), i mange undervisningskontekster, faktisk er bedre egnet enn begge, nettopp fordi språket, etter min mening, i større grad støtter utviklingen av gode og generaliserbare mentale modeller hos nybegynnere. 

Kjernen i argumentet mitt var altså at et førstespråk bør optimalisere for forståelse, ikke for komfort eller produktivitet.

Førstespråk handler om mentale modeller, ikke trender

Når man skal lære programmering på nybegynnernivå, bør fokuset etter min mening ikke ligge på popularitet, arbeidsmarked eller hvor "moderne" et språk fremstår, men på hvilke egenskaper som faktisk hjelper nye studenter med å forstå hva som skjer når et program kjøres, og hvordan kode henger sammen på et mer fundamentalt nivå. 

Et førstespråk trenger ikke være det språket man potensielt bruker lengst, men bør heller være det språket som best etablerer et mentalt fundament.

De mentale modellene som etableres tidlig, er langt mer verdifulle enn å raskt "mestre" syntaksen i ett konkret språk, nettopp fordi de i stor grad lar seg overføre til andre språk senere. 

På sikt gjør dette utvikleren mindre avhengig av å tenke innenfor rammene av ett bestemt språk eller økosystem.

Det er lett å ende opp med å lære seg mønstre og idiomer gjennom imitasjon.

Når komfort kan være til hinder for forståelse

Språk som Python og Kotlin oppnår mye av sin produktivitet ved å abstrahere bort detaljer som er pedagogisk nyttige å forholde seg eksplisitt til tidlig. 

De tilbyr mange alternative måter å uttrykke samme idé på, benytter omfattende syntaktisk sukker, og gjør det mulig å skrive fungerende kode uten nødvendigvis å ha en tydelig modell av hvorfor den fungerer.

For nybegynnere kan dette gi raske resultater og tidlig følelse av mestring, noe som ofte fremheves som et argument særlig i favør av Python som førstespråk. Etter min vurdering skjer dette imidlertid ofte på bekostning av dypere forståelse. 

Det er lett å ende opp med å lære seg mønstre og idiomer gjennom imitasjon, fremfor å utvikle robuste mentale modeller for kontrollflyt, typer, tilstand og programstruktur.

Hvorfor Java faktisk fungerer bedre pedagogisk

Java er etter mitt syn bedre egnet som førstespråk enn Python, nettopp fordi språket er langt mer eksplisitt i hvordan sentrale konsepter uttrykkes. 

Verbositeten tvinger studenten til å forholde seg direkte til typer, scope, objektstruktur, objektopprettelse og kontrollflyt på en mer direkte måte enn det man gjør i Python.

Selv om dette gjør at selv enkle programmer blir mer omstendelige å skrive, bidrar det samtidig til at programmets struktur og oppførsel blir lettere å resonnere presist rundt. 

I en pedagogisk sammenheng er dette, etter min vurdering, viktigere enn færrest mulig kodelinjer og tidlig produktivitet.

Go: Eksplisitthet uten unødvendig kompleksitet

Go kan igjen argumenteres for å være enda bedre egnet enn Java i denne sammenhengen, fordi språket kombinerer eksplisitthet med et bevisst minimalistisk design. 

Det finnes få alternative måter å uttrykke de samme tingene på, noe som reduserer kognitiv belastning knyttet til valg av fremgangsmåte, stil og idiomer, og flytter fokus over på hva programmet faktisk gjør.

Språket har lite syntaktisk sukker, og både kontrollflyt, feilhåndtering og typeinformasjon er eksplisitt uttrykt i koden på en måte man i langt mindre grad ser i for eksempel Python. 

Resultatet er at studenten i større grad kan bruke mental energi på å forstå eksekvering og dataflyt, fremfor å navigere språklige variasjoner.

Om objektorientering og Go

Det innvendes ofte at Go ikke er et objektorientert språk, og dette er korrekt i en formell, språkteoretisk forstand. 

I praksis er imidlertid konsekvensene av dette ofte mindre dramatiske enn det fremstilles som.

Ved bruk av structs og metoder kan man fint organisere Go-kode på en måte som ligner et objektorientert perspektiv. 

For en nybegynner vil dette, både konseptuelt og praktisk, i stor grad samsvare med hvordan objektorienterte prinsipper faktisk ofte anvendes i språk som Java og Python, særlig i daglig programmeringspraksis.

Det bør være eksplisitt, forutsigbart og relativt minimalistisk.

Produktivitet kommer etter forståelse

Poenget her er altså ikke en generell kritikk av Python eller Kotlin. Begge er svært gode og produktive verktøy for utviklere som allerede har etablert solide mentale modeller for hvordan kode fungerer. 

Samtidig er mye av denne komforten et resultat av at mange pedagogisk relevante detaljer abstraheres bort, detaljer som nybegynnere ofte trenger å se for å bygge nettopp mentale modeller av hva som foregår.

Et godt førstespråk bør derfor, etter mitt syn, optimalisere for forståelse fremfor produktivitet, selv om disse to ikke nødvendigvis står i motsetning til hverandre. 

Det bør være eksplisitt, forutsigbart og relativt minimalistisk, slik at man først lærer hvordan programmer faktisk er bygget opp og kjøres, før man lærer hvordan de kan skrives raskt og effektivt. 

Ideelt sett skjules mindre, uten at studenten samtidig drukner i boilerplate kode, og språket prioriterer konseptuell klarhet fremfor komfort.

Med dette som utgangspunkt mener derfor jeg at Go, for nybegynnere i grunnleggende programmering, treffer bedre enn både Java, Kotlin og Python. 

Jeg er nysgjerrig på hvordan andre ser på dette, særlig de som har erfaring med undervisning eller opplæring i programmering! 👇

Powered by Labrador CMS