Lohnt es sich heutzutage überhaupt noch C++ zu lernen? (Bitte Startpost lesen)

Jack159

Lieutenant
Registriert
Dez. 2011
Beiträge
766
Hallo,

Ich beherrsche Java ziemlich gut und in C# zumindest die Grundlagen. Jetzt überlege ich mir ob ich mich mit C++ beschäftigen soll.

Nach dem Studium möchte ich im Bereich Anwendungsentwicklung arbeiten. Unter "Anwendungsentwicklung" verstehe ich das entwickeln von Software jeglicher Art die auf dem Desktop oder auf mobilen Endgeräten (Apps) läuft.
Was ich eher nicht möchte ist Webentwicklung oder Eingebettete Systeme (worunter ich dann Waschmaschinen oder Mikrowellen verstehe, wo man dann dort die Menüs programmiert).

Lohnt sich da C++ überhaupt noch für mich? Ist das wirklich noch stark vertreten in der Anwendungsentwicklung?

Denn mit Java oder C# kommt man denke ich wesentlich schneller zu Ergebnissen, was ja auch extrem relevant ist für die Entwicklungskosten, oder? Man nimmt das was am schnellsten und günstigsten zum Ziel führt denke ich. Und performant dürften Java/C# doch in 99% aller Fälle ausreichend sein?!

Was meint ihr?
 
Du wirst eventuell mit der Pflege von 20 Jahre alter Software konfrontiert sein.
Von daher kanns mal nicht schaden... du wirst dann so gefragt sein wie ein Mechaniker der noch einen Vergaser einstellen kann.
 
Die Realität sieht anders aus, als du es dir vorstellst. In der Branche hat man ~30 Jahre lang C++ verwendet. Da portiert man nicht einfach sämtliche Software auf eine "modernere" Sprache und wirft sämtliches Expertenwissen weg, dass man über die Zeit angesammelt hat.
C++ zu lernen hat auch heute noch seine Berechtigung. Ada und Fortran sind schließlich auch nicht ausgestorben, obwohl sie "uralt" sind.


Unter "Anwendungsentwicklung" verstehe ich das entwickeln von Software jeglicher Art die auf dem Desktop oder auf mobilen Endgeräten (Apps) läuft.
Auf mobilen Endgeräten wird meist in JavaScript programmiert. Warum? Das lässt sich einfach auf jedes Handy-OS portieren und jemanden, der JS kann, findet man heutzutage immer. Das fällt aber genau in die Webentwicklungsschiene, die du nicht magst.
 
Jack159 schrieb:
Hallo,
Unter "Anwendungsentwicklung" verstehe ich das entwickeln von Software jeglicher Art die auf dem Desktop oder auf mobilen Endgeräten (Apps) läuft.
Dann würde ich mit dem Gedanken spielen C++ zu lernen. In der Industrie sind nämlich "Desktop-Programme" mit besonderen Leistungsanforderungen keine Seltenheit - solche Anwendungen sind dann je nach Alter entweder komplett in C++ oder einer Mischung unterschiedlicher Technologien (z.B. C++ <-> COM <-> VB6 oder jetzt auch neuer C++ <-> COM <-> CCW/RCW <-> Forms/WPF, …) geschrieben und werden immer noch gewartet/erweitert.


Generell schadet das Lernen von C++ eigentlich überhaupt nicht, da es im Gegensatz zu neueren Sprachen den Programmierer zwingt sich stets über die Ownership und den Lebenszyklus von Objekten Gedanken zu machen - dieser Punkt geht bei C# und Java (IMHO) zu sehr unter…
 
Zuletzt bearbeitet:
Bestehende Software zu warten/pflegen wäre eher weniger mein Wunschgebiet.
Ich sehe mich am ehesten in einem möglichst modernen (jungen) Team das möglichst agil Software entwickelt und ein Projekt nach dem anderen entwickelt und dabei möglichst wenig festgefahren ist sondern stets auf modernste Weise entwickelt.
 
Etwas können ist immer besser als es nicht zu können und ich finde als Softwareentwickler sollte man schon ein bisschen Ahnung von C++ haben.
 
Jack159 schrieb:
ein Projekt nach dem anderen entwickelt
Und hinter dir die Sintflut in Sachen Wartung oder wie stellst du dir das vor?
Jedes (teuere) Projekt für einen Auftraggeber wandert früher oder später in die Wartungsphase - das ist ein fixer Teil des Softwarelebenszyklus…
 
