2022-07-11 digital life Go to Hell Ernuechterung und auch hier Imperialismus Vor einem halben Jahr habe ich mich konzeptionell viel mit Go beschaeftigt. Die Ideen, die in die Sprache geflossen sind, haben mir gut gefallen, insbesondere fand ich gut, dass die Entwickler mal neue Ansaetze gewagt haben. Auch die Offenheit der Community fuer Anfaenger und Frauen mochte ich. Inzwischen habe ich auch praktische Programmiererfahrungen mit Go gesammelt. Nun hat die grosse Ernuechterung eingesetzt. Ich bin schwer enttaeuscht. Meine Enttaeuschung bezieht sich zu einem Teil direkt auf Go und zu einem Teil generell auf moderne Spra- chen. Zunaechst zu den konkreteren Dingen: Go ist keine Sprache fuer Anfaenger. Sie ist viel zu komplex und strikt. Zwar verhindert sie Nachlaessigkeiten und verdeckte Effekte, aber das erreicht sie durch sehr viel Striktheit. Es ist eine passende Sprache wenn das Programm eigentlich schon fertig entworfen ist und man es nur noch runterschreiben muss, als Arbeitsmittel in einer inkremen- tellen Entwicklung eignet sich Go nicht. Wenn ich mal eben ein paar Zeilen Code auskommentieren oder einfuegen will, um ein Problem zu debuggen, dann hat das meist Auswirkungen auf andere Codeteile, ich muss dann `:=' zu `=' aendern oder umgekehrt, ich muss Variablen in Zuweisungen durch `_' ersetzten und der- gleichen. Auch beim Generieren von Code muss ich nun zuvor schon wissen welche Variablen ich verwenden werde, weil Go keinen Code kompiliert, der ungenutzte Variablen enthaelt. Folglich werde ich anfangen `_ = var' einzubauen, um die Fehler loszuwerden, weil ich keine Lust auf die Komplexitaet habe, zuvor schon wissen zu muessen welche Variablen noch kommen werden. Das finde ich hin- derlich; es steht mir im Weg und motiviert schlechten Stil. Bei zu viel Striktheit sucht man sich Wege, diese zu umgehen, wenn sie einem im Weg steht. Die Sichtbarkeit ueber die Grossschreibung des ersten Buchstabens zu loesen war vielleicht auch keine so gute Idee. Wenn ich aus `Printf()' ein `Fprintf()' machen will, dann muss ich nun zwei Buchstaben aendern statt nur einem, zudem ist der eine Name nun kein Suffix des anderen mehr, was ich irritierend finde. Die Bezeichner in Camelcase mit Grossbuchstaben und mit Modul- namespaces sind nichts was man noch von Hand tippen will. Dieser Ansatz ist fuer IDEs und Tab-Competion ausgelegt. Im vi (nicht Vim, sondern ein old-style vi ohne Syntax-Highlighting) hat man keinen Spass daran. Es ist einfach zu viel Noise auf dem Signal. IDE-User merken das nur nicht so sehr wie ich. Leider programmiert sich Go stilistisch und kulturell gar nicht wie C. Es erinnert viel eher an Java. Go bringt ein ganzes Oekosystem mit, auf das man sich voll einlassen muss. Go gibt genau vor wie Code auszusehen und wie das Entwicklungsoekosystem zu sein hat. Go ist kein Teil eines offenen heterogenen Systems, sondern Go ist genau so imperialistisch wie Java [0] ... viel- leicht sogar noch mehr. Das ist traurig, da die Entwickler von Go eigentlich aus einer Kultur kommen, die sehr offen und heterogen ist. Viele auf den ersten Blick schlechtere Sprachen, fuegen sich dort jedoch besser ein als Go. Beispielsweise die durch seinen Perl-Stil auf den ersten Blick sehr andere Sprache Ruby kann problemlos auf eine C-artige Weise programmiert werden -- komplett ohne OOP und mag- ische Features. Man kann Ruby harmonisch in ein C-Oekosystem ein- fuegen. Selbst Python, mit seiner eigensinnigen Einrueckung, kann noch recht gut eingefuegt werden. Go kann das nicht. Go faengt sofort eine kulturelle Invasion an -- Bezeichner, Coding Style, Buildsystem, Code-Generierung, usw. Go laesst sich weder in eine andere Kultur einfuegen noch laesst es sich irgendetwas sagen. Go ist imperialistisch, dominant und will sich die Welt untertan machen. Es gibt nur die Wahl zwischen vollauf den Go-Style zu akzeptieren oder Go zu meiden. Ich erschrecke ob dieser Erkenntnis. Generell gesehen ist es wohl unmoeglich eine moderne Programmier- sprache zu entwerfen, die auch nur im Entferntesten die Eleganz und Konsistenz von C hat. Moderne Programmiersprachen sollen so viele Features haben und so viel Convenience bieten, dass sie notwendigerweise komplex sein muessen. Auch wenn Go sich immer wieder gegen Featurewuensche positioniert hat ist es doch voller Features. Die Sprache ist weder klein noch stimmig ... sie ist ebenso fett wie andere moderne Sprachen und vielleicht noch mehr so, da sie eine Menge ueber Syntax macht (z.B. XML) anstatt die bereits vorhandenen Konzepte dafuer zu nutzen. Go hat vermutlich mehr separate Konzepte, die zum User durchgereicht werden, als Python. Das ist die grosse Staerke von C: Die Sprache ist so klein; die Anzahl der Konzepte ist winzig, aber sie sind zugleich so mae- chtig, dass sie alles ermoeglichen. Natuerlich bekommt man bei C weniger Features und Bequemlichkeit out-of-the-box, aber dafuer bekommt man auch sehr viel weniger Komplexitaet out-of-the-box. Bei C basiert alles auf immer wieder den gleichen wenigen Konzep- ten. Letztlich ist Go eine Sprache, die auf das gleiche Ziel abgeri- chtet ist wie Java und sonstige OOP-Sprachen: Die Sprache ist so aufwaendig und umstaendlich und erzwungen, damit mittelmaessige Programmierer mit ihr keinen Quatsch machen koennen. Diese Spra- chen verhindern besonders schlechten Code von Entwicklern, die weder das Programmieren noch ihre Programmiersprachen verstanden haben (... und letzteres auch gar nicht mehr koennen weil die Sprachen viel zu fett sind). In ihrer Striktheit ist Go ver- mutlich die beste Sprache, um schlechte Entwickler zu wenigstens mittelmaessigem Code zu zwingen. Das ist nur nicht das was ich mir von einer Programmiersprache wuensche. Messerscharfe Sprachen wie C sind einfach nicht mehr gefragt. Faehigkeit ist ebenso egal wie Schoenheit. Kooperation und heterogene Umgebungen vermeidet man lieber und entwirft Sprachen als Walled Gardens, um alles unter eigener Kontrolle zu haben. Es ist traurig ... aber wohl passend zu der Welt in der wir heute leben. Leider habe ich inzwischen ueberhaupt keine Antwort mehr auf die Frage, was eine geeignete Programmiersprache fuer Anfaenger waere. Frueher dachte ich immer, dass es Python waere, und viel- leicht ist das noch immer die katastrophenloseste Option. Mit C sind Anfaenger ueberfordert und fuer das was Einsteiger zumeist gerne programmieren wuerden eignet sich C auch gar nicht. Auch keine der anderen alten Sprachen eignet sich dafuer. Von Go bin ich enttaeuscht. Java ist sowieso ein No-Go. Webzeug ist ue- bermaessig komplex. Von den sogenannten modernen Scriptsprachen lauern bei Perl, Ruby und PHP deutlich groessere Gefahren als bei Python. Ich hatte gedacht, dass mit Go vielleicht mal eine neue Sprache zu einer aehnlichen Eleganz und konzeptionellen Schoenheit wie C finden koennte. Leider ist das nicht der Fall. Somit warte ich weiterhin darauf, dass es irgendwann mal gelingen koennte, das geniale Design von C wieder zu erreichen -- auch nach 50 Jahren IT-Fortschritt kommen wir nicht mal annaehernd dort heran ... die Vorstellung, C zu uebertreffen, ist voellig utopisch. Ich selber kann mir nicht vorstellen, dass ich in meinem Leben mal noch eine andere Hauptprogrammiersprache als C programmieren will (ergaenzend zu awk und sh). C steht einfach meilenweit ueber allen anderen Sprachen ... seit 50 Jahren ... und nichts kommt ihr auch nur annaehernd gleich. [0] http://marmaro.de/apov/txt/2015-09-23_imperialismus.txt http://marmaro.de/apov/ markus schnalke