C++ Zukunft für Programmierer?

NWsimon1702

Well-known member
ID: 327951
L
12 Mai 2006
491
10
Hallo!

Hoffe, ich bin mit meiner Frage hier richtig
und man kann sie einigermaßen gut beantworten.

Ich interessiere mich schon seit längerem für die C++-Programmierung,
kann mich jedoch noch nicht so dazu entscheiden, diese zu erlernen,
da mir das Ziel hinter dem Ziel ein wenig fehlt.

Welche Möglichkeiten stehen einem offen, wenn man C++ beherscht?
Kann man da in Zukunft evtl. auch gutes Geld mit verdienen?
Oder ist es zum momentanen Zeitpunkt weniger gefragt?

Vielleicht gibt es hier den ein oder anderen Berufs-C++-Programmierer,
der mir eventuell ein wenig über meine obigen Fragen erzählen kann?

Liebe Grüße,
(NWsimon)
David
 
Programmiersprachen kommen und gehen. Aber im Prinzip sind die wichtigen Elemente der Sprachen sehr ähnlich. Also wenn du einmal eine Sprache "verstanden" hast, dann kannst du auch leichter weitere erlernen und nutzen.

Mit C++ Programmierung wird man wohl nicht reich ;), kommt halt auf den Zweig an, in den du hinein willst. Aber ich kenne zumindest mal niemanden in meinem Arbeitskollegenkreis, der nur eine Sprach "kann" - also im Laufe der Zeit wirst du eh immer mehr erweitern und dich dann spezialisieren.
 
Meiner Erfahrung nach kommt man nicht weit wenn man nur programmiert weil man damit Geld verdienen kann, von meinen Bekannten können jedenfalls nur die wirklich gut programmieren die es schon ewig lange aus Spaß machen und die meisten haben schon als Kind/Jugendlicher angefangen.

Ich kenn auch niemanden der sich Programmierer/Entwickler nennt und nur eine Sprache beherrscht.
 
gebe Cybo recht, meist muß man eh sich mit mehreren Sachen auskennen. Wobei das auch immer davon abhängt was man machen will, bzw. machen muß.

Mir ist dabei auch lieber, ich habe Spaß an dem was ich mache als die Mega Kohle. Ohne Spaß sondern mit Frust an der Arbeit hätte ich auch kein Spaß an dem Geld...
 
Was den Bereich C/C++ angeht höre ich oft von meinen Kommilitonen aus naturwissenschaftlichen Fächern, dass dort C++ als Kurs angeboten wird, weil die Sprache immer noch Standard in der Entwicklung von Physikprogrammen, Software für Geowissenschaftliche Fächern usw. sei.

Auf jeden Fall kann ich meinen Vorrednern auch nur zustimmen, dass eine Sprache als Programmierer zu wenig ist. Aber wenn man eine bereits gut versteht hat man's ja auch bei den anderen nicht so schwer;-)
 
Das ist aber auf jeden Fall schonmal keine verkehrte Basis. Wenn man mit C++ das eigene Denken verbessert, und die Grundstrukturen und die Absichten dahinter wirklich beherrscht, dann fällt auch der Umstieg auf andere Sprachen nicht mehr sonderlich schwer. Viele Sprachen sind in ihrer Syntax auch an C/C++ angelehnt ;).

Großer Vorteil ist halt, dass man in der Sprache auch direkt am Speicher arbeiten kann. Etwas Ahnung von Pointer-Programmierung zahlt sich immer aus.
 
Die Freiheit, direkt im Speicher zu arbeiten.
 
der Nachteil ist, man muß höllisch aufpassen, worauf man zeigt mit pointern.
einen Falsch gesetzt, und es crashed.
Man muß auch aufpassen, auf welchem Bereich im Speicher man arbeitet. Entweder auf einer Referenz oder dem direkten Objekt.
Es gibt vieles worauf man achten muß, bei C++.
Das wichtigste ist auch, die Pointer wieder zu "streichen", wenn man sie mal benutzt hat.

Nur Anmerkung von mir.
 
