Lohnt es sich noch C++ zu lernen?

Hinweise auf besondere Websites, Vorstellung eigener Websites, Internet-Smalltalk
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Lohnt es sich noch C++ zu lernen?

Beitrag von Xin » Mi Sep 04, 2013 2:26 pm

...fragt Quora.

Is Learning C++ still worthwhile

Die Grafik in der Antwort hat sicherlich eine beschränkte Aussage, schließlich kann man Projekte ja nach Belieben hinzufügen oder wegnehmen. Trotzdem ist es mal interessant zu sehen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

xerion21
Beiträge: 162
Registriert: Mo Jul 08, 2013 3:37 pm

Re: Lohnt es sich noch C++ zu lernen?

Beitrag von xerion21 » Mi Sep 04, 2013 3:07 pm

würde ich sagen, ganz klar ja :)
Wobei Java ziemlich aufgeholt hat...

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Lohnt es sich noch C++ zu lernen?

Beitrag von Xin » Mi Sep 04, 2013 3:15 pm

xerion21 hat geschrieben:würde ich sagen, ganz klar ja :)
Wobei Java ziemlich aufgeholt hat...
In der Liste...?

So wie ich das mitbekomme, ist Java deutlich auf dem Rückzug.

Java ist - würde ich mal sagen - sowas von tot... es ist eine Lehrsprache geworden.
Wer nix anderes kann, beginnt seine Projekte mit Java.
Das hatten wir bei Pascal auch schon.

Kennst Du Pascal? Bei manchen muss man ja schon ein Link zu Wikipedia mitgeben. Pascal ist die Sprache, die C verdrängen wird, so wie Delphi die Sprache ist, die C++ verdrängt. Das war kurz bevor Java Delphi verdrängt hat. ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Lohnt es sich noch C++ zu lernen?

Beitrag von cloidnerux » Mi Sep 04, 2013 3:31 pm

würde ich sagen, ganz klar ja :)
Wobei Java ziemlich aufgeholt hat...
C wurde 1970 programmiert und seit dem ständig erweitert und erneuert worden. Selbst heute programmiert man noch in C, das ist jetzt auch schon 43 Jahre Lebenszeit.
Warum programmiert man in C/C++?
Weil es einfach ist, es gibt viele Ressourcen dafür, weil es schnell ist, es gibt kaum lästigen Overhead, nichts was im Hintergrund Rumwerkelt, nichts was einem Aufgezwängt wird, weil es direkt ist.
Java kann sich nicht selber betreiben, du kannst keine Java-VM in Java schreiben, damit kann Java niemals C/C++ ganz verdrängen, irgendwer muss die Java-VM programmieren :D
Java wird viel gelehrt, aber nie gelernt. Ich kenne keinen Hobby-Programmierer, der freiwillig mit Java angefangen hat. Damit meine ich Leute, die aus Eigeninteresse und Neugier das Programmieren lernen. Die meisten die Java lernen, sind Studenten und Schüler, von denen nutzen dann aber gerade mal 1% ihr Wissen nach der Schule. Was übrig bleibt ist ein künstlicher hype, weil ja anscheinend viele Java programmieren, aber kaum einer wirklich damit Arbeitet.

Dabei ist Java nicht schlecht, das Konzept der Plattform-Unabhängigkeit ermöglicht das Programmieren und betreiben auf zwei unterschiedlichen Systemen, während der Programmierer auf Windows arbeitet kann das Programm auf einem Linux-Server werkeln. Ziemlich cool.
Mojang implementierten Minecraft und konnten so auch die Nerds erreichen, die Linux nutzen oder die Geeks mit ihren Äpfeln, jeder kann mitspielen, auch eine ziemlich coole Sache.

Aber Java hat viele hässliche Seiten. Hast du mal Java installiert oder dich durch ein Update gequält? Das ist nicht schön.
Inkompatibilität zwischen Java-VM Version, Programm und System gibt es genug, es gibt diverse VMs diverser Anbieter mit unterschiedlichen Funktionen, so wirklich kann man also Kompatibilität nicht garantieren.
Dann die ganzen Konzepte in Java, zum kotzen. Alles ist eine Factory oder eine Abstrakte klasse und keiner macht sich mehr Gedanken um das Programmieren. Fürchterlich.
Ich musste mal ein Programm anpassen, besser gesagt einen wert. Statt diesen Wert als Attribut der Hauptklasse zu schalten war sie in 4 Klassen verschachtelt und dementsprechend in der 4 Datei die ich öffnen musste.

