Toen ik voor het eerst hoorde over Go, Google’s eigen programmeertaal, was ik geïntrigeerd. Go, ook bekend als Golang, werd ontworpen en uitgebracht in 2007 en behoorde tot een groep nieuwe talen die in het begin van de jaren 2010 veel aandacht kregen: Roest, D, Nim, Scala en Clojure: In die tijd leken programmeurs te willen afstappen van de uitgebreide bagage van oudere backend-talen (Java, C++) en van de rekenkundige inefficiëntie en type-onveiligheid van dynamische talen die op het web worden gebruikt (PHP, Ruby, Python). Ze wilden type-veiligheid, wat betekende dat ze statische typing wilden. En ze wilden snelheid.
Het was makkelijk om verhalen te vinden over startups, zoals IronMQ, die van tientallen servers die gebruikt werden voor het hosten van Rails naar een paar gingen die gehost konden worden in een taal als Go. En als iemand die, in die tijd, doordrenkt was van PHP5 en al zijn problemen, rekende ik mezelf tot de menigte van geïnteresseerden.
Toen ik Go voor het eerst tegenkwam, in mijn oude baan als CTO bij ActiveCampaign, probeerde ik er wat code in te schrijven. En ik vond het maar niks. Het gaf me problemen als ik een variabele ongebruikt liet of een ongebruikt pakket importeerde. Go was bijzonder streng op het gebied van typing – ik was bekend met PHP’s type coercion, maar ik was ook gewend aan C en C++, die je getekende en niet-getekende gehele getallen laten mengen, evenals het mengen van integer groottes (16-bit, 32-bit, 64-bit).
Go had geen generics. Sterker nog, een van de belangrijkste taalontwerpers (Rob Pike) was nogal fel over wat de taal miste. Zoals Pike het uitdrukte, was dit een goede zaak, en goed voor jou. De taal was ontworpen voor de “gemiddelde” ingenieurs die bij Google werkten, als je ze zo kunt noemen. In zekere zin voelde wat je in die tijd over Go las als een afwijzing. En tot op de dag van vandaag is het niet moeilijk om mensen te vinden die die kritiek blijven delen.
Dus wat heeft me van gedachten doen veranderen?
Go is eenvoudig. Het onderscheidt zich in dat opzicht van andere talen. Eenvoud is een deugd, en elke complexiteit die men in de taal introduceert is zorgvuldig overwogen.
Er was lange tijd – te lang, als je het sommigen vraagt – geen echt pakketbeheer in het programma. Het was pas in 2018-na verschillende rondes van betrokkenheid van de gemeenschap en een onofficiële experimentele pakketbeheerder genaamd “dep”-dat enige officiële ondersteuning voor hun oplossing (“modules”) werd toegevoegd aan de taal.
Maar binnen die eenvoud vind je veel waarde. Je kunt in Ruby makkelijk een paar one-liners schrijven die leuke dingen doen, maar verborgen in die one-liners zit een hoop magie: Het is moeilijk voor de argeloze ontwikkelaar om altijd het proces te begrijpen dat zich achter de schermen afspeelt. Misschien kost het vijf regels code om hetzelfde te schrijven in Go, maar je weet wat die vijf regels doen.
Go neemt ook een van de klassieke concepten in OOP weg: overerving. Je kunt in Go geen basisklasse schrijven en er een andere klasse van laten erven. In feite heb je helemaal geen “klassen” meer.
In het begin voelt het als een enorme beperking om een van de basisgereedschappen voor codehergebruik en inkapseling van je af te laten nemen. En het is normaal dat je eerste neiging een gevoel van wrok is.
Maar tegenwoordig gebruik je vaak geen inheritance meer, ook al zou je het kunnen. Je gebruikt interfaces, je richt je op gedrag en abstracties – en dit kun je gemakkelijk doen in Go. In feite is het alles wat je kunt doen in Go. Na een tijdje voelt het ontbreken van inheritance goed omdat je een laag van technische schuld vermijdt door niet opnieuw te hoeven kijken naar het gevaarlijke nest van relaties dat je had opgebouwd met behulp van inheritance. Misschien was Pike toch op het goede pad.
Heden ten dage heeft Go een eigen plek in de taal-ecosfeer veroverd. Het is niet bedoeld om C++ te vervangen, zoals ooit werd gedacht (en gesuggereerd). Terwijl je 10 jaar geleden misschien dacht dat je Java nodig had voor een bepaald project, kun je tegenwoordig misschien beter naar Go grijpen.
Talen om te lerenOnderwijskundigen bespreken Ruby on Rails, C#, Python en JavaScript