Hvorfor programmeringsspråket Go?
Innledning
Programmeringsspråk er verktøy for å skape produkter. En utviklers ferdigheter defineres ikke utelukkende av hvilket språk som benyttes. Imidlertid kan valget av språk og måten det behandles på direkte påvirke en utviklers tankesett og vekstretning. Spesielt er det å sammenligne det nåværende språket med andre språk til stor hjelp for å utvide den tekniske horisonten og utvikle en følelse for essensen. I denne artikkelen vil jeg forklare hvorfor jeg valgte Go, og hvordan det bidrar til en utviklers vekst, ved å presentere fem aspekter.
1. Go er et språk som balanserer ytelse og produktivitet.
Det finnes utallige programmeringsspråk i verden, og alle språk har fordeler og ulemper basert på deres egenskaper.
- C tilbyr utmerket ytelse og lavnivåkontroll, men krever at utvikleren selv håndterer minnehåndtering, og mangelen på høynivåfunksjonalitet fører til lav produktivitet og vanskelig vedlikehold.
- C++ og Rust støtter ulike avanserte funksjoner som objektorientering, maler og metaprogrammering, men syntaksen er kompleks, læringskurven er bratt, og langsom kompileringstid gjør dem uegnet for gjentatt distribusjon.
- Java og C# tilbyr plattformuavhengighet og stabilitet, og brukes mye i storskala tjenester, men de kjøres på tunge virtuelle maskiner, noe som gjør distribusjons- og kjøremiljøene komplekse og ressurskravene høye.
- Python og Javascript er egnet for rask utvikling takket være deres enkle syntaks og rike økosystem, men de har dårlig kjøreytelse og lav pålitelighet i økosystemet, noe som avslører strukturelle begrensninger i storskala systemer.
På den annen side er Golang et språk som har en utmerket balanse mellom ytelse og produktivitet. Siden Go er et kompilert språk som C, garanterer det høy kjøreytelse, samtidig som det tilbyr fleksibilitet på tolker-nivå med rask kompileringstid. Med andre ord er Go et balansert språk som kan brukes stabilt i de fleste miljøer uten tydelige ulemper.
2. Go forhindrer Cargo Cult Programming.
Under andre verdenskrig bygde de allierte luftforsvarsbaser på stillehavsøyene for å hjelpe krigsinnsatsen. Store mengder forsyninger og militært utstyr endret livet til soldater og innfødte betydelig. Innbyggerne så for første gang fly som fraktet produserte klær, hermetikk og andre varer. Etter krigen ble basene forlatt, og lasten kom ikke lenger. Derfor kledde øyboerne seg ut som flygeledere, soldater og sjømenn for å etterligne soldatene, bygde noe som lignet en rullebane, og brukte pinner for å signalisere landing til flyene. De fortsatte å marsjere for å få lasten til å falle i fallskjerm fra flyene. Men flyet de ventet på kom aldri.
Cargo Cult Programming refererer til en utviklingsvane der man etterligner utseendet på kode eller teknologi uten å forstå prinsippene bak den. Blant moderne utviklere, spesielt innen webutvikling, er det vanlig å etterligne uten å forstå betydningen. Takket være rammeverk som React, Next, Spring og Django har utvikling blitt mulig uten å kjenne den interne strukturen, men i mange tilfeller klarer man ikke å håndtere selv små feil på riktig måte. Med tillegg av nylige AI-kodegenereringsverktøy har utviklingsmetoden der man kopierer og limer inn resultater i stedet for å skrive kode selv eller forstå prinsippene, blitt enda mer utbredt.
Go unngår fundamentalt disse problemene på språksfilosofisk nivå. Go er et språk designet rundt standardbiblioteker, ikke rammeverk. Utviklere kan bygge faktiske tjenestenivå-webservere med bare grunnleggende biblioteker som net/http og database/sql, og gjennom dette utvikler de naturlig intuisjon og forståelse for lavnivåstrukturer som nettverk, databaser og I/O. En slik struktur, som gjør det mulig å bygge et solid fundament fra bunnen av uten å være avhengig av rammeverk, danner grunnlaget for at utviklere kan fortsette å vokse uten å miste essensen av teknologien.
3. Go tilbyr en kraftig samtidighet-modell.
Moderne CPU-er utvikler seg i retning av å forbedre ytelsen ved å utnytte flere kjerner parallelt, snarere enn å øke hastigheten på en enkelt kjerne. Som et resultat har samtidighet, der et enkelt program kan behandle flere oppgaver samtidig, blitt en nødvendighet, og viktigheten av språk som effektivt kan designe og implementere dette, øker stadig. Go er et språk optimalisert for dette miljøet. Goroutine er en lettvekts-tråd levert av Go, som kan opprettes med bare noen få KB stakk, og som knapt forbruker systemressurser selv når tusenvis kjøres samtidig. Go-runtime distribuerer effektivt et stort antall goroutiner til OS-tråder gjennom sin egen M:N scheduler, og denne prosessen optimaliseres automatisk uten direkte inngripen fra utvikleren. Dette gjør det mulig for utviklere å designe samtidighet-logikk på en sikker og konsistent måte, uten kompleks synkroniseringslogikk eller tilpasset scheduling.
I tillegg støtter Go aktivt moderne samtidighet-design ved å bruke synkroniseringsverktøy som mutex og waitGroup, samt channel og context. Takket være denne strukturen kan utviklere naturligvis tilegne seg en praktisk forståelse av samtidighet og parallellitet uten å være bundet av komplekse teorier, og oppnå et høyt nivå av abstraksjon og designevne som kan brukes fra bunnen av.
4. Go er et språk skapt av fremragende utviklere med et klart fokus.
Go er et språk som ble skapt under ledelse av Google og legendariske utviklere som Robert Griesemer, Rob Pike og Ken Thompson. Spesielt er disse skaperne av Unix og C-språket, samt mestere innen kompilator- og systemprogramvare, noe som i seg selv beviser Gos tekniske pålitelighet. Med bidrag fra utallige Google-ingeniørers praktiske erfaring og kunnskap om drift av storskala tjenester, har Go fra begynnelsen av hatt som mål å løse virkelige problemer, og har utviklet seg med en konsistent filosofi og retning.
Andre språk har ofte skapt forvirring blant brukere og i fellesskapet på grunn av brudd i kompatibilitet, designendringer, ustabile lisenser og ikke-standardiserte økosystemer. For eksempel ble Python-økosystemet delt i to i mange år på grunn av kompatibilitetsbruddet mellom versjon 2 og 3, og etter Oracles oppkjøp av Java har det vært en økning i tilfeller der bedrifter vegrer seg for å ta det i bruk på grunn av ustabile lisenspolitikk. Videre eksisterer CJS og ESM fortsatt side om side i Node.js, og tilbyr ikke et konsistent modulsystem.
Derimot er Go et språk som prioriterer konsistens og stabilitet. Go-teamet opprettholder strengt bakoverkompatibilitet, og når nye funksjoner introduseres, følger de en trinnvis integrasjonsmetode for å unngå konflikter med eksisterende kode. Syntaksen unngår unødvendige nøkkelord og begrenser overdreven abstraksjon, for å forhindre at språket blir unødvendig komplekst. I tillegg sikrer konsistente offisielle verktøykjeder som go fmt, go mod, go build, go test at alle Go-prosjekter har samme utviklingsmiljø og struktur, og det kraftige og praktiske standardbiblioteket støtter pålitelig de fleste funksjonene som er nødvendige for praktisk utvikling, som webservere, filbehandling og databaseintegrasjon, uten behov for separate rammeverk.