Da ist es kein Wunder, das für Windows Programme C# Java überholt. C# hat eine bessere Windows-Anbindung, ist gar nicht mal so langsam und hat viele gute Sprachkonzepte und mit Visual Studio eine der besten IDEs auf dem Markt. Das hat Java nicht.

Im Endeffekt ist es nicht was eine Sprache kann, sondern wie der Programmierer damit arbeiten kann. Es gibt viele Sprachen mit vielen guten Konzepten, aber in C/C++ lässt es sich doch besser arbeiten. Python fühlt sich auch besser an, als irgendwas schnell in einer anderen Sprache zu schreiben, das ist der Grund warum es erfolgreich ist.
Und Java ist nun einmal eine Qual, genauso wie Pascal oder Delphi, das ist der Grund warum es nicht erfolgreich ist.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Lohnt es sich noch C++ zu lernen?

Beitrag von Xin » Mi Sep 04, 2013 3:45 pm

cloidnerux hat geschrieben:Und Java ist nun einmal eine Qual, genauso wie Pascal oder Delphi, das ist der Grund warum es nicht erfolgreich ist.
Als ich Delphi lernen musste, empfand ich das auch als eine Qual. Nachdem ich Java konnte, fand ich Delphi gar nicht mehr sooo übel. ;-)

Aber die Frage lautete ja ursprünglich, ob es sich noch lohnt C++ zu lernen.
Entsprechend die Gegenfrage: Was denn sonst? ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Lohnt es sich noch C++ zu lernen?

Beitrag von cloidnerux » Mi Sep 04, 2013 3:55 pm

Entsprechend die Gegenfrage: Was denn sonst? ^^
Brainfuck, Befunge, BANCStar, Assembler?

Ich hale C/C++ zum lernen deutlich besser als Java. Es ist logisch, es macht sinn, es ist direkt. Kein gefriemel, nichts über tausend ecken machen.
Ich musst auch mal Pascal/Delphi lernen, da konnte ich schon einigermaßen C/C++, ich fand es sinnlos, grauenhaft und schlecht. C/C++ war einfach besser.
Python ist eine schöne Sprache, man kann Probleme schnell lösen, aber zum einsteigen ist es nichts, weil es die Grundlagen verdeckt und man so eher verwirrt wird, als etwas zu verstehen.
Es empfiehlt sich also, mit C/C++ anzufangen.
Redundanz macht wiederholen unnötig.
quod erat expectandum

nouseforname
Beiträge: 236
Registriert: Do Feb 10, 2011 6:31 pm

Re: Lohnt es sich noch C++ zu lernen?

Beitrag von nouseforname » Mi Sep 04, 2013 4:26 pm

Nicht dass ich so wie manch anderer hier über jahrelange Erfahrung besitze, aber...

Ich habe mittlerweile auch einiges an Sprachen gesehen und damit gearbeitet, ich finde wenn man sich mit Programmieren wirklich auseinandersetzen will, dann kommt man nicht ohne C/C++ aus. Es bildet aus meiner Sicht sozusagen die Grundlage auf der man dann aufbauen kann.

Ich programmiere im Job faktisch nur .net/C++, und privat zur Zeit Java für Android. Da ist etliches sehr ähnlich, aber ich muss fast nichts mehr selbst machen, Alles ist in irgendeiner Form verwaltet. Da merke ich selbst wie es mir schwer fällt manche Grundlage dahinter zu verstehen. Und das obwohl ich reines C/C++ als solches gelernt habe. Nur nicht lange angewendet.

Wenn man will kann man das gerne mit GUI-Programmierung vergleichen. So schick das ist, fang lieber in der Konsole an um zu verstehen was du machst...danach ist immer noch Zeit für das GUI.


Eindeutiges JA zu C/C++.

Nemo
Beiträge: 37
Registriert: Sa Mär 02, 2013 3:18 pm

Re: Lohnt es sich noch C++ zu lernen?

Beitrag von Nemo » Mi Sep 04, 2013 9:57 pm