Das wichtigste ist auch, die Pointer wieder zu "streichen", wenn man sie mal benutzt hat.
"streichen"? Meinst auf null setzen, wenn sie ungültig sind?

Das bringt auch nur bedingt was, wenn in der Zeile drunter ein
PHP:
foo(*ptr);
steht :ugly:

Ich vergleich einen Pointerzugriff immer mit einer Division in der Mathematik:
Sobald du eine Division in der Mathematik ausführst, musst du gucken, ob der Divisor in Ordnung ist. Analog: Sobald du einen Pointer dereferenzierst, musst du nachdenken, ob das erlaubt is.
 
hehe ok;)

aber ich meine, was bringt es einem für eine normale anwendung direkt im speicher arbeiten zu dürfen? so romantisch das klingt. was 'bringt' es?
 
aber ich meine, was bringt es einem für eine normale anwendung direkt im speicher arbeiten zu dürfen? so romantisch das klingt. was 'bringt' es?
Jede Anwendung liegt im Speicher (Von-Neumann-Architektur: sowohl Code, als auch Daten liegen im selben Speicher), von daher weiß ich grad nicht, was du mit "normale[r] [A]nwendung" meinst. Was ist eine unnormale Anwendung?

Schon mal im Sanitärladen gefragt, was es bringt, wenn man diese Badewanne mit normalem Wasser füllt? Der guckt sicher auch nur dumm und weiß ned, was er dir jetzt antworten soll :mrgreen:
 
Jede Anwendung liegt im Speicher (Von-Neumann-Architektur: sowohl Code, als auch Daten liegen im selben Speicher), von daher weiß ich grad nicht, was du mit "normale[r] [A]nwendung" meinst. Was ist eine unnormale Anwendung?

Schon mal im Sanitärladen gefragt, was es bringt, wenn man diese Badewanne mit normalem Wasser füllt? Der guckt sicher auch nur dumm und weiß ned, was er dir jetzt antworten soll :mrgreen:

Direkt im Speicher arbeiten = einfach schnellere Anwendung, ohne den Mist drum herum.

LG

Primus
 
Ich erinnere mich da direkt an Pointer-Arithmetik.. Gerade mit C-Strings (also eig. "nur" char-arrays) kommt man da oft viel schneller ans Ziel als wenn man die Möglichkeiten anderer Sprachen in betracht ziehen muss.

Dies wird auch der Grund sein, wieso gerade wissenschaftliche Programme auf C/C++ aufsetzen. Gerade in den Fällen, wo viele Daten so schnell es geht verarbeitet werden müssen. Außerdem kann man noch auf Inline-Assembler zurückgreifen.
 
Java muß mit Garbage-Collectoren arbeiten. Man weiß also nie, wann der nicht mehr gebrauchte Speicher freigegeben wird, und wenn er freigegeben wird (der Garbage-Collector also aktiv wird), hat man plötzlich eine (im Sinne der Anwendung) unproduktive Last auf dem System.

In Sprachen wie C und C++ muß man sich beim Programmieren zwar mehr Gedanken beim Coden machen, aber das System läuft gleichmäßiger, was extrem wichtig sein kann, sobald etwas wie "Real-Time" im Spiel ist.

Nur ein Beispiel: Ich bin beruflich seit 8 Jahren in die Neu- und Fort-Entwicklung eines Systems involviert, das in C++ codiert ist. In der ganzen Zeit hatte ich ungefähr 8 mal das Vergnügen Speicherlöcher oder illegale Speicherzugriffe suchen und eliminieren zu müssen (also ungefähr einmal im Jahr). Durchschnittlich kostet uns solch ein Procedere 2-3 Tage. Dafür können wir genau sagen, wieviel Speicher unsere Anwendung braucht und sie erzeugt eine sehr gleichmäßige Last auf dem System.

Ach ja, das graphische Frontend dazu ist in Java geschrieben - und auch da mußten wir schon Speicherlöcher suchen... Es ist einfach seltsam, wenn der von der VM allozierte Speicher wächst und wächst und plötzlich der Prozess durch den OOM-Killer abeschossen wird. Man kann daraus lernen, daß man in Java darüber nachdenken muß, dem Garbage-Collector durch geeignete Maßnahmen das Leben einfacher zu machen, das ist im Grunde aber nicht anders, als in C/C++ über Speicherbelegung nachzudenken.
 
aber das System läuft gleichmäßiger, was extrem wichtig sein kann, sobald etwas wie "Real-Time" im Spiel ist.
Es gibt genauso auch Real-Time GarbageColletors (Realtime Java ;).
Denn Real-Time definiert ja nur, dass es eine garantierte Antwortzeit für ein Event->Response gibt.

Man kann daraus lernen, daß man in Java darüber nachdenken muß, dem Garbage-Collector durch geeignete Maßnahmen das Leben einfacher zu machen, das ist im Grunde aber nicht anders, als in C/C++ über Speicherbelegung nachzudenken.
Ich würde es etwas anders definieren, es ist in Java schwerer ein MemoryLeak zu bauen, da man sich weniger um den Speicher kümmern muss.
Wenn man natürlich munter Referenzen auf Objekte aufhebt, die nicht benötigt werden, kann man natürlich auch so MemoryLeaks produzieren, es ist aber eine ganze Ecke schwerer.


Ich möchte aber keinesfalls einen Sprachkrieg heraufbeschwören ;) Fast jede Sprache hat in gewissen Bereichen ihren Nutzen. Und besser oder schlechter gibt es eben nicht, die Konzepte unterscheiden sich.
Wobei mich da C(++)-Jünger sehr an RoR-Fanatiker erinnern, alles andere ist Mist und sowieso langsam, doof, usw.


@Topic: Der Bedarf an C(++)-Programmierern wird sicherlich genauso wenig sinken, wie alle anderen signifikant vertretenen Sprachen im TIOBE-Index
 
Dann sind wir uns im Grunde einig: Ich hasse es auch, wenn man eine Sache als das NonPlusUltra hinstellt. C++ hat gewisse Vorzüge, Java auch, aber andere. Und funktionale Sprachen mit all ihren Grausamkeiten wie Schönfinkelung und Monaden haben wieder andere Vorzüge - es kommt eben immer auf die konkrete Situation an. Und da kann schon eine Kleinigkeit die entscheidende Rolle spielen, z.B. daß der Entwickler eben die eine Sprache beherrscht und die andere nicht. :yes:
 
Also C/C++ wird noch lange am Markt dominieren. Von daher kann man diese Sprachen sehr gut als Grundlage für weitere Arbeiten aufgreifen.

In C/C++ wird es kein Programmierer geben, der nicht seine Fehler mit Pointer gemacht hatt. Ob nun die GUI zwingend mit C/C++ und der WinAPI oder ein Framework wie QT etc. entwickelt wird ist eher zweitranging. C/C++ ist auch im Bereich von Serveranwendungen stark verbreitet, da dort meist eine Linux Distribution arbeitet. Da kommen denn Editoren ala vim zum Einsatz.

Wichtiger Grund für das Lernen von C/C++ ist die Plattformunabhängigkeit. Dieser Aspekt sollte nicht vergessen werden.

Visual Basic ist im Vergleich zu C/C++ einfach eine lahme Ente, ist aber sehr schnell zu erlernen. Was für Anfänger gut ist, aber ein C++ Programmierer zur Weissglut treiben kann, weil da ein Befehl nicht mit ; sondern einfachen Zeilenumbruch abgeschlossen wird.

Assembler ist nicht mehr so bekannt, aber trotzdem enorm wichtig. Sollte man nicht alles Blind runter rattern können, aber beim Debugging sehr nützlich, oder wenn wirklich mal zeitkritische Berechnungen anstehen.

Daneben gibt es noch Delphi, Ruby, Pascal, Python, Darkbasic, Purebasic und diverse Kleinere Interpreter.

