C++ vs. Java

c-vs-java

Viele stellen sich die Frage, welche Programmiersprache für sie die richtige ist: Java? Python? C++? C#? VB? Es gibt sehr viel Auswahl und auf der Suche nach Informationen findet man viele widersprüchliche Angaben, entsprechend ist die entstehende Verwirrung natürlich verständlich. Bevor man sich jedoch überlegt, welche Sprache man nehmen will, muss man sich folgende Frage stellen: Wofür möchte ich das Werkzeug, das ich mir aneigne, nutzen?

Wer nur schnell eine hübsche GUI und ein paar Funktionen für ein 0815 Programm schreiben möchte, um sich das Leben zu vereinfachen, kann sich die Arbeit, jahrelang C++ zu programmieren, sparen und innerhalb weniger Tage die Grundlagen von AutoIt lernen.

Im folgenden Vergleich werde ich vor allem auf die Unterschiede zwischen Java und C++ eingehen, da viele der Vor- und Nachteile der Programmiersprache Java denen von .NET Sprachen ähneln beziehungsweise identisch sind. Des Weiteren sind es zwei der bekanntesten Programmiersprachen.

Vergleich

Der erste große Nachteil von Java und allen .NET Sprachen wie VB, C# und Co. ist, dass man sie decompilen kann. Jeder Schutzversuch stellt nur eine Verzögerung dieses Vorgangs da. Das könnt Ihr Euch also so vorstellen: Ihr sitzt 200 Stunden an einer innovativen Software mit einer genialen Idee, lasst euch brillante Lösungen einfallen und jeder Hobby-Programmierer, der in der Lage ist zu googlen, kann sich eine Anleitung besorgen und euren Sourcecode im Klartext wiederherstellen. Genau so können Konkurrenten und jemand, der eine Sicherheitslücke sucht, detaillierte Informationen über Euer Programm bekommen, um Schwachstellen auszunutzen und gute Ideen zu stehlen.

Dies ist mit C++ oder C nicht möglich, man kann zwar Reverse-Engineering betreiben, aber dadurch bekommt man nie den Sourcecode des Programms und benötigt sehr spezifische Assembler-Kenntnisse und langjährige Erfahrung.

Ein weiterer Nachteil ist, dass man mit Java und .NET Sprachen von Unternehmen und deren Willkür abhängig ist. Sun oder Microsoft könnten jederzeit ihre AGB ändern, die Weiterentwicklung einstellen und haben immer den finanziellen Aspekt im Auge. C++ wird nicht von einem Unternehmen, sondern von einem bekannten Entwickler Namens Bjarne Stroustrop entwickelt und bei Treffen von weltweiten Experten weiterentwickelt.

Ein Pluspunkt, den man früher in Java gesehen hat, war, dass Java ein bereinigtes C++ ist, da man in C++ Speicher selber verwalten musste, keine Garbage Collection hatte, mit rohen Pointern arbeiten musste und auch sonst viele Sachen deutlich anspruchsvoller waren. Mittlerweile kann man aber durch C++11 und 14 auch mit C++ sehr sauberen und gut wartbaren Code produzieren, der Java in nichts nachhängt, im Gegenteil, es wurden viele Features, die Java noch nicht unterstützt, implementiert.

Der wichtigste Vorteil von C++ (und C) ist die Maschinennähe und die damit verbundene Schnelligkeit. Hardware-Treiber , Hochleistungsprogramme und grafikintensive 3D Spiele sind mit anderen Sprachen kaum denkbar, nicht umsonst installiert Steam, die größte Spieleplattform, für jedes Spiel immer die C++ Toolkits und bietet ausschließlich eine C++ API für die Integration des Stream-Services an. Der Nachteil ist hier jedoch, dass C++ schnell umfangreicher und komplexer werden kann, oft wird vom Einstieg in das Programmieren mit C++ abgeraten, da Java und .NET Sprachen einfach schneller zu Ergebnissen führen.

Undefiniertes Verhalten bei Fehlern, Memory-Leaks, umfangreiches Exception-Handling und komplexes Compilen von Libraries sind für C++ Entwickler keine Fremdwörter, wobei C++11 mittlerweile jemandem, der mit modernen Methoden und sauber programmiert, die Probleme fast komplett abnimmt. Trotzdem besteht gerade hier die Gefahr, in C mit Klassen abzudriften, da auch viele Beispiele im Internet veraltet sind und nicht angewendet werden sollten, außer man weiß sehr genau, was man tut.

Java kann den Vorteil der Maschinennähe nicht bieten, da es Bytecode über eine virtuelle Maschine laufen lässt, was jedoch den Vorteil hat, dass man es ohne Probleme auf jeder Plattform nutzen kann, ohne Anpassungen machen zu müssen, C++ ist prinzipiell auch für alle Plattformen wie Linux, Windows, Mac u.s.w. kompatibel, jedoch muss man teilweise plattformspezifische Anpassungen definieren. Ein weiterer Faktor, der in Sachen Schnelligkeit beteiligt ist, ist der JIT Java Compiler, der in manchen Fällen schneller als C++ ist, da er sich bei jedem Start auf die CPU Art anpasst und C++ nur eine allgemeine Lösung bietet, an dieser Stelle ist die Umsetzung des C++ Programms wichtig, da die Sprache dem Entwickler viele Möglichkeiten zur Optimierung bietet, was natürlich mit mehr Komplexität und Aufwand verbunden ist. Aktuelle Benchmarks von maximal-optimierten Programmen beider Sprachen ergeben in den meisten Fällen ein 2-3 mal besseres Ergebnis bei C++.

Des Weiteren kann GUI-Programmierung ohne eine sehr gute Library wie QT bei C++ schnell zur Herkulesaufgabe werden und die Ergebnisse sind oft so ansehnlich wie ein Autounfall. Hier können Java und .NET Sprachen von einfachen, direkt in die Sprache integrierten Engines profitieren, die dem Programmierer durch „Zusammenklick-Tools“ die Visualisierung vereinfachen, mittlerweile durch QT aber auch ohne Abstriche in C++ möglich.

Bis jetzt sprechen die meisten Punkt dafür, dass man zu C++ greift, jedoch kann Java unter anderem mit App-Programmierung punkten. Wenn man nicht die native Sprachen des mobilen Betriebssystems nutzt, muss man in vielerlei Hinsicht, vor allem was das Design angeht, Abstriche machen. Da Android auf Java basiert, können Java Programmierer mit der SDK sehr leicht Apps entwickeln und testen, während die wenigen C++ Libraries, die es für Apps gibt, sich bei Android der NDK bedienen müssen und entsprechend nur begrenzt einsatzfähig sind. QT stellt auch hier eine C++ Lösung für das Problem, jedoch ist die Lizenz mit vollem Funktionsumfang ein teurer Spaß und in der Regel nur für Unternehmen mit kommerziellen Projekten von Interesse. Das iOS von Apple besitzt eine hauseigene Sprache, die der Syntax von C++ stark ähnelt.

Fazit

Abschließend kann man sagen, dass .NET Sprachen und Java vor allem durch Einfachheit und Nutzerfreundlichkeit punkten, C++ ist aufwendiger und komplexer, kann jedoch vor allem, was Geschwindigkeit, Sicherheit und Souveränität angeht, den Längeren ziehen.

Syntax-Technisch nimmt sich beides nicht allzu viel, jedoch würde ich persönlich als jemand, der alles je nach Einsatzgebiet und hauptsächlicher C++ Programmierer, behaupten, dass letzteres, wenn man die Zusammenhänge einmal verstanden hat, sehr verständlich und schön umsetzbar werden kann.

Rückmeldungen