cloidnerux hat geschrieben:Java wird viel gelehrt, aber nie gelernt. Ich kenne keinen Hobby-Programmierer, der freiwillig mit Java angefangen hat. Damit meine ich Leute, die aus Eigeninteresse und Neugier das Programmieren lernen. Die meisten die Java lernen, sind Studenten und Schüler, von denen nutzen dann aber gerade mal 1% ihr Wissen nach der Schule.
Ich habe mit Java angefangen, weil ich gehört hatte, dass es auf mehreren Plattformen läuft. Ich hatte aber immer Probleme, weil mir viele Dinge zu kompliziert waren. Dann habe ich proggen.org entdeckt und mit C/C++ angefangen und seit dem mache ich gute Fortschritte. Ich weiß nicht ob das an dem Unterschied zwischen den Sprachen liegt, oder die Tutorials hier einfach besser sind als das Buch, aus dem ich Java "gelernt" habe.
Vielleicht sollte ich mir Java noch mal mit meinem jetzigen Wissen ansehen, aber hauptsächlich bleibe ich wohl bei C/C++.

Wegen der Plattformunabhängigkeit: Ich programmiere unter Linux, habe aber noch nie etwas verwendet, dass man nicht auch für Windows compilieren könnte. Liegt das daran, dass ich zu wenig Erfahrung habe? Ich meine, was außer Zugriffen auf die Ordnerstruktur ist Betriebssystemabhängig?

GilbertDur
Beiträge: 105
Registriert: Fr Mär 01, 2013 10:31 am

Re: Lohnt es sich noch C++ zu lernen?

Beitrag von GilbertDur » Mi Sep 04, 2013 10:20 pm

So...erst mal ein wenig rumkommentieren :D
Xin hat geschrieben: So wie ich das mitbekomme, ist Java deutlich auf dem Rückzug.

Java ist - würde ich mal sagen - sowas von tot... es ist eine Lehrsprache geworden.
Wer nix anderes kann, beginnt seine Projekte mit Java.
Das hatten wir bei Pascal auch schon.

Kennst Du Pascal? Bei manchen muss man ja schon ein Link zu Wikipedia mitgeben. Pascal ist die Sprache, die C verdrängen wird, so wie Delphi die Sprache ist, die C++ verdrängt. Das war kurz bevor Java Delphi verdrängt hat. ;-)
Ich kenne Pascal! :mrgreen:
Hatte ich zu Schulzeiten, dafür hab ich Delphi nie gelernt. Allerdings wird Java nicht den gleichen Weg gehen wie Pascal, dafür wird es einfach in viel zu vielen Projekten und Systemen eingesetzt. Solange Firmen wie SAP, Oracle und Google Java pushen, wird es nicht zur reinen Lehrsprache verkommen. Auch die vielen Stellenausschreibungen für Java sprechen da Bände.
cloidnerux hat geschrieben: Warum programmiert man in C/C++?
Weil es einfach ist, es gibt viele Ressourcen dafür, weil es schnell ist, es gibt kaum lästigen Overhead, nichts was im Hintergrund Rumwerkelt, nichts was einem Aufgezwängt wird, weil es direkt ist.
Ich stimme dem meisten zu. Ich denke aber nicht, dass C/C++ einfach ist. Speicherverwaltung, Templates, Type-Casting, die berüchtigten Zeiger...all das bietet viele Stolperfallen, gerade für Anfänger. Zu ersten Erfolgserlebnissen kommt man mit anderen Sprachen schneller. C/C++ kann da sehr demotivierend sein. Und auch nach einigen Jahren beherrscht man beides meistens noch nicht völlig (ich jedenfalls nicht, ich lerne hier im Forum immer wieder dazu) :)
cloidnerux hat geschrieben: Ich hale C/C++ zum lernen deutlich besser als Java. Es ist logisch, es macht sinn, es ist direkt. Kein gefriemel, nichts über tausend ecken machen.
Ich musst auch mal Pascal/Delphi lernen, da konnte ich schon einigermaßen C/C++, ich fand es sinnlos, grauenhaft und schlecht. C/C++ war einfach besser.
Python ist eine schöne Sprache, man kann Probleme schnell lösen, aber zum einsteigen ist es nichts, weil es die Grundlagen verdeckt und man so eher verwirrt wird, als etwas zu verstehen.
Es empfiehlt sich also, mit C/C++ anzufangen.
Also ich fand Pascal nicht grauenhaft und schlecht. Es war aufs nötigste reduzierte, strukturierte Programmierung. Gut geeignet um den Ablauf von Algorithmen zu verstehen.

