Als ich das erste Mal von Go, Googles eigener Programmiersprache, erfuhr, war ich fasziniert. Go, auch bekannt als Golang, wurde 2007 entwickelt und veröffentlicht und gehörte zu einer ganzen Reihe neuer Sprachen – Rust, D, Nim, Scala, Clojure – die Anfang bis Mitte der 2010er Jahre für Furore sorgten: Damals schienen die Programmierer darauf erpicht zu sein, sich von der langatmigen Last älterer Backend-Sprachen (Java, C++) sowie der rechnerischen Ineffizienz und Typunsicherheit dynamischer Sprachen, die im Web verwendet werden (PHP, Ruby, Python), zu lösen. Sie wollten Typsicherheit, d.h. sie wollten statische Typisierung. Und sie wollten Geschwindigkeit.
Es war leicht, Geschichten über Start-ups wie IronMQ zu finden, die von Dutzenden von Servern, die für das Hosting von Rails verwendet wurden, auf ein paar wenige umstiegen, die in einer Sprache wie Go gehostet werden konnten. Und als jemand, der zu dieser Zeit von PHP5 und all seinen Problemen durchdrungen war, zählte ich mich zu den Interessierten.
Als ich bei meinem alten Job als CTO bei ActiveCampaign zum ersten Mal auf Go stieß, versuchte ich, etwas Code in dieser Sprache zu schreiben. And I didn’t like it. Immer wenn ich eine Variable unbenutzt ließ oder ein unbenutztes Paket importierte, bekam ich Probleme. Go war besonders streng, was die Typisierung anging – ich kannte die Typunterdrückung von PHP, aber ich war auch an C und C++ gewöhnt, bei denen man vorzeichenbehaftete und vorzeichenlose Ganzzahlen mischen konnte und auch die Größe von Ganzzahlen (16-Bit, 32-Bit, 64-Bit) mischen konnte.
Go hatte keine Generika. In der Tat war einer der Hauptentwickler der Sprache (Rob Pike) ziemlich strikt darüber, was der Sprache fehlte. Wie Pike es ausdrückte, war dies eine gute Sache, und gut für Sie. Die Sprache wurde für die „durchschnittlichen“ Ingenieure entwickelt, die bei Google arbeiteten, wenn man sie so nennen kann. In gewisser Weise fühlte sich das, was man damals über Go las, wie eine Herabsetzung an. Und bis heute ist es nicht schwer, Leute zu finden, die diese Kritik teilen.
Was hat also meine Meinung geändert?
Go ist einfach. In dieser Hinsicht hebt es sich von anderen Sprachen ab. Einfachheit ist eine Tugend, und jede Komplexität, die man in die Sprache einführt, wird sorgfältig bedacht.
Lange Zeit – zu lange, wenn man einige fragt – gab es in Go keine echte Paketverwaltung. Erst 2018 – nach mehreren Runden des Engagements der Community und einem inoffiziellen experimentellen Paketmanager namens „dep“ – wurde der Sprache eine offizielle Unterstützung für ihre Lösung („Module“) hinzugefügt.
Aber in dieser Einfachheit liegt ein großer Wert. Man kann leicht ein paar Einzeiler in Ruby schreiben, die coole Sachen machen, aber in diesen Einzeilern ist eine Menge Magie versteckt: Es ist schwer für den unbedarften Entwickler, den Prozess, der hinter den Kulissen abläuft, immer zu begreifen. Vielleicht braucht man fünf Zeilen Code, um dieselbe Sache in Go zu schreiben, aber man weiß, was diese fünf Zeilen tun.
Go nimmt auch eines der klassischen Konzepte in OOP weg: Vererbung. Man kann in Go keine Basisklasse schreiben und eine andere Klasse von ihr erben lassen. Tatsächlich gibt es überhaupt keine „Klassen“.
Zunächst fühlt es sich wie eine enorme Einschränkung an, wenn einem eines der grundlegenden Werkzeuge für die Wiederverwendung und Kapselung von Code genommen wird. Und es ist nur natürlich, dass man sich zuerst darüber ärgert.
Aber heutzutage verwendet man oft keine Vererbung mehr, selbst wenn man es könnte. Man verwendet Schnittstellen, man konzentriert sich auf Verhalten und Abstraktionen – und das kann man in Go leicht tun. Tatsächlich ist das alles, was man in Go tun kann. Nach einer Weile fühlt sich das Fehlen von Vererbung gut an, weil man eine Schicht technischer Schulden vermeidet, indem man das gefährliche Beziehungsgeflecht, das man mit Vererbung aufgebaut hat, nicht noch einmal durchgehen muss. Vielleicht war Pike ja doch etwas auf der Spur.
Heute hat sich Go einen festen Platz in der Ökosphäre der Sprachen erobert. Es versucht nicht, C++ zu ersetzen, wie man einst dachte (und vorschlug). Während Sie vor 10 Jahren vielleicht dachten, Sie bräuchten Java für ein bestimmtes Projekt, ist es heute vielleicht besser, zu Go zu greifen.
Languages to LearnEngineering Leaders Discuss Ruby on Rails, C#, Python and JavaScript