Gehasste und geliebte Sprachen
In der Vorlesung wurde ich gestern nach Programmiersprachen gefragt: welche werden gehasst und welche werden in Freier Software geliebt? Und wie gerechtfertigt ist das? Knappe Kommentare, zugespitzt.
Spoiler: die Realität ist weit differenzierter als verbreitete Vorurteile. Lasst euch nicht durch eure Vorurteile blockieren. Auch nicht durch meine.
Etwas überarbeitete Fassung der aus dem Ärmel geschüttelten Einschätzung in der Vorlesung. Immernoch aus dem Ärmel geschüttelt, aber mit ein paar Links.
Für mehr Sprachen und andere Sichtweisen, schaut auf den TIOBE Index und den StackOverflow Developer Survey: Worked and Want To.
Disclaimer: das hier ist meine Meinung. Andere sehen das anders. Vielleicht zurecht. Ich habe das mal anders gesehen. Und werde es in Zukunft anders sehen. Niemand weiß wirklich, was gut ist. Ergänzungen gerne über Mastodon.
Gehasste Sprachen
Fortran
Alte Leute mussten alle damit arbeiten und hassen es. Im Studium fanden wir es alle schrecklich und ich habe in der Doktorarbeit zwei Jahre gebraucht, um die Vorurteile zu überwinden.
Es ist alt und hat einiges an Deklarationsoverhead, schreibt sich für Mathematik aber sogar angenehmer als Python und ist fast 100x schneller. Ich habe einen kleinen Einstieg geschrieben.
Fortran 90 ist allerdings auch eine viel elegantere Sprache als Fortran 77 (das Die Alten™ lernten).
Und Fortran-Code von vor 40 Jahren läuft heute noch.
Wenn eine Sprache nicht gehasst wird, war sie nie beliebt …
COBOL
Alte Leute in Finanzen und Verwaltung mussten damit arbeiten. Elon Musk findet, es sollte über KI-Übersetzung durch Java ersetzt werden.
Die proprietären Compiler sind teuer und gnuCOBOL ist noch langsam, über die EU wird aber Arbeit an freien COBOL-Werkzeugen unterstützt.
Ich erwarte ein Comeback.
Java
Lange Zeit die am weitesten verbreitete Programmiersprache, mit viel Overhead und harter Abstraktion, gleichzeitig aber Reflection, die sie bricht. Es braucht eher mehr RAM, floating Point Mathematik ist suboptimal und es ist für low-level Arbeit unpraktisch (keine unsigned bytes …).
Verbose: Braucht viel Code für wenig Logik.
Es gibt Bibliotheken für alles. Oft schlecht dokumentierte Bibliotheken. Industriestandard.
Java ist in den letzten Jahren aber eleganter geworden (z.B. durch Lambdas
und Records und var) und die JVM ist flexibel und schnell.
Javascript
Für Jahrzehnte funktionierte nur Javascript für Web-Frontends ohne Neuladen. Die Sprache ist inkonsistent und gefährlich und falsy und truthy haben schon einige fiese Bugs produziert. Braucht durch Geschwindigkeitsoptimierungen (Beispiel: Multi-Tier-JIT) vergleichsweise viel Speicher.
Aber Javascript von vor 10 Jahren läuft heute noch.
Und es schafft gleichzeitig eine minimale Startverzögerung von Quellcode aus.
Dass Javascript schnell wurde (Node.js im Benchmarksgame) beweist, dass jede Sprache bis auf Faktor 3 an C herankommen kann, wenn nur genug Geld und Fachkenntnis auf die Optimierung geworfen wird.
PHP
Kann alle Paradigmen und fällt dir sicher auf die Füße. Wurde viel von Leuten genutzt, bevor sie richtig Programmieren konnten. War früher sehr langsam, aber Facebooks Hack-Versuch hat bewiesen, dass auch PHP schnell sein kann und PHP 7+ ist schneller als Python. Der einfachste Schritt von statischen zu dynamischen Seiten.
PHP war auf jedem Server verfügbar, weil seine Sandbox den Betrieb dort einfach und (für den Serverbetreiber) verlässlich machte.
PHP läuft immernoch hinter vielen großen Webseiten.
Prolog
Wird an Unis gelehrt, um Logikprogrammierung zu lernen.
Es war vor dem zweiten KI Winter 1987 die Europäische Antwort auf Lisp. Sega hat damit 1986 einen KI-Computer veröffentlicht. MAME kann ihn seit 2024 emulieren.
Lisp/Scheme
Lots of Irritating Superfluous Parentheses. Nach dem KI-Winter wurde es durch andere Sprachen verdrängt, außer ihr nutzt Emacs (wie ich). Seine Features tauchen immer wieder auf.
Mehr dazu bei den geliebten Sprachen.
Geliebte Sprachen
Rust
Von Mozilla gefördert, hat in Firefox große Fortschritte ermöglicht, wird von allen geliebt und produziert 500 MiB große Projekte mit massiven Compilezeiten aus ein paar dutzend Seiten Code.
Wird für mich erst interessant, wenn mit GCCrs eine zweite Implementierung verfügbar ist, deren Hardware-Support nicht durch das von Apple kontrollierte LLVM begrenzt ist
Go
Einfach aufzusetzen, baut kleine Binaries, einfache Parallelität, einfach zu lernen durch absichtliche Begrenzung, begrenzt durch absichtliche Begrenzung (Leute beschweren sich, dass sie gegen Wände laufen).
Lua
Kann leicht als Skriptsprache in Spiele eingebunden werden, kann mit LuaJIT schnell sein. Ich habe nie mehr als ein Hello World gebaut.
C
Elegant in der Nähe zur Hardware. Leicht für Leute mit viel Hintergrundwissen. Pointer sind gefährlich. Doppelpointer sind doppelt gefährlich.
Großes Risiko von Speicherfehlern, durch Tooling aber teilweise erschlagen.
C++
Für Leute, die glauben, dass sie programmieren können. Wahnsinnige Komplexität mit mehr Fußangeln als Javascript, aber für maximale Leistung von komplexen Systemen nützlich.
Fügt Klassen zu C hinzu. Und ein Turing-Vollständiges Template-System, mit dem Laufzeiteinsparungen durch Compilezeitkosten erkauft werden können.
Smart Pointer sind sicherer als Pointer, müssen dafür aber genutzt werden.
Nicht ganz so großes Risiko von Speicherfehlern wie C, durch Tooling teilweise erschlagen.
Typescript
Typen in Javascript: Die Fußangeln von Javascript gepaart mit der Verbosity von Java, aber etwas leichteres Refaktorieren durch Typ-Prüfungen (deren Korrektheit aber nicht für Laufzeit gilt ⇒ es ist ein teurer Linter mit viel Overhead; findet aber echte Fehler).
Löst keine Kommunikationsprobleme. Kontrolliert von Microsoft.
Python
Leicht zu lernen, Sehr gute Dokumentation, sehr nette Community, langsam, braucht in großen Projekten viele Hacks für gute Startzeit. Früher: „schreib nur Performance-Kritisches in C“. Heute: „Schreib ein Python-Frontend für ein riesiges C++-KI-Modell“.
Es gibt Bibliotheken für alles. Gut dokumentierte. Darunter scipy und matplotlib.
Unter scipy läuft viel Fortran. Teils sehr, sehr alt. Und schnell.
Lisp/Scheme
Lots of Irritating Superfluous Parentheses. Nach dem KI-Winter wurde es durch andere Sprachen verdrängt, aber seine Features tauchen immer wieder auf.
(ja, Lisp wird geliebt und gehasst)
Für die Leute, die die Grenzen von Softwareentwicklung austesten und ihr Hobby sicher nicht im Job verwenden wollen.
(vielleicht ändert sich das noch)
Es gibt ein Scheme für jede Domäne – von Embedded Device bis Webservice.
Um der Lisp Curse zu entgehen, beachtet den Lisp Curse Redemption Ark und den Zen for Scheme. Um die Klammern zu verringern, nutzt Wisp (Scheme) oder Whisper (Common Lisp).
Ich verwende in meinen Hobby-Projekten Guile Scheme (⇒ py2guile und Programming Essentials with Scheme und with Wisp). Das hier ist also mit Vorsicht zu genießen.