Ich stimme allerdings zu, dass es besser ist erst Grundlagen zu lernen, zum Beispiel in C. Wer eine List-Klasse in Java benutzt hat und sich fragt, was da intern eigentlich passiert, tut gut daran mal eine Liste mit C oder C++ zu implementieren. Das schärft den Blick für höhere Abstraktionsebenen ungemein.
nouseforname hat geschrieben: Wenn man will kann man das gerne mit GUI-Programmierung vergleichen. So schick das ist, fang lieber in der Konsole an um zu verstehen was du machst...danach ist immer noch Zeit für das GUI.
Dem stimme ich zu, auch wenn ich als Anfänger die Konsole langweilig fand. Man lernt einfach die Abläufe besser, konzentriert sich aufs Wesentliche. Leider neigt man anfangs aber auch dazu gleich etwas sehen zu wollen. Daher befürworte ich beispielsweise Grundlagen der Programmierung mit PHP oder Javascript zu lernen. Im Webbrowser sieht so eine Ausgabe (aufgehübscht mit HTML und CSS) gleich freundlicher aus ;)

So und jetzt meine Meinung, ob es sich lohnt noch C/C++ zu lernen:

Kurz und bündig: Ja! Alle gängigen Betriebssysteme sind größtenteils in C geschrieben. Die meiste Windows Software wurde mit C++ erstellt. Beides ist standardisiert, es gibt viele Quellen. Man lernt das Programmieren zwar zu Fuß, aber dafür auch ordentlich, da Fehler meistens umgehend bestraft und nicht von irgendeiner Runtime verschluckt werden. Mit C++11 kam ja auch noch mal ein schönes Update Richtung moderner Programmierung hinzu.

Ich selbst habe am Anfang meiner Ausbildung in C# programmiert. Ist ja konzeptuell ähnlich wie Java. Dort habe ich alle möglichen Dinge aus dem Framework genutzt, zum Beispiel Iteratoren, Listen, Dictionaries usw. ohne groß darüber nachzudenken, was das ist und ob ich damit was falsches anstelle. An der Fachhochschule musste ich dann noch mal C und C++ belegen und dort verschiedene Datenstrukturen und Algorithmen selbst implementieren. Das hat mir sehr dabei geholfen zu verstehen, was bei C# unter Haube so abläuft. Von daher noch mal Daumen hoch für C/C++ :)

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Lohnt es sich noch C++ zu lernen?

Beitrag von cloidnerux » Do Sep 05, 2013 7:41 am

