Kun kuulin Go:sta, Googlen omasta ohjelmointikielestä, olin kiinnostunut. Vuonna 2007 suunniteltu ja julkaistu Go eli Golang kuului 2010-luvun alussa ja puolivälissä kohua herättäneiden uusien kielten joukkoon – Rust, D, Nim, Scala, Clojure: Tuohon aikaan ohjelmoijat näyttivät olevan innokkaita siirtymään pois vanhojen taustakielien (Java, C++) monipuheisuudesta sekä verkossa käytettävien dynaamisten kielten (PHP, Ruby, Python) laskennallisesta tehottomuudesta ja tyyppitietoturvattomuudesta. He halusivat tyyppiturvallisuutta, mikä tarkoitti, että he halusivat staattista tyypitystä. Ja he halusivat nopeutta.

Oli helppo löytää tarinoita IronMQ:n kaltaisista startup-yrityksistä, jotka siirtyivät kymmenistä Railsin isännöintiin käytetyistä palvelimista muutamaan palvelimeen, joita voitiin isännöidä Go-kielen kaltaisella kielellä. Ja henkilönä, joka oli tuohon aikaan syventynyt PHP5:een ja kaikkiin sen ongelmiin, laskin itseni kiinnostuneiden joukkoon.

Kun törmäsin Go-kieleen ensimmäisen kerran vanhalla keikallani ActiveCampaignin teknologiapäällikkönä, kokeilin kirjoittaa sillä hieman koodia. Enkä pitänyt siitä. Se aiheutti minulle ongelmia aina kun jätin muuttujan käyttämättä tai toin käyttämättömän paketin. Go oli erityisen tiukka tyypittelyn suhteen – tunsin PHP:n tyyppipakotuksen, mutta olin tottunut myös C:hen ja C++:aan, joissa voit sekoittaa merkityt ja merkitsemättömät kokonaisluvut sekä sekoittaa kokonaislukujen kokoja (16-bittinen, 32-bittinen, 64-bittinen).

Go:ssa ei ollut geneerisiä ominaisuuksia. Itse asiassa yksi sen pääkielen suunnittelijoista (Rob Pike) oli melko tiukka siitä, mitä kielestä puuttui. Kuten Pike asian ilmaisi, se oli hyvä asia. Kieli suunniteltiin Googlen ”tavallisille” insinööreille, jos heitä voi sellaisiksi kutsua. Jossain mielessä se, mitä Go:sta tuolloin luki, tuntui alentavalta. Ja tänäkään päivänä ei ole vaikea löytää ihmisiä, jotka jakavat edelleen tuon kritiikin.

Mikä sitten muutti mieleni?

Go on yksinkertainen. Se erottuu siinä suhteessa muista kielistä. Yksinkertaisuus on hyve, ja kaikki monimutkaisuus, jota kieleen tuodaan, on tarkkaan harkittua.

Pitkään aikaan – liian pitkään, jos kysytään joiltakin – Go:lta puuttui todellinen pakettienhallinta. Vasta vuonna 2018 – useiden yhteisön sitoutumiskierrosten ja epävirallisen kokeellisen paketinhallinnan nimeltä ”dep” jälkeen – kielelle lisättiin virallinen tuki niiden ratkaisulle (”moduulit”).

Mutta tuon yksinkertaisuuden sisällä on paljon arvoa. Ruby-kielellä voi helposti kirjoittaa yksirivisiä, jotka tekevät hienoja juttuja, mutta noihin yksirivisiin kätkeytyy paljon taikuutta: vaatimattoman kehittäjän on vaikea aina käsittää kulissien takana tapahtuvaa prosessia. Ehkä saman asian kirjoittamiseen Go:ssa tarvitaan viisi riviä koodia, mutta tiedät, mitä nuo viisi riviä tekevät.

Go vie myös pois yhden OOP:n klassisista käsitteistä: periytymisen. Go:ssa ei voi kirjoittaa perusluokkaa ja antaa toisen luokan periytyä siitä. Itse asiassa sinulla ei ole ”luokkia” ollenkaan.

Aluksi tuntuu valtavalta rajoitukselta, kun sinulta viedään yksi koodin uudelleenkäytön ja kapseloinnin perustyökaluista. Ja on luonnollista, että ensimmäinen taipumuksesi on katkeruuden tunne.

Mutta nykyään et useinkaan käytä periytymistä, vaikka voisitkin. Käytät rajapintoja, keskityt käyttäytymiseen ja abstraktioihin – ja tämän voit helposti tehdä Go:ssa. Itse asiassa se on kaikki mitä Go:ssa voi tehdä. Jonkin ajan kuluttua periytymisen puuttuminen tuntuu hyvältä, koska vältät teknisen velan kerroksen, kun sinun ei tarvitse palata vaaralliseen suhteiden pesään, jonka olet rakentanut periytymisen avulla. Ehkä Pike olikin sittenkin oikeilla jäljillä.

Tänään Go on raivannut itselleen määritellyn paikan kielten ekosfäärissä. Se ei yritä korvata C++:aa, kuten joskus luultiin (ja ehdotettiin). Kun 10 vuotta sitten saattoi ajatella tarvitsevansa Javaa tiettyyn projektiin, nykyään voi olla parempi turvautua Go-kieleen.

Languages to LearnEngineering Leaders Discuss Ruby on Rails, C#, Python and JavaScript

Vastaa

Sähköpostiosoitettasi ei julkaista.