Wozu bietet es sich an die Programmiersprache Go zu lernen?

Das Ergebnis basiert auf 2 Abstimmungen

Ja 100%
Nein 0%

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Ja

Zuerst möchte ich mit einem kurzen Abriss zu Go beginnen, denn anhand dessen lässt sich die Motivation hinter dieser Technologie vermutlich besser verstehen.

Go gründet auf verschiedenen Leitgedanken, die sich vor allem auf die Vereinfachung der Entwicklung komplexer Anwendungen fokussieren. Es sollte also keine Skriptsprache werden und stattdessen für Projekte einsetzbar sein, an denen mehr als nur ein Entwickler arbeitet. Dabei sollte berücksichtigt werden, dass all diese Gedanken sich auf den technologischen Status zwischen (spätestens) 2007 und 2009 bezogen, denn zu dieser Zeit wurde die Sprache entwickelt.

1) Die Syntax ist reduziert (es gibt wenige Schlüsselwörter) und sehr ähnlich zu C. So sollte es also möglich sein, Go in kurzer Zeit zu lernen. Automatisierungen wie z.B. ein GC befreien den Programmierer von Implementierungsaufgaben, die erfahrungsgemäß fehlerlastig sein können.

An der Stelle macht sich gerade für Projektteams schon ein Vorteil deutlich bemerkbar: Auch wenn ein Entwickler noch auf Junior-Level ist, kann er besser/schneller partizipieren, als wenn dies bei einem C++-Projekt der Fall wäre, wo oft mehr Erfahrung notwendig ist.

2) Go soll die Entwicklungszeit verkürzen. Daher ist die Sprache so konzipiert, sodass die Kompilierzeit möglichst gering ausfällt. Dies ermöglicht es also, Projekte schneller zu bauen und zu deployen.

3) Es wurden einige nützliche Tools in Go integriert, mit denen sich Go-Anwendungen auf mögliche Schwachstellen / Bugs prüfen lassen. Beispielsweise ein Race Condition-Detektor oder eine API für Tests und Profiling.

4) Go ist eine statisch typisierte und kompilierte Sprache, die nativ Nebenläufigkeit unterstützt (goroutines). Sie eignet sich daher für die Entwicklung von effizienten, skalierbaren Anwendungen (z.B. in der Cloud). Diese Eigenschaft lässt sich anhand der Entwicklungszeit von Go begründen. Cloud Computing war gerade ein Thema, welches bedeutend an Fahrt aufnahm (2006: Amazon führte EC2 ein, 2008: Google veröffentlicht seine Google App Engine und Microsoft kündigt die Entwicklung des Azure Service an, ...).

Soweit habe ich bisher nur allgemeine Argumente benannt, die größtenteils für Go sprechen. Aber natürlich gibt es auch eine Kehrseite der Medaille. Zum Beispiel gibt es in Go einige Features nicht, die man aus anderen objektorientierten Sprachen kennt (Stichworte: Enums, Generics). Zumindest Letzteres lässt sich auf den Gedanken, dass die Sprache leicht bleiben soll, zurückführen.

Falls Interesse an detaillierteren Pro- und Kontra-Argumenten bezüglich der Go-Sprache besteht, kannst du dir diesen (wenn auch etwas subjektiven) Artikel einmal anschauen: Go: the Good, the Bad and the Ugly.

Was sind ihre Einsatzgebiete?

Go kann im Grunde wie Java oder C# für verschiedene Zwecke eingesetzt werden. Vorzugsweise liegt der Einsatz bei serverseitigen Anwendungen (z.B. für Streaming von Mediadaten, Game-Server, Microservices - z.B. Webscraping und Verarbeitung von Daten; generell Webanwendungen) und Cloud Computing.

Im wissenschaftlichen Bereich hat die Sprache ebenso schon Anklang gefunden, denn ihre Einstiegshürde ist wie gesagt niedrig, es gibt mehrere Hilfstools für Fehlerprüfungen und es lässt sich schnell ein effizientes Tool entwickeln. Prototyping dürfte demzufolge ebenfalls ein passendes Einsatzgebiet sein.

Bekannte Projektbeispiele lassen sich auch leicht benennen:

  • Die Credit Offers API von Capital One wurde in Go geschrieben
  • Dailymotion nutzt eine Go-App (Asteroid) zur Verwaltung ihres Wireguard Servers
  • Dropbox nutzt seit 2013 zu großen Teilen Go für ihre Infrastruktur
  • Kubernetes basiert auf Go
  • Soundcloud hat viele verschiedene ihrer Services in Go implementiert
  • Twitch nutzt Go für verschiedene Microservices
  • Uber verwendet Go für verschiedene Services (wie den Geofence Service)

Aufgabenfelder, wo Go schwächer angelegt wäre, wären grundsätzlich Desktop-Anwendungen mit GUI (hierfür wäre ein externes Tool notwendig, siehe hier für Optionen) oder (aufgrund des GC) Anwendungen, die sehr systemnah agieren sollen (Hardwaretreiber, Embedded Systems, ...).

Ist diese Programmiersprache sinnvoll zu lernen?

Ob du einen praktischen Nutzen in dem Sinne aus Go ziehen kannst, dass du damit konkrete Programme entwickeln kannst, die du dir schon immer erträumt hast, musst du natürlich selbst bewerten.

Grundsätzlich würde ich keinen großen Nachteil darin sehen, sich nicht einmal damit zu beschäftigen. Dir bietet sich (wie bei vielen anderen Programmiersprachen) die Gelegenheit, neue Konzepte / Denkweisen aufzusaugen und möglicherweise Sachverhalte besser/neu zu verstehen, die du zwar schon einmal gelernt, aber noch nie aus einem bestimmten anderen Blickwinkel betrachtet hast.

Im Hinblick auf die Zukunft von Go lässt sich meines Erachtens nicht so viel sagen. Die Sprache ist noch immer recht jung, aber dennoch schon verhältnismäßig populär (siehe die obigen Praxis-Beispiele). Es gibt eine eigene Community (die Entwicklung ist somit nicht nur beschränkt auf Google) und sogar jährliche Konferenzen (GopherCon). Ganz so schnell wird sie also sicherlich nicht von der Bildfläche verschwinden.

Bei der Jobsuche wirst du mit anderen Programmiersprachen (Java, C#, C++) natürlich viel mehr Auswahl haben, das sollte klar sein. In der Industrie / professionellen Software-Entwicklung ist Go allerdings schon angekommen.

verreisterNutzer  03.01.2021, 07:36

Vielen Dank für diese sehr ausführliche Antwort.

0

Mit Außenseiter-Programmiersprachen (wie etwa Go) den Einstieg ins Programmieren zu wagen, ist keine gute Idee.

Es sind dies sämtlich Sprachen, welche der einen oder anderen Schwäche gängiger Programmiersprachen wegen entstanden. Im Allgemeinen haben sie — ihnen gegenüber — halt nur einen Vorteil, aber viele Nachteile. Nur wirklich erfahrene Programmierer können sich dann eine zutreffende Meinung darüber bilden, ob jene Außenseiter-Programmiersprache so gut ist, dass sie überleben sollte.

Oberstes Ziel muss immer sein, robusten, gut wartbaren Code zu produzieren, der — die Art der jeweils gegebenen Anwendung mit berücksichtigt — auch hinreichend performant arbeitet.