Ich habe mit Java angefangen, weil ich gehört hatte, dass es auf mehreren Plattformen läuft. Ich hatte aber immer Probleme, weil mir viele Dinge zu kompliziert waren. Dann habe ich proggen.org entdeckt und mit C/C++ angefangen und seit dem mache ich gute Fortschritte. Ich weiß nicht ob das an dem Unterschied zwischen den Sprachen liegt, oder die Tutorials hier einfach besser sind als das Buch, aus dem ich Java "gelernt" habe.
Vielleicht sollte ich mir Java noch mal mit meinem jetzigen Wissen ansehen, aber hauptsächlich bleibe ich wohl bei C/C++.
Ich kenne dein Java-Buch nicht, aber Java war für mich immer komplizierter, alles ging über mehrere Ecken. Erst irgendwas in das eine Format compilieren, dann in irgendwas zusammenpacken und dann trotzdem mit Java starten, viel zu umständlich.
Ich programmiere unter Linux, habe aber noch nie etwas verwendet, dass man nicht auch für Windows compilieren könnte. Liegt das daran, dass ich zu wenig Erfahrung habe? Ich meine, was außer Zugriffen auf die Ordnerstruktur ist Betriebssystemabhängig?
Alle Interaktionen mit dem System. Alles was sich auf reines C/C++ und die C/C++-Standard Bibliothek beschränkt, kann man recht Problemlos portieren. Das ändert sich, sobald du tiefer einsteigst. Du brauchst 3D? Entweder in System einsteigen oder mit einer Bibliothek wie SDL arbeiten, wo sich dann andere darum kümmern müssen, dass es auch unter Windows funktioniert.
Du brauchst eine Serielle Schnittstelle, integration in Gnome, Kontextmenü, GUI, erweiterte Tastatur/Maus. Das alles macht Probleme beim Portieren und noch viel mehr. Oder versuche mal eine Datei über 4GB zu lesen(Hier hatten wir das mal: http://www.proggen.org/forum/viewtopic. ... 3&start=50)
Daher stimmt es schon, dass deine Programme noch zu "einfach" sind, aber im sinne der Systemintegration und Nutzerinteraktion, was aber nichts schlechtes sein muss. Algorithmen und Datenstrukturen sind wichtiger als fancy-fancy Oberflächen^^
Ich denke aber nicht, dass C/C++ einfach ist. Speicherverwaltung, Templates, Type-Casting, die berüchtigten Zeiger...all das bietet viele Stolperfallen, gerade für Anfänger. Zu ersten Erfolgserlebnissen kommt man mit anderen Sprachen schneller. C/C++ kann da sehr demotivierend sein.
Wenn du schnell zu einem Erfolg kommen willst, nutzt du den Automatikmodus deiner DSLR. Aber jeder der etwas mehr Fotografiert weiß, dass der Automatikmodus einem nicht hilft.
C/C++ ist eine sehr "harte" Sprache, so würde ich es zumindest ausdrücken. Alles ist direkt. Du legst einen int an, dass ist dann halt 4 Byte(+- :D ) Speicher irgendwo. Keine klasse, nichts virtuelles. Zudem ist ein int erstmal ein int, eine Ganzzahl mit definierten Wertebereich, nicht sowas wie ein

Code: Alles auswählen

var a = 4
was von Text über Fließkomma bis Ganzzahl alles sein könnte. Das bedeutet aber für dich als Programmierer, dass du immer genau weist, was das ist. Du arbeitest mit einer Ganzzahl und du kannst es auch wie eine Ganzzahl behandeln. Du Arbeitest mit Bytes und kannst diese auch so behandeln.
Das ist nicht überall so.
Natürlich erlaubt C++11 Variablen ohne expliziten Typ anzugeben, dafür muss der implizit bei der Initialisierung bekannt sein.
Aber auch Pointer sind eine sehr viel direktere Art. Du hast einen Pointer, was an sich ein genau definierter Datentyp ist, der halt auf etwas von dem Typ des Pointers zeigt, was auch wieder genau definiert ist. Du musst halt nur selber für dich sicherstellen, dass deine Pointer auf die richtigen Stellen im Ram zeigen und du die korrekte anzahl Elemente ausliest. Das zu verstehen mag vlt nicht leicht sein, aber es ist nicht unmöglich.
Aber hast du dir mal überlegt, was für ein Objekt du bei C# übergeben bekommst:

Code: Alles auswählen

private void someFunc(object o){...}
ist o eine kopie, ist o direkt das Element, was ist es denn?
Solange du nur lesend darauf zugreifst, dann ist es dir egal. Aber was passiert, wenn du darauf schreibst? Was wird wo verändert?
Das ist etwas, was in C++ sehr direkt ist:

Code: Alles auswählen

void someFunc(object o) {...}
void someFunc(object * o) {...}
void someFunc(object & o) {...}
Kopie, Pointer, Referenz. Sehr eindeutig.
Also ich fand Pascal nicht grauenhaft und schlecht. Es war aufs nötigste reduzierte, strukturierte Programmierung. Gut geeignet um den Ablauf von Algorithmen zu verstehen.
Das ist C/C++ auch.
Ich stimme allerdings zu, dass es besser ist erst Grundlagen zu lernen, zum Beispiel in C. Wer eine List-Klasse in Java benutzt hat und sich fragt, was da intern eigentlich passiert, tut gut daran mal eine Liste mit C oder C++ zu implementieren. Das schärft den Blick für höhere Abstraktionsebenen ungemein.
Ich habe für mich festgestellt, dass es beim Programmieren immer darum geht, zu verstehen was passiert. Du kannst einfach blind gegebenes nutzen, du wirst dabei aber irgendwann vor eine Wand laufen.
Ich habe zum Beispiel im Moment sehr viel mit Algorithmen und Mathematik zu tun, Signalanalyse, Filtersysteme, Neuronale Netze und Support Vector Machines. Du hast viele viele Echtzeitdaten, die verwaltet und gespeichert werden wollen, man hat Ereignisse auf die man reagieren will, Signal extrahieren, verarbeiten, Klassifizieren, ausgeben. Das ist 90% Code der erfordert, dass man zu jedem Zeitpunkt weiß, was man tuen will und was man macht. Du merkst einen Fehler nicht in deinem FIR-Filter, der funktioniert trotzdem solange ein Ergebnis herauskommt. Aber wenn dein ganzes System nicht mehr Funktioniert, dann musst du Fehler suchen. Und das ist nicht immer offensichtlich.
Dem stimme ich zu, auch wenn ich als Anfänger die Konsole langweilig fand. Man lernt einfach die Abläufe besser, konzentriert sich aufs Wesentliche. Leider neigt man anfangs aber auch dazu gleich etwas sehen zu wollen
GUIs sind unwichtig, lästig und halten auf. Und auch da sind es immer deine Algorithmen und Datenstrukturen, die das Programm bestimmen, nicht die Oberfläche.

Mit freundlichen Grüßen,

cloidnerux
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten