Ich habe ja letztens angekündigt, mehr über technische Themen schreiben zu wollen. Während ich nun über das heutige Thema nachgedacht habe, ist mir allerdings aufgefallen, dass ich seither noch keinen einzigen technischen Blogpost veröffentlicht habe. Zu meiner Entschuldigung unterliegt aber das meiste, worüber ich gerne schreiben würde einer Verschwiegenheitspflicht, sodass ich im Moment kein Wort darüber verlieren möchte, allerdings habe ich schon nachgefragt, ob die Verschwiegenheitspflicht wenigstens in Teilen gelockert werden kann, sodass ich doch etwas darüber schreiben kann, also bleibt dran 🙂
Ich weiß, dass die Wahl der Programmiersprache schnell zu einem religiösen Thema werden kann und dass Diskussionen darüber sehr schnell sehr hitzig werden können. Daher habe ich für mich den Schluss gezogen, dass eine Programmiersprache nicht per se gut oder schlecht ist, es kommt nur auf den persönlichen Geschmack an. Es ist wie beim Essen: Ich mag keinen Fisch (und habe meine Gründe dafür), auf der anderen Seite gibt es Menschen, die Fisch genau aus diesen Gründen lieben.
Ich liebe Java. Ehrlich gesagt, liebe ich Java eigentlich nicht. Es hat viele Nachteile, derer ich mir durchaus bewusst bin, ich hatte nur bisher keine Zeit, um Kotlin zu lernen. Sagen wir vielleicht, dass ich Java lieber mag als andere Programmiersprachen.
Ich hasse C++. Ich hasse es aus tiefstem Herzen. Ich hatte an der Uni einen C++ Kurs und ich habe in dem Kurs viel über Pointer und Speicherverwaltung gelernt, aber das wichtigste, was ich aus diesem Kurs mitgenommen habe, ist, dass ich C++ nicht mag. Ich weiß, dass es seine Vorteile und eine Daseinsberechtigung hat, aber das bedeutet nicht, dass ich es benutzen muss.
Aber warum wird C++ überhaupt benutzt?
Der wichtigste Vorteil, der immer angeführt wird, ist, dass man als Programmierer direkten Zugriff auf die CPU und den RAM hat. Man kann auf die einzelnen Bits und Bytes zugreifen, was natürlich den Vorteil hat, dass man sein Programm bis zum Maximum optimieren kann und der einzige Flaschenhals dabei die eigenen Programmierkenntnisse sind.
Auf der anderen Seite ist das auch der Hauptaspekt, warum ich C++ nicht mag: In den meisten Fällen ist Speichermanagement etwas, worum ich mich als Programmierer gar nicht kümmern will. Ich will nicht darüber nachdenken müssen, wann ich Pointer und wann ich Objekte durch die Gegend schiebe und wann ich Pointer zu Objekten, Objekte zu Pointern und Pointer wieder zurück zu Objekten konvertiere. Die meisten Menschen (mich inklusive) sind im Programmieren auf einem so niedrigen Hardwarelevel nicht gut genug, was in Fehlern, Bugs und möglicherweise sogar Sicherheitslücken resultiert. Da finde ich die Idee, solche Arbeit professionellen Informatikern zu überlassen, deutlich besser.
Eine andere Sache, die ich an C++ nicht mag, ist, dass C++ ein Biest ist, welches über die Zeit mehr und mehr Patches erhalten hat und jetzt ein riesiger Flickenteppich ist. Man muss nicht mal lange nach Beispielen suchen: Ein Blick auf Strings reicht: Natürlich gibt es den std:string, aber Qt bringt seinen eigenen QString mit. Warum gibt es keine standardisierte Art, wie Strings behandelt werden? Ein anderes Beispiel sind Exceptions. Ich weiß, dass Exceptions nicht das Nonplusultra der Fehlerbehandlung sind und dass es gute Gründe gegen Exceptions gibt. In C++ gibt es allerdings Libraries, welche Exceptions nutzen, andere nutzen Fehlercodes und wieder andere verwenden boolean-Parameter. Warum gibt es keine standardisierte Art der Fehlerbehandlung?
Ich weiß, dass Java neuere Features hat, die es auch ein bisschen zu einem Flickenteppich machen, beispielsweise bin ich kein Fan der neuen Streams, welche mit Java 8 eingeführt wurden, allerdings hat Java im Großen und Ganzen von C++ gelernt und dessen Probleme behoben.
Aber wenn Java auch nicht perfekt ist, was ist denn dann perfekt? In der Arbeit nutze ich C# und bin ehrlich gesagt sehr angetan davon. Es gibt Exceptions in C#, allerdings wurde die dumme Idee der „Checked Exceptions“ entfernt. Außerdem mag ich Properties sehr, da Properties die Notwendigkeit von Gettern und Settern eliminieren. Des Weiteren hat Kotlin letztens die Bildfläche betreten und bisher habe ich nur positives darüber gelesen und gehört: Keine NullPointerExceptions mehr dank null safety! Leider hatte ich bisher nicht die Zeit, um mir Kotlin zu Gemüte führen zu können, aber das ist etwas, was definitiv auf meiner To-Do-Liste steht.
Natürlich gibt es noch viele andere Programmiersprachen, welche versuchen, das Chaos, welches C++ und Konsorten hinterlassen haben, zu beseitigen. Beispielsweise ist ein Freund von mir großer Fan der Programmiersprache Go, weil in Go geschriebener Code so sauber und präzise ist, da unnötige Schlüsselwörter ausgelassen werden. Gleichzeitig ist das auch mein Hauptgegenargument gegen Go. Woher soll ich wissen, dass eine Methode mit großem Anfangsbuchstaben public ist und eine mit kleinem Anfangsbuchstaben private? Kann das nicht einfach als Schlüsselwort davorstehen?
Ich will nochmal betonen, dass es sich hierbei um eine Geschmacksfrage handelt und dass ich auch andere Meinungen nachvollziehen kann. Vielen Dank fürs Zuhören 🙂