Dein letzter Login ist schon eine Weile her.

Bitte überprüfe, ob alle Angaben in Deinem Profil noch aktuell sind.


Bild: Spring 2012 Student Hackathon Coding, Bildausschnitt by hackNY.org, Lizenz: CC BY-SA 2.0

03.03.2015
von Aleksander
in IT-Talents

C++ vs. Java

x
Für Unternehmen:
IT-Nachwuchs kennenlernen!
Jetzt starten

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?

Lesezeit: ca. 4 Min.

Bewerten

Themen auf dieser Seite:

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.

Oft gelesen:

Dein Studiengang? Wirtschaftsinformatik!
Jetzt lesen!

12 Bücher, die jedes IT-Talent gelesen haben sollte
Jetzt lesen!

Dein Weg in die IT-Branche (3)
Jetzt lesen!

IT-Talents ist ein Netzwerk nur für IT'ler. Auf unserer Plattform kannst Du Dich als registriertes Mitglied mit wenigen Klicks auf die Jobs unserer Partnerunternehmen oder auf IT-Projekte für Studierende bewerben. Darüberhinaus führen wir Wettbewerbe durch und vergeben IT-Stipendien.

Jetzt Mitglied werden.

Verwandte Artikel

Was ist das Objekterkennungssystem YOLO?

14. Aug 2020 in IT-Talents

Nicht nur die Großen der Branche wie Google oder Facebook entwickeln sie, neuronale Netzwerke zur Objekterkennung auf …

weiter

Business Intelligence Software - Welche Lösungen gibt…

23. Jul 2020 in IT-Talents

Daten gehören zu den wertvollsten Ressourcen jedes Unternehmens. Diese Schätze lassen sich allerdings nur mit einer e…

weiter

Die 6 besten PHP Frameworks 2020

11. Jun 2020 in IT-Talents

Websites sind im Laufe der Zeit komplexer und anspruchsvoller geworden. Positiv zu vermerken ist, dass sie jetzt…

weiter

Application Lifecycle Management: Definition und Funktion

27. May 2020 in IT-Talents

Ein Softwareprodukt verläuft in seinem Lebenszyklus mehrere typische Phasen, die sich unabhängig von der Art und K…

weiter

Machine Learning: Was bedeutet Accuracy und Precision?

19. May 2020 in IT-Talents

Machine Learning ist ein Teilgebiet der künstlichen Intelligenz und befasst sich mit der Verbesserung von …

weiter

Was ist Supervised und Unsupervised Learning?

04. May 2020 in IT-Talents

Vielleicht hast du auch schon mal von den Begriffen Supervised Learning und Unsupervised Learning gehört, welche …

weiter

Was ist Ruby?

02. May 2020 in IT-Talents

Ruby ist ein objektorientierter Programmierspracheninterpreter, der vom Programmierer Japaner Yukihiro "Matz" Matsumoto…

weiter

Was ist eine Turingmaschine?

27. Apr 2020 in IT-Talents

Die Turingmaschine ist ein klassisches Konzept, das noch vor der Computer-Ära entstanden ist. Dabei handelte es sich um …

weiter

Was ist MySQL?

23. Apr 2020 in IT-Talents

Mit MySQL ist ein global eingesetztes relationales Datenbanksystem gemeint. Es ist die technische Grundlage bei vielen…

weiter

Schnell-Login für unsere Mitglieder

Tipp: Halte Dein Profil aktuell.

Lass' uns wissen, falls sich etwas Neues bei Dir ergibt.

Tipp: Vervollständige Dein Profil für noch bessere Karrierechancen.

Bist Du Schüler, Student oder bereits berufstätig? Teile uns Deinen aktuellen Status mit, damit wir Dir sinnvolle Aufgaben anbieten können.

Jetzt Status angeben

Wann stehst Du der IT-Branche zur Verfügung?

Bitte Monat und Jahr angeben.

{{ perspectiveForm.availableFrom.$error.dynamic }}

Neuer Versuch

Wo möchtest Du durchstarten?

{{ location.geolocation.name }}×
Bitte mindestens ein Ort angeben.

Als {{currentUser.status.title}} bist Du bereit für:


Lade Beschäftigungsarten

Bitte wähle den Zeitpunkt, Ort und min. eine Beschäftigungsart aus.

You have voted!
Schliessen
Vote for:
stars
Vote
You have not rated!