Coding-Hassliebe

8 Sprachen, die Programmierer zur Weißglut treiben

10.01.2024
Von 
Peter Wayner schreibt unter anderem für unsere US-Schwesterpublikation InfoWorld.com und ist Autor verschiedener Bücher - unter anderem zu den Themen Open Source Software, autonomes Fahren und digitale Transaktionen.
Tools, die sich als Sprache ausgeben, verwirrende Syntax, verstaubter Code, der einfach nicht sterben will – diese Programmiersprachen bringen Entwickler auf die Palme.
Als Entwickler ruhig zu bleiben, ist kein leichtes Unterfangen. Diese Programmiersprachen erzürnen die Dev-Gemüter - auch in Zukunft.
Als Entwickler ruhig zu bleiben, ist kein leichtes Unterfangen. Diese Programmiersprachen erzürnen die Dev-Gemüter - auch in Zukunft.
Foto: Ekaterina Minaeva - shutterstock.com

Der gut gemeinte Ratschlag, stets die Ruhe zu bewahren, geht sicher nicht auf einen Menschen zurück, der sich beruflich mit Computern herumschlagen musste. Denn wer sich eine Zeit lang mit der diabolischen Logik von Programmiersprachen befasst, weiß, wie es in der Hölle aussieht: Die vermeintlich logischen Mechanismen von Programmiersprachen sorgen allzu oft für Verwirrung und Verzweiflung.

Es kann gut sein, dass der jeweilige Mensch daran Schuld trägt, weil er die Sprache falsch benutzt oder unzureichend programmiert hat. Doch zum Unglück gehören meistens zwei: Wenn eine Programmiersprache seinen Benutzern Gehirnakrobatik abverlangt, darf man sie guten Gewissens für das Übel mitverantwortlich machen. Allzu oft kann man sich schließlich auch einfach nicht wehren - etwa, wenn die Installationsbasis zu umfassend ist, um eine störende Programmiersprache mal schnell über Bord zu werfen.

Die grausame Wahrheit: Es gibt in den meisten Fällen sehr wahrscheinlich keine bessere Option. Im Folgenden haben wir sieben Programmiersprachen zusammengestellt, mit denen Entwickler eine Hassliebe verbindet: Es geht kaum mit - aber auch nicht ohne sie.

C

C sollte man eher als portablen Assembler denn als vollständige Computersprache sehen. Oder schreibt irgendjemand gerne separate Header Files? Und die viel wichtigere Frage: Hat schon mal irgendjemand den Preprocessor für etwas Sinnvolles genutzt, ohne dabei durchzudrehen?

Theoretisch sollten wir in der Lage sein, die Macht der Pointer-Arithmetik zu nutzen, um superclevere Dinge zu tun. In der Realität wagt es kaum jemand, mehr zu tun, als Datenstrukturen zuzuweisen. Ist es überhaupt eine gute Idee, zu versuchen clever zu sein, wenn es um Pointer geht? Das Ding mit cleveren Ideen ist auch: Die Cleverness zu dokumentieren, frisst sämtliche Zeit, die man zuvor dadurch gespart hat. Darüber hinaus dürfte es kaum jemanden geben, der alle Regeln für das Coden in C im Kopf hat und so alle möglichen Sicherheitslücken vermeiden kann.

Dennoch bleibt keine andere Wahl: Unix ist in C geschrieben - worauf wiederum die meisten Smartphones und weite Teile der Cloud basieren. Nicht jeder, der Code für diese Plattformen schreibt, muss C verwenden - aber irgendjemand muss diesbezüglich auf dem Laufenden bleiben, sonst fällt alles auseinander.

Inzwischen wenden sich sogar die Unix-Entwickler langsam von C ab: In den letzten Jahren wurden einige der Patches für den Linux-Kernel in Rust veröffentlicht. Die Entwickler sind der Meinung, dass die strengere Struktur der Sprache einige der Sicherheitslücken von C verhindert. Diese Umstellung wird jedoch noch Jahre dauern.

JavaScript

Die Schöpfer von JavaScript haben versucht, etwas Modernes zu erschaffen. Leider haben sie uns mit ihrer Cleverness dazu verdammt, geschweifte, eckige Klammern und herkömmliche Klammern zu zählen - und dabei sicherzustellen, dass diese richtig verschachtelt sind. Zwischen den anonymen Funktionen, den Closures und den JSON-Datenstrukturen ist das echtes Fingertraining.

Hinzu kommen weitere, seltsame Details: Wenn x eine Zeichenkette ist, die das Zeichen für 1 enthält, dann ergibt x+1 die Zeichenkette 11, und x-1 ergibt die Zahl Null. Erinnert sich noch jemand an den Unterschied zwischen false, null, NaN und undefined? Sie hören sich ähnlich an - die Frage ist nur, warum es in JavaScript alle vier gibt und sie sich nicht einheitlich verhalten.

Zu den seltsamen Details gesellt sich ein abrupter Wandel: Dank neuerer Funktionen zum Packen und Entpacken von Objekten und Arrays sieht neues JavaScript oft nicht mehr so aus wie altes JavaScript. Das führt zu Code, der einem Meer aus doppelten und dreifachen Anführungszeichen, Fragezeichen und Punkten ähnelt. An dieser Stelle sei auch daran erinnert, dass => ein Pfeil ist, der eine Funktion aufruft, während >= eine Möglichkeit darstellt, Zahlen zu vergleichen. Die neuen Funktionen sind toll (wenn man sie mag), sorgen aber bei der Mehrheit der Benutzer für Verwirrung und dafür, mit ECMAScript-Versionsnummern jonglieren zu müssen. Das Gejammer nützt allerdings nichts: Das Internet, das World Wide Web und zahllose Browser werden nicht mehr verschwinden.

Das clevere Node.js-Team baute dann noch eine Plattform auf, um JavaScript auf Servern zum Laufen zu bringen. Inzwischen ist das eine der populärsten Arten, progressive Web Apps zu erstellen. JavaScript wird uns also noch über Jahrzehnte auf Trab halten.

PHP

PHP ist nicht wirklich eine Computersprache - vielmehr ein Tool, um statischem HTML ein bisschen Intelligenz zu verleihen: Sie können Informationen in einer Datenbank speichern und sie mit statischen Tags verknüpfen. Vielleicht gibt es noch ein paar weitere Funktionen, aber im Grunde ist alles, was mit PHP erledigt wird, Strings aus einer Datenbank zusammenzufügen

Zumindest war das für lange Zeit so. Einige PHP-Entwickler haben sich das User Feedback zu Herzen genommen und Features wie ein stärkeres Type-System, smartere Strings und eine bessere Integration mit MySQL hinzugefügt. Das klingt zwar erst einmal gut, allerdings altern die vorhandenen Funktionen, während neue hinzugefügt werden. Es ist also nur eine Frage der Zeit, bis der alte Code nicht mehr funktioniert.

Mit WordPress, Joomla und Drupal wird der größte Teil der Inhalte im Web über PHP-Code bereitgestellt. Und dann gibt es noch ein kleines Ding namens Facebook, das in PHP geschrieben wurde. Man kann aber froh sein, dass Facebook die HipHop Virtual Machine entwickelt hat, die Zend zur Entwicklung von PHP 8.2 inspiriert hat. Diese neuen PHP-Engines sind oft doppelt so schnell, was am Ende Energiekosten in Millionenhöhe spart - und sicherstellt, dass uns PHP noch eine lange Zeit erhalten bleibt.

Cobol

Cobol wurde im Jahr 1959 entwickelt und sollte - auch wegen seiner komplexen Syntax, die Hunderte von 'Restricted Words' enthält - inzwischen längst beerdigt sein. Dennoch entwickeln Cobol-Connaisseure immer neue Versionen, leihen sich Ideen aus anderen Sprachen und spannen sie auf einen 60 Jahre alten Rahmen. Eine neue Version namens Cobol 2014 enthält dynamische Tabellen, ein Feature, das für die Sprache schon seit 2002 im Gespräch war. Und dann wäre da noch Visual Cobol 8.0, das Cobol mit Java oder .NET Code verlinkt und es einfacher denn je macht, alten Code neben modernen Stacks am Laufen zu halten.

Es gibt zwar bessere Werkzeuge um eine Geschäftslogik für die Bearbeitung von Datenbanken zu erstellen. Aber die Mühe scheint sich kaum jemand zu machen - es ist schlicht einfacher, einen größeren Rechner anzuschaffen und den Cobol-Code weiterlaufen zu lassen. Ein Blick auf den Arbeitsmarkt zeigt, dass Cobol alles andere als tot ist. Entwickler mit Knowhow sind branchenübergreifend gefragt. Während Computerwissenschaftler sich in Grauen abwenden, gilt bei den Entscheidern die Devise: "Kauft einfach einen größeren Mainframe."

R

R wurde für die Datenwissenschaft entwickelt und wird immer noch von vielen Data Scientists verwendet - auch wenn einige zu Python gewechselt sind, weil sie R zu undurchsichtig finden. Einige traditionelle Programmierer hat die interaktive Natur von R abgeschreckt, die nicht ohne Grund manchmal als "Scratchpad-Modus" bezeichnet wird. Jeder, der ein paar Zahlen addieren oder die Standardabweichung eines Datensatzes berechnen muss, kann einfach ein paar Zeichen in die Eingabeaufforderung eingeben und erhält sofort die Antwort. R ist genauso ein Werkzeug, das man benutzt wie eine Programmiersprache, mit der man etwas bauen kann.

Die Sprache selbst kann leider ein wenig seltsam anmuten und verwirren. Viele Befehle sind auf Schnelligkeit und Prägnanz ausgelegt - was gut ist, wenn man im Labor mit Reagenzgläsern jongliert und R nebenbei eine Zahl berechnen soll. Interpunktionen sind dabei unglaublich mächtig: Ein fehlendes Komma kann für stundenlanges Kopfzerbrechen sorgen.

Die Syntax-Rätsel und Datenstruktur-Herausforderungen von R frustrieren Datenwissenschaftler - und werden das auch in den kommenden Jahren tun, angesichts der Installationsbasis und dem weiter wachsenden Ökosystem von R. Immerhin: Es ist besser sich an den Doppelklammern in R die Zähne auszubeißen, als endlos Pakete in einer anderen Sprache neu zu schreiben.

Java

Die Virtual Machine und die Bibliotheken von Java entstammen zwar den 1990er Jahren, seine Syntax steckt jedoch in den 1970er Jahren fest. Automatisches Memory Management klingt erst einmal nach einem großen Fortschritt - bis sich Ihr Code dazu entscheidet, abzutreten, während die Garbage Collection die Kontrolle übernimmt.

Java-Programmierer beschweren sich seit langem über diverse Probleme, von denen einige inzwischen behoben oder zumindest von Oracle in Angriff genommen worden sind. Das schafft allerdings auch neue Probleme: Einige der neueren Codes und Bibliotheken sind nicht mit den alten VMs kompatibel. Es scheint beinahe so, als ob jede Version von Java nach 1.4 eine andere Sprache wäre. Dazu kommt, dass sich das Release-Zyklus-Rad bei Java schneller denn je dreht. Das ist mit Blick auf neue Funktionen positiv, bedeutet aber auch, dass es komplexer wird, Code stabil und lauffähig zu halten.

Dennoch ist und bleibt Java die Grundlage für Internet und Mobiltelefone. Die Bibliotheken-Sammlung ist so umfangreich und wertvoll wie bei kaum einer anderen Programmiersprache. Und nicht nur das: Viele neue Sprachen basieren auf Java, weil sie zu Java-Bytecode kompilieren. Java wird also immer einen Platz im Stack haben. Akzeptieren Sie es einfach.

Python

Python ist eine moderne Sprache, die vor allem jüngere Entwickler anspricht. Die Zeichensetzung ist spärlich und der Code sieht sauberer aus. Was es daran auszusetzen gibt? Statt geschweifte Klammern zählen Sie hier Leerzeichen und achten darauf, dass die Spalten richtig ausgerichtet sind. Dabei empfiehlt sich dringend, eine Monospace-Schriftart zu verwenden.

Eines der größten Probleme von Python sind auch die Lücken zwischen den Versionen. Insbesondere neuere Versionen enthalten Aktualisierungen, die unter Umständen Code beschädigen können. So geben Funktionen, die früher 0 oder 1 zurückgaben, in Python 3.6 plötzlich Boolesche Werte zurück. Wörter wie "async" und "await" wurden mit Version 3.7 zu reservierten Keywords. Natürlich hat das Entwicklungsteam keine Wahl, wenn es Python weiterentwickeln und optimieren will. Für Nutzer, die in größeren Projekten mit älteren Bibliotheken arbeiten, bedeutet das jedoch, immer wieder überprüfen zu müssen, welche Version installiert ist.

Noch komplizierter wird die Sache durch den Umstand, dass viele der gängigen Linux-Distributionen Python für Systemaufgaben verwenden. Selbst wenn Sie die Versionen für Ihren Code aufrechterhalten können, kann es deshalb sein, dass die Distribution eine andere Version verwendet. Ein Upgrade im Hintergrund kann so unter Umständen Ihren Code lahmlegen. Dennoch: Auch Python werden wir nicht mehr so schnell los.

Swift

Es stimmt nicht ganz, dass Swift eine Apple-exklusive Sprache ist: Eine kleine Gruppe von Enthusiasten feiert die Verwendung von Swift auf einem Server. Aber zum größten Teil ist es nur eine spezielle, nicht ganz so geheime Handshake-Sprache, die nur innerhalb der Apple-Festung verwendet werden kann. Dabei ist Swift ohne Zweifel besser als sein Vorgänger Objective C: Die Zeichensetzung ist sauberer, die Typisierung besser. Header-Dateien gibt es nicht mehr und die Speicherverwaltung läuft automatisiert.

Aber für Entwickler ist das Leben trotz all dieser Verbesserungen nicht leichter: Swift ist umfangreich, was es schwierig macht, sie zu durchdringen. Mit all den ausgefallenen, neuen Funktionen, die ständig hinzukommen, lassen sich Hunderte Bücher füllen. Das ist ein ganz anderer Ansatz, als ihn beispielsweise Google mit Go fährt: Go ist so einfach wie möglich gestaltet, damit der Code einfacher zu lesen und zu verstehen ist. Die unzähligen cleveren Funktionen von Swift können gelegentlich Zeit sparen, wenn die Programmierer wissen, wie man sie richtig nutzt. Dabei ist die Chance allerdings hoch, dass der nächste Entwickler, der den Code lesen muss, nicht gleichermaßen damit vertraut ist.

Doch Apple liebt seine Sprache und wird daran festhalten. Die beste Lösung ist also, sich mit Swift auseinanderzusetzen und sich eventuell auf einen Teilbereich der Funktionen zu beschränken. (fm)

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.