Webentwicklung ist PHP/HTML unabkömmlich. Sollte man auch behherrschen wenn es doch mal nötig ist ein UI im Webbrowser zu realisieren(Fernwartung, Fernsteuerung zb.). Javaskript steigert die Usability teils enorm, hatt aber den Nachteil bei NoScript Usern, kann mal alles brachliegen. Daher nicht wirklich zwingend von Nöten.

Java macht die Webapplikation Entwicklung angenehmer und in vielen Gebieten einfach unschlagbar. Bei Geschwindigkeit aber grosses Manko.

Zu Zeiten wo es den C64/C128 gab, war Basic damals einfach die Standard Sprache. Gab zwar noch die reine Maschinensprache, aber die beherrschten nur die die echten Profis. Und heute würde man ausgelacht werden wenn einer sagen würde, man numeriert in 100 Schritten die Zeilen um evtl. Zeilen und Befehle zwischen schieben zu können.

Also ja fang mit C/C++ an und baue denn dein Know How aus. Geld verdienen kannst du sicherlich, kommt auf deine Qualifikation halt an. Der Softwarearchitekt mit Erfahrung im Compilerbau verdient mehr als einer der C/C++ Basics beherrscht. Ob nun später studiert oder mit der Ausbildung, ist eher weniger wichtig. Da zählt die Leistung.

In einer weltweit operiernenden Firma, wo an einer Niederlassung 4500 Leute tätig sind, gibt es rund 100 Programmierer. Die wirklich was können, etwa 20 Leute erledigen ein Anteil von etwa 60% des Gesamten. Diese 20 Leute sind halt schwer zu ersetzen für das Unternehmen. Da sind die Löhne weit höher, als bei den anderen. Da wird entsprechend der Auftragslage eingestellt und entlassen. Die Stammmitarbeiter aus diesen Fähigkeitssegment gehen aber mit 70% des Gehalts der Top20 nach Hause. Übrigens da gibt es noch Software aus den Jahre 1996 die NOCH immer in Nutzung ist und regelmässig aktualisiert werden muss.
 
Assembler ist nicht mehr so bekannt, aber trotzdem enorm wichtig. Sollte man nicht alles Blind runter rattern können, aber beim Debugging sehr nützlich, oder wenn wirklich mal zeitkritische Berechnungen anstehen.
Kommt ganz auf das Anwendungsgebiet an. Wenn du Mikrocontroller programmierst und dir steht nur ganz wenig Speicher zur Verfügung, dann kommst du um "Hardcore-Assembler" nicht drum rum, weil kein C-Compiler so optimieren kann, wie ein denkender Mensch.

Ansonsten würd ich dir recht geben: Assembler-Wissen so als "Ah, das wird also aus meinem C++-Code, nachdem der Compiler mit ihm fertig is" is für C++ sehr zu empfehlen.
 
alles in allem ein guter Post.

Java macht die Webapplikation Entwicklung angenehmer und in vielen Gebieten einfach unschlagbar. Bei Geschwindigkeit aber grosses Manko.
gehört zu den "Urban Myths" ;)
Seit Java 1.4, welcher vor 8 Jahren erschien und wirklich grottenlangsam war, hat sich Unmengen getan, da sitzen sehr intelligente und optimieren die Java Runtime ;)
Mit Code der zur Laufzeit auf den speziellen Prozessor hinoptimiert wird oder Optimierungen durchführen kann, die ein statischer Compiler nicht machen kann, weil er den Context nicht kennt.
Teilweise ist es dadurch möglich die Performance von C(++) zu überbieten, aber ich würde mal sagen i.R. wird es so 5-10% drunter liegen. Das kommt aber vom Konzept der Sprache (ein Array-Zugriff wird erst geprüft bevor ausgeführt usw).


Also ja fang mit C/C++ an und baue denn dein Know How aus.
da bleibe ich trotzdem dabei, dass man mit leichter zu lernenden Sprachen anfangen sollte.


Wenn du Mikrocontroller programmierst und dir steht nur ganz wenig Speicher zur Verfügung, dann kommst du um "Hardcore-Assembler" nicht drum rum, weil kein C-Compiler so optimieren kann, wie ein denkender Mensch.
du hast Verilog oder VHDL vergessen ;) :biggrin: