Ist die Programmiersprache irrelevant?

Veröffentlicht am

Intro

Das ist eine der wohl häufigsten Fragen die zwischen Anfängern aber auch erfahrernen Programmierern heiß diskutiert wird. Gerade im akademischen Umfeld und der Ausbildung hört man oft "die Sprache ist grundsätzlich egal".

Würde eine Sprache reichen?

Doch warum gibt es dann so viele von Ihnen? Warum programmieren wir dann nicht alle mit C oder C++? Gibt es vielleicht doch Unterschiede? - Natürlich gibt es Unterschiede.

Ob es nun die besonderen Funktionen sind, die bei Nebenläufigkeit unterstützen oder eine bestimmte darunter liegende Architektur, wie das z. B. nur ein Kern genutzt wird oder breitere APIs mitgeliefert werden.

Jede Sprache entstand aus einer Problemstellung heraus.

Prominentestes Beispiel hierfür ist wohl Java. Eine Sprache die geschaffen wurde, um verschiedene Plattformen abzudecken. "Write once - Run anywhere". Ziel war die Schaffung einer einheitlichen Plattform für alle gängigen Betriebssysteme, aber am Besten für jedes. Dieses Ziel wurde sehr gut erreicht, aber es hat den Nachteil, dass man eben nicht spezifisch auf jedes Betriebssystem eingehen kann. Also eher ungeeignet für sehr auf das OS oder die Hardware ausgerichtete Einsatzzwecke. Grundsätzlich ist sie ja eine "general purpose language", zu gut Deutsch eine "Universelle Sprache". Egal ob man ne GUI braucht oder einen hochverfügbaren Server oder sogar für die Entwicklung von Embedded Systems. Wobei hier ein ganz klarer Trend erkennbar ist das Oracle, die Firma hinter Java, die GUI-Entwicklung auf Dauer eher vernachlässigen will. Details hierzu würden hier den Rahmen sprengen und kommen vielleicht mal in einem anderen Post.

Ein anderes klassiches Beispiel für eine Programmiersprache die speziell für die Bedürfnisse der Telekommunikation entwickelt wurde: Erlang. Sie ist ein kleiner Undercover-Star, allgegenwärtig und doch so versteckt. Ihre Stärken liegen besonders in der Entwicklung hochverfügbarer, verteilter, skalierbarer Systeme. Bekannte Größen wie Telekom, WhatsApp & Co. nutzen Erlang aktiv für ihre Dienstebereitstellung. Eine Entwicklung von Benutzeroberflächen usw. ist weder unterstützt noch vorgesehen.

Also kommen wir auf diese Weise nicht weiter, jede Programmiersprache hat ja doch einen vordefinierten Einsatzbereich. Es macht eben doch einen Unterschied, mit was Programme, Apps oder ganze Systeme programmiert werden.

Macht es für den Entwickler einen Unterschied?

Vielleicht ist das ganze ja auch eher darauf zu sehen, dass für den Programmierer selbst die Sprache keinen Unterschied macht. Schliesslich dient ja jede Sprache zur Abbildung von Logik oder wie die Theoretiker immer gerne von sich geben, zur Umsetzung von Anforderungen.

Doch eine Sprache alleine ist ja nicht überlebensfähig.

Bestes Beispiel ist hierbei der Vergleich mit einer Währung. Eine Währung an sich ist nur eine "logische Größe", nur wenn es Menschen gibt die an sie glauben und ein breites Ökosystem für die Währung bereitsteht. Das heißt Banken, regulierende Instituationen und eine Art Verwaltung sowie Überwachung der Währung. Es müssen sich Gedanken gemacht werden über z. B. Fälschungssicheheit und Normung sowie der Anpassung an aktuelle Gegebenheiten.

Bei einer Programmiersprache ist das gar nicht so anders wie bei einer Währung. Hinter jede Sprache steht eine Community, eine Firma oder zumindest ein Personenkreis, der sich aktiv mit der Sprache beschäftigt. Die Entwicklung neuer Features, das Bereitstellen neuer Funktionen oder die Anpassung an neue Umstände. Aber auch Normierung, Konventionen und vieles mehr spielt hierbei eine Rolle. Also liegt der Erfolg einer Sprache auch an den Machern oder der Community. Gibt es viele wiederverwendbare Module/Klassen/Bibliotheken/Frameworks? Ist es aktiv in der Weiterentwicklung? Wie stabil ist die Sprache? Welche Schwerpunkte hat die Sprache? Welche Vorteile und Nachteile kann ich nutzen, bzw. auf was muss ich mich einstellen? - Plötzlich wird die Wahl der geeigneten Sprache schwieriger.

Doch nicht nur die Sprache selbst und deren Ökosystem oder die Laufzeit sind entscheidend. Auch die Tools spielen eine maßgebende Rolle. Bestes Beispiel ist an dieser Stelle C#. Sie setzt auf das .NET Framework, standardmäßig mit Windows mitgeliefert, also schon auf den meisten Geräten vorhanden. Die IDE Visual Studio wird selbst entwickelt, so kann man noch vor Release bereits neue Features unterstützen und quasi zeitnah Tools und Sprache bzw. Runtime aktualisieren, erweitern und verbessern. Maximale Kontrolle, eine wahre Seltenheit in diesem Bereich.

Ein weiteres gutes Beispiel ist an dieser Stelle auch Java. Es existieren an sich 3 große Alternativen: eclipse, NetBeans sowie IntelliJ.

Die ersten beiden sind komplett offene Produkte, die von einer Community entwickelt werden und einer Foundation unterstellt sind. IntelliJ wird von der Firma JetBrains entwickelt und ständig um neue Features erweitert. Hierbei gibt es eine kostenlose und kostenpflichtige Version mit erweiterten Funktionen. Grundsätzlich eignen sich alle Tools für die Erstellung von Software. Doch viele wissen, dass es in der Praxis eben nicht so ist.

eclipse ist z. B. bekannt für seine umständliche Bedienung und ständige Abstürze sowie Instabilität von Plugins sowie deren bescheidene Interkompabilität.

NetBeans macht an dieser Stelle vieles richtig, ist allerdings nicht immer gut und einfach zu benutzen. Besonders nervig ist hierbei die sehr ruckelige IntelliSense.

IntelliJ ist nach meiner persönlichen Einschätzung das beste Produkt, wenn auch gleich das Maximum (leider) nur aus der kostenpflichtigen Version rausgeholt werden kann.

Da eclipse die bekannteste IDE ist und von vielen Neueinsteigern verwendet wird, als auch von vielen mittleren bis großen Unternehmen schreckt dies viele Developer ab mit Java zu arbeiten.

Man möchte natürlich mit den Tools produktiv programmieren und nicht die Zeit damit verbringen, zu warten oder Probleme mit den Tools zu lösen. Solche Kleinigkeiten wie ein kleiner Lagg in der IntelliSense können einen großen Unterschied machen.

So ist es nicht verwunderlich, dass oft bei der Wahl der Programmiersprache auch die verfügbaren Tools betrachtet und als Kriterium herangezogen werden.

Die Wahl für oder gegen eine Sprache ist also ein durchaus sehr kompelexer Vorgang, wenn man alle Kritieren beleuchten möchte.
Hier betrachtet man also mehr als nur die Sprache selbst, sondern auch das ganze Ökosystem, Tools und Libraries. Oder auch schlicht und ergreifend welche Communtiy hinter alledem steht.
So wird oft eine starke Community oder eine große Firma als Macher positiv hervorgehoben. Gemäß dem Grundsatz "too big to fail".

Also sollte ich mich jetzt auf eine Sprache fokusieren?

Jein.

Natürlich ist Spezialisierung gerade in der heutigen Zeit wichtig. Man braucht immer mehr Experten die das Maximum aus einer Sprache herausholen, um maximale Skalierbarkeit zu erreichen oder einfach das angestrebte Ziel am elegantesten zu lösen.

Grundsätzlich gilt wie allgemein, lerne eine Sprache. Beherrsche Sie sehr gut.
Sie muss natürlich nicht für immer deine primäre Programmiersprache bleiben. Hierbei bietet sich natürlich an eine auszuwählen mit der man sich gleich heimisch fühlt. Grundsätzliche Konstrukte existieren in (fast) jeder Sprache. Aber auch grundsätzliche Konzepte finden sich in anderen Sprachen wieder.

Meine Empfehlung hierbei ist ein paar Sprachen für verschiedene Bereiche auf Lager zu haben, die man in diversen Bereichen im eigenen Umfeld braucht. Am besten mehr als eine pro Bereich. Das ganze klingt jetzt recht akademisch und abstrakt, deshalb ein konkretes Beispiel:

Man befindet sich im Bereich der Webentwicklung. Hierbei gibt es klassicherweise den Bereich Server & Client. Mit folgenden gängigen Sprachen:

Klassiche Serversprachen wären hierbei:

  • PHP
  • Python
  • Java
  • JavaScript

Und für den Client:

  • JavaScript
  • TypeScript

Dann bietet es sich an diese 5 Sprachen, bzw. genau genommen 4 wegen TypeScript gut bis sehr gut zu schreiben. So können z. B. folgende Sprachen sehr gut für verschiedene Einsatzzwecke geeignet sein.

So kann z. B. JavaScript eine tolle Lösung für den Server sein, wenn ohne viel Aufwand Daten zwischen Backend und Frontend synchronisert werden müssen. Node.js ist hierbei z. B. eine sehr weit verbreitete Runtime. Problem ist hierbei das alles in einer Event-Loop abläuft. Das ist grundsätzich ein Garant für hohen Durchsatz. Jedoch wird dieser Vorteil schnell zum Verhängnis, wenn man bedenkt das eine zeitintensive Operation den gesamten Server verlangsamen oder im schlimmsten Fall sogar pausieren kann.

Java kann hierbei z. B. sehr gut bei sehr verarbeitungsintensiven oder extremn Ansprüchen an die Performance gerecht werden. Braucht hierbei aber deutlich mehr Resourcen.

Python wäre z. B. eine exzellente Wahl bei der rapiden Erstellung von Webanwendungen, die trotzdem sehr stabil und schnell sind. Allerdings nur begrenzt skalierbar.

PHP wäre hier z. B. eine gute Wahl für Datenzugriffe oder HTML, sowie sehr datenbanklastige REST-APIs die keine dauerhafte Verbindung benötigen. PHP ist hierbei in seiner Ausführungsdauer beschränkt aber dennoch eine sehr solide und alt hergebrachte Wahl.

Beim Client spricht z. B. JavaScript für eine Stelle und direkte Ansprechung des Browsers. Hierbei kann man aber nur Features nutzen die bereits allgemein bekannt und implementiert sind. Es erlaubt aber dennoch eine schnelle Entwicklung ohne Zwischenschritte.

Bei TypeScript hingegen hängt sich der TypeScript-Compiler zwischen Source und JavaScript-Ausgabe und versorgt uns hierbei mit Typisierung bei der Programmierung sowie die aktuellsten Standards. Diese aktuellen Standards können auf Wunsch so transpiliert werden, dass alte Browser und Implementierungen ohne Probleme laufen.

Natürlich sind das alles sehr allgemeine Annahmen, doch im Kern sollte klar geworden sein, dass es doch einen Unterschied machen kann, mit was entwickelt wird.

Das Hauptaugenmerk sollte aber trotz allem darauf gelegt werden das für Entwickler, Admins und User ein gutes Mittelmaß gefunden wird. Hierbei gilt er aber das Sprichwort "Allen recht getan ist eine Kunst, die niemand kann". Natürlich kann kein Entwickler jeden immer ganz glücklich machen und so muss oft eine Lösung gefunden werden Schwächen zu kompensieren. Aber auch Stärken der eingesetzten Sprachen sollten natürlich bemerkbar werden.

Fazit des Ganzen

Die Wahl der Programmiersprache ist doch sehr wichtig aber nicht elementar ein Garant für gute Software. Aber die richtigen Werkzeuge für die richtigen Aufgaben zu finden ist eine solide Basis.

Die Diskussion um die "richtige" Programmiersprache wird dabei aber natürlich nie an Bedeutung verlieren. An dieser Stelle sei nur der ständige Krieg zwischen Java und C#-Entwicklern angeführt ;)

Ich freue mich wie immer sehr über konstruktives Feedback und bitte um Gande bei Grammatik, Zeichensetzung & Rechtschreibung ;)