Jack159 schrieb:
Denn mit Java oder C# kommt man denke ich wesentlich schneller zu Ergebnissen, was ja auch extrem relevant ist für die Entwicklungskosten, oder?

Das halte ich für ein Gerücht. Erklär mir mal, wieso du mit Java / C# schneller zum Ziel kommst als z.B. mit C++ und Qt.
 
antred schrieb:
Das halte ich für ein Gerücht. Erklär mir mal, wieso du mit Java / C# schneller zum Ziel kommst als z.B. mit C++ und Qt.

Diesen Punkt habe ich bisher nur öfters schon gehört, er stammt nicht direkt von mir.

Aber vorstellen kann ich es mir schon. In Java/C# gibts keine Speicherverwaltung oder Pointer um die man sich kümmern muss. Aber wie gesagt, ich habe keine Ahnung von C++, sodass ich das nicht wirklich beurteilen kann. Es war mehr als Frage gemeint.
 
antred schrieb:
Das halte ich für ein Gerücht. Erklär mir mal, wieso du mit Java / C# schneller zum Ziel kommst als z.B. mit C++ und Qt.
Ein guter C++-Programmierer ist wahrscheinlich schon schneller als ein schlechter Java/C#-Programmierer ;)
 
Jack159 schrieb:
Diesen Punkt habe ich bisher nur öfters schon gehört, er stammt nicht direkt von mir.

Aber vorstellen kann ich es mir schon. In Java/C# gibts keine Speicherverwaltung oder Pointer um die man sich kümmern muss. Aber wie gesagt, ich habe keine Ahnung von C++, sodass ich das nicht wirklich beurteilen kann. Es war mehr als Frage gemeint.

Oh, es stimmt schon, man hört diese Aussage sehr häufig, aber ich halte es dennoch für ein Gerücht, das noch aus Zeiten stammt, in denen 90% der Programmierer meinten, der maßgebliche Unterschied zwischen C und C++ sei, daß C++ das Schlüsselwort class besitzt. In modernem C++ kann Hantieren mit dynamischem Speicher genau so umkompliziert sein wie in Java ... wozu gibt es schließlich std::unique_ptr, std::shared_ptr und die diversen container aus der Standard C++ Bibliothek?
 
Jack159 schrieb:
In Java/C# gibts keine Speicherverwaltung oder Pointer um die man sich kümmern muss.
Das Argument kommt fast immer von Leuten die keine Ahnung von (modernem) C++ haben. In modernem C++ muss man sich auch nicht um die Speicherverwaltung kümmern.

Worum man sich in C++ mehr als in Java und C# kümmert ist die Lebenszeit von Objekten. Das wirkt sich dann aber auch wieder positiv auf Laufzeit und Ressourcenverwendung aus - es gibt nämlich in richtigen Programmen viel wichtigere/kritischere Ressourcen als Speicher und bei denen helfen dir die GCs aus Java und C# weit weniger als RAII bei C++…
 
Die Frage ist auch: Was heißt können?
C++-Code zumindest lesen und verstehen können kann niemals schaden. Für mich gibt es einen Mittelweg zwischen "Was ist C++? Kenn ich nicht." und einem gestanden C++-Entwickler. Zumal die Basics gerade als Java/C#-Entwickler wirklich recht schnell erlernbar sind.

Ich zum Beispiel bin in erster Line C#-Entwickler und arbeite zur Zeit am Rewrite einer C++-Anwendung. Die Anforderungen stehen in einem Anforderungsdokument und die Wartung der C++-Anwendung machen andere, trotzdem muss ich gelegentlich C++ lesen um bestimmte Details zu verstehen. Kleinere Bugfixes könnte vermutlich ich auch machen. Ein C++-Programm "ernsthafter Größe" könnte ich trotzdem nicht schreiben.
 
Meiner Meinung nach lohnt es sich auf jeden Fall. Man sollte finde ich bei dem erlernen von Technologien niemals nur an den Status Quo denken, also denken, "werde ich eh nie brauchen". Was würdest du den z.B. machen wenn ein schwerer Bug in einem alten Projekt entdeckt wird und ein Kunde dafür dann auch mal eben mehrere Tausend Euro springen lassen will und dein Chef dir sagt das du das jetzt machen musst weil du grade der einzige bist der zwischen den anderen Sachen dafür Zeit hat?
Selbst wenn man mit niemals wieder direkt mit einer Technologie in Kontakt kommt, ist es immer gut zu wissen wie bestimmte Dinge woanders gelöst werden. Es erweitert einfach den eigenen Horizont dafür wie man ein Problem lösen kann.

Der oft eingebrachte Punkt das Speicherverwaltung bei Java oder C# uninteressant wären ist nicht richtig. Memory Leaks kann ich z.B. genauso mit schlechtem Java Code erzeugen wie mit schlechtem C++ Code.

Ich persönlich finde modernen C++ Code auch irgendwie besser lesbar als z.B. Java Code.
Ich selber bin übrigens JavaEE und C++ Entwickler.
 
Die beste Sprache ist die, die man am besten kann - egal wie umständlich es ist, es ist umständlicher etwas neues zu lernen. C++ ist jetzt nicht grade der Hit was Desktop Lösungen angeht, außer es dreht sich um Spiele oder grafische Dinge (OpenGL usw.). Für embedded wird auch eher C genommen, da geht es dann um Geschwindigkeit und nicht um Programmier Komfort mit Klassen ...

Wenn du dir Stellenazeigen anschaust, fragt so gut wie keiner nach Java und C++, sondern eher nach Java + Datenbanken etc. Würde micht eher mit Datenbanken, XML, JSP usw. beschäftigen als mit C++

Lieber eine solide Grundlage in einer Sprache als alles angetestet zu haben und nichts wirklich zu können. Wenn man einen soliden Job hat, dann kann man weiter sehen.
 
Fonce schrieb:
Ich persönlich finde modernen C++ Code auch irgendwie besser lesbar als z.B. Java Code.

Java Code und C++ Code sind beide schlecht lesbar im Vergleich zu zB Python oder Ruby.

Ich würde den Stellenwert von C++ jetzt mal nicht überbewerten, wenn man mit embedded-Systemen nicht in Berührung kommt. Mit qt hat es zwar eine gewisse Renaissance in vielen "Java-Bereichen" erfahren, aber die guten C++ Entwickler dürften zu selten und zu teuer sein, um sie für normale Desktop-Anwendungsprojekte einzusetzen.

Selbst in Fällen, wo Java nicht performant genug ist, kommen heute statt C++ auch oft Alternativen zum Zuge, zB JavaScript oder Erlang.
 
Zuletzt bearbeitet:
Hallo Jack159,
ich glaube, dazu kann man objektiv gesehen geteilter Meinung sein.

Den großen Vorteil den du persönlich hast wenn du eine unmanaged Sprache wie C/Cpp beherrscht ist jener, dass du ein tieferes Verständnis für eher klassische Konzepte der Informatik lernst. Ich bin vor einiger Zeit (als jemand, der früher gegen Entgelt Java getipselt hat) an unmanaged Code geraten und hatte so meine Probleme. Ein grundsätzliches Verständnis eines anderen Konzeptes (und Cpp ist ein anderes Konzept als Java!) ist definitiv eine sinnige Wissensbasis. Stichwort Pointer, Speicher-Freigabe etc.

Den realen Vorteil von C/Cpp (ergo: Wann brauche ich das im Job?) halte ich dafür extrem abhängig vom Job selber. Aussagen wie "Ein guter Cpp-Programmierer..." halte ich eher für, vorsichtig gesagt, wenig begründet...

Wenn du exakt weißt, warauf du dich einmal spezialisieren musst/willlst, dann macht es Sinn sich in eine Sprache richtig reinzufuchsen. Vorher ist ein breites Verständnis mMn. zielführender. Demnach bin ich übrgens ein grausamer Java-Programmierer - habe damit aber kein Problem, da das nicht mein berufliches Lebensziel sein muss...
 
F_GXdx schrieb:
Java Code und C++ Code sind beide schlecht lesbar im Vergleich zu zB Python oder Ruby.

Ich würde den Stellenwert von C++ jetzt mal nicht überbewerten, wenn man mit embedded-Systemen nicht in Berührung kommt. Mit qt hat es zwar eine gewisse Renaissance in vielen "Java-Bereichen" erfahren, aber die guten C++ Entwickler dürften zu selten und zu teuer sein, um sie für normale Desktop-Anwendungsprojekte einzusetzen.

Selbst in Fällen, wo Java nicht performant genug ist, kommen heute statt C++ auch oft Alternativen zum Zuge, zB JavaScript oder Erlang.

Ruby ist eine Katastrophe, Rails noch viel mehr ;)
Alles wollen sie perfekt machen, verwirren aber nur mit den 10000 Möglichkeiten die selbe Sache zu tun.
 
Zurück
Oben