# Wie am besten C++ lernen?



## mixxed_up (9. Oktober 2010)

Hallo,

da ich das Thema sehr interessant finde, hab ich beschlossen in nächster Zeit C++ zu lernen, um damit auch irgendwann mal etwas zu machen. Ich bin mir im Klarem, dass dies alles andere als leicht ist und bereit, viel Zeit darin zu investieren.

Nur habe ich keine Ahnung wie man das lernt, da ich noch nicht viel Brauchbares gefunden habe.

Könnt ihr mir eine Seite oder ein Buch oder whatever empfehlen?

mfg mixxed_up


----------



## A.N.D.I. (9. Oktober 2010)

Hi, 

Ein Buch eignet sich am besten zum Lernen: C++ Programmierung lernen: Anfangen, Anwenden, Verstehen: Amazon.de: André Willms: Bücher

Ich lerne auch C++ und ich habe auch ein Buch von André Willms.
Wie alt bist du?


----------



## Jever_Pilsener (9. Oktober 2010)

Dieses Buch könnte für dich interessant sein: C++ für Kids. Objektorientierte Programmierung für Einsteiger: Amazon.de: Hans-Georg Schumann: Bücher
Ich habe mit einem Buch aus derselben Reihe (Delphi für Kids) mit Programmieren angefangen. Für den Einstieg ist das sehr gut. (Aber Delphi, was mir mein Vater vorgesetzt hat, ist echt bescheiden. C++ ist eine gute Wahl.)

Später dann richtige C++-Bücher.
Es gibt auch Einsteiger-Bücher für Erwachsene, aber damit sind die allerersten Schritte nicht ganz so easy.


----------



## Skysnake (9. Oktober 2010)

Bücher etc. sind immer so ne Sache. Zum Nachschlagen etc ganz nützlich, wobei das Internet einem da auch immer sehr schnell weiter hilft.

Richtig lernen kann man eine Programmiersprache aber finde ich nur, einfach durchs machen. Setz dich hin, überleg dir ein Problem und versuch dann dieses Problem mit einem Programm zu lösen.

Programmier doch einfach mal nen Taschenrechner, der auch Matrizen miteinander multiplizieren kann. Da haste dann schon verdammt viel drin.

Als zweites programmier für den Objekt orientierten Anteil einfach mal ne Datenbank für Autos, Grakas, etc etc.

Mit sowas haste dann eigentlich alles mehr oder weniger abgedeckt, was es an Grundlagen gibt. Mehr kannste nicht wirklich machen, solange du dich nicht mit nem konkreten Probkem beschäftigst, weil es einfach zu viel gibt und zu viele Lösungswege für viele Dinge. Ich merks selbst bei meinem Projekt im Moment, das ich zwar Grundlagen habe, aber es halt immer wieder zu langwierigen Problemen kommt, weil man halt auf so lustige Sachen wie Stack overflow etc stößt, die eigentlich in keinem Tutorial vorkommen. Sowas muss man einfach beim machen lernen.


----------



## mixxed_up (9. Oktober 2010)

A.N.D.I. schrieb:


> Hi,
> 
> Ein Buch eignet sich am besten zum Lernen: C++ Programmierung lernen: Anfangen, Anwenden, Verstehen: Amazon.de: André Willms: Bücher
> 
> ...




Momentan 15.

@ Skysnake

Wie soll ich denn was programmieren wenn ich nicht einmal die Grundlagen kann?


----------



## Jever_Pilsener (9. Oktober 2010)

Einfach beginnen geht nicht, wenn du gar nicht weißt, wie die Programmiersprache überhaupt aufgebaut ist, wie die Grundbefehle gehen, etc.
Am Anfang sollte man schon ein Schritt-für-Schritt Tutorial haben.


----------



## DAEF13 (9. Oktober 2010)

Jever_Pilsener schrieb:


> Am Anfang sollte man schon ein Schritt-für-Schritt Tutorial haben.



Und welches kann man da empfehlen? Bei Google gibt es zwar schon viele Tut's aber die, die ich gesehen habe fangen mMn zu extrem an, oder es sind 50+ ewig lange Seiten nur für die Grundschritte


----------



## thysol (9. Oktober 2010)

DAEF13 schrieb:


> Und welches kann man da empfehlen? Bei Google gibt es zwar schon viele Tut's aber die, die ich gesehen habe fangen mMn zu extrem an, oder es sind 50+ ewig lange Seiten nur für die Grundschritte



Willkommen in der Realitaet. Wenn mixxed_up dann noch mit OpenGL und OpenCL weiter machen will kommen noch sehr viel mehr Seiten dazu.

@Mixxed
Ich wuerde mit C# anfangen. Ich selber habe mit Java angefangen und dann mit C und C++ weiter gemacht. Danach kam C#. Mein Favorit ist C#. Die Sprache hat mir einfach am Besten gefallen von der logischen Struktur.


----------



## bleifuß90 (10. Oktober 2010)

Hier auf der Seite sind einige OpenBooks zum Thema Programmieren aufgelistet. Vielleicht kannst du aus dem einen oder anderen etwas nützliches herauslesen.


----------



## Skysnake (10. Oktober 2010)

thysol schrieb:


> Willkommen in der Realitaet. Wenn mixxed_up dann noch mit OpenGL und OpenCL weiter machen will kommen noch sehr viel mehr Seiten dazu.
> 
> @Mixxed
> Ich wuerde mit C# anfangen. Ich selber habe mit Java angefangen und dann mit C und C++ weiter gemacht. Danach kam C#. Mein Favorit ist C#. Die Sprache hat mir einfach am Besten gefallen von der logischen Struktur.



C# ist aber nicht sooo zu empfehlen, weil du damit halt auf die .NET Umgebung angewiesen bist, genauso wie bei Java halt, nur das Java deutlich weiter verbreitet ist, und wohl auch performanter sein wird als C#, da einfach die Entwicklung schon sehr lange geht.

Was OpenCL angeht, ja da kommen noch VIELE Seiten dazu  ich glaub ich bin bei so mittlerweile locker 400-500 Seiten 

Naja, das mit C++ ist nicht wirklich schwer von den absoluten Grundlagen. Vielleicht bin ich da aber auch einfach zu alt schon, das mir da zu viele Sachen einfach zu basic vorkommen, die garnicht sooo basic sind. Amiga/286er lassen halt grüßen 



> Zitat von *DAEF13*
> 
> 
> Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.
> ...


_

Was erwartest du?  Das wie ne Fremdsprache lernen, das dauert. Zumal diese ganzen tutorials wie ich oben gesagt hab halt wirklich nur an der Oberfläche kratzen im Allgemeinen.

http://www.mathematik.uni-marburg.de/~cpp/

Fand ich jetzt garnicht sooo schlecht und kostet halt nix.

Die wirklichen extremen basic Sachen wie for, while, if/else, catch etc kennt man ja eigentlich, danach wirds dann eigentlich interessant, und das sagt dir eigentlich auch kein tutorial, da kannste wenn am Besten im Inet in Foren nach ner Lösung fürs Problem suchen und halt im Nachschlagwelzer den man sich anschaffen sollte.

Man kann einfach nicht alles wissen, weils zu viele zu spezielle Sachen gibt.
_


----------



## thysol (10. Oktober 2010)

Skysnake schrieb:


> C# ist aber nicht sooo zu empfehlen, weil du damit halt auf die .NET Umgebung angewiesen bist, genauso wie bei Java halt, nur das Java deutlich weiter verbreitet ist, und wohl auch performanter sein wird als C#, da einfach die Entwicklung schon sehr lange geht.



Mixxed_Up nutzt aber Windows also kann es ihm latte sein ob er auf .NET angewiesen ist oder nicht. Aber du hast recht. Wenn er seine Programme Freunde geben will die Linux nutzen koennen sie seine Programme nicht nutzen.



Skysnake schrieb:


> Naja, das mit C++ ist nicht wirklich schwer von den absoluten Grundlagen. Vielleicht bin ich da aber auch einfach zu alt schon, das mir da zu viele Sachen einfach zu basic vorkommen, die garnicht sooo basic sind. Amiga/286er lassen halt grüßen
> [/I]



Jo, die Grundlagen von C++ sind wirklich nicht schwer.


----------



## bingo88 (10. Oktober 2010)

Ich sehe bei .NET kein Problem und bei Java erst recht nicht. .NET läuft mittels Mono auch auf Linux/Mac und Java läuft sogar auf nem Handy.

Die Grundlagen von C++ sind nicht schwer, aber es gibt viele Sachen, die man in C++ schlecht machen kann, wenn man keine Ahnung hat.

Edit: Außerdem hat man mit C++ unter Umständen auch schlechte Karten, wenn man ein Programm portieren will. Wenn man die OS-eigenen APIs nutzt, war's das nämlich auch...


----------



## xEbo (10. Oktober 2010)

bingo88 schrieb:


> Edit: Außerdem hat man mit C++ unter Umständen auch schlechte Karten, wenn man ein Programm portieren will. Wenn man die OS-eigenen APIs nutzt, war's das nämlich auch...



Deshalb gibt es sowas was sich Standartbibliothek nennt. Die meißten wichtigen APIs sind desweiteren portierbar. Bei speziellen APis wie DX ist das, keine Frage, ein Problem z.b. ein Spiel auf Linux zu portieren. 
Bei Java hat man genau das gleiche Problem wenn es keinen Java interpreter für das Zielos gibt. Letztendlich hat jede Sprache mit der Portierbarkeit zu kämpfen. Wer ein Programm explizit für Windows programmiert, programmiert eben explizit für Windows.

@TE: Besorg dir ein gutes Buch. Da gibt es zum Beispiel so eine komische Einrichtung die sich Bibliothek nennt. An jenem Ort kann man wenigstens Probelesen . Geh in einen Buchladen, blätter durch einige Bücher und nimm das welches dir am ehesten zusagt. Für weiterführende Themen gibt es dann wiederum Bücher oder eben spezielle Communitys.
Eine gute Anlaufstelle für z.B. 3D Programmierung wäre da zfx.info zu nennen. Hier werden auch allgemeine Fragen zur Programmierung, Algorithmen behandelt.
Stell dir für den Anfang kleine Aufgaben die du zu lösen hast. Wie schon genannt wurde, wäre ein Taschenrechner super: Ein Parser ist nötig, verschiedene Algorithmen müssen implementiert werden. Wurzeln ziehen, quadrieren, eben alles was ein "wissenschaftlicher" TR so können sollte. Im nächsten Schritt könnte man sich dann mit einer GUI beschäftigen die vielleicht sogar Funktionen zeichnen kann.
Dadurch lernt man afaik am meißten. Learning by doing. Frustration gehört dazu.
Kurse zum erlernen einer Programmiersprache halte ich für absoluten Humbug. Reine Geldverschwendung. Wenn du in der Nähe einer Uni/Fh wohnst, kannst du auch dort vorbeischauen und dir vielleicht ein Vorlesungsskript günstig schießen (max 15 Euro). Gasthören in verschiedenen Vorlesungen wäre sicher auch eine Möglichkeit aber da ich vermute dass du mit 15 noch Schüler bist, fällt das Zeitmäßig wohl eher aus.

Btw. 500 Seiten zu einem Thema zu lesen ist wirklich rein garnichts.


----------



## Skysnake (10. Oktober 2010)

Naja 400-500 Seiten für nen bischen besseres "hallo Welt" sind schon nicht ohne wie ich finde 

OpenCL suckt was gutes Lernmaterial angeht


----------



## bingo88 (11. Oktober 2010)

xEbo schrieb:


> Deshalb gibt es sowas was sich Standartbibliothek nennt. Die meißten wichtigen APIs sind desweiteren portierbar. Bei speziellen APis wie DX ist das, keine Frage, ein Problem z.b. ein Spiel auf Linux zu portieren.
> Bei Java hat man genau das gleiche Problem wenn es keinen Java interpreter für das Zielos gibt. Letztendlich hat jede Sprache mit der Portierbarkeit zu kämpfen. Wer ein Programm explizit für Windows programmiert, programmiert eben explizit für Windows.


Ich wollte ja nur darauf hinaus, dass C++ auch nicht die Universallösung ist. Klar, man kann mehr damit machen als mit Java/.NET aber das geht dann teilweise auch deutlich über Einsteigergeschichten hinaus


----------



## mixxed_up (11. Oktober 2010)

Könnt ihr jetzt mal pauschal sagen, ob es klug ist C++ zu lernen oder nicht? 

Bin schon einigermaßen verwirrt.


----------



## bingo88 (11. Oktober 2010)

Klug ist es sicherlich (zumindest wenn dein Fokus nicht auf Webanwendungen liegt). Ich würde es allerdings nicht als erste Sprache wählen, zum Einstieg gibt es Sprachen, die einfacher in der Handhabung sind. Wenn man dann die Grundlagen der Programmierung drauf hat, fällt ein Wechsel auf eine andere Sprache (z. B. C++) nicht mehr so schwer und man kann auf einem guten Vorwissen aufbauen.


----------



## xEbo (11. Oktober 2010)

bingo88 schrieb:


> Klug ist es sicherlich (zumindest wenn dein Fokus nicht auf Webanwendungen liegt). Ich würde es allerdings nicht als erste Sprache wählen, zum Einstieg gibt es Sprachen, die einfacher in der Handhabung sind. Wenn man dann die Grundlagen der Programmierung drauf hat, fällt ein Wechsel auf eine andere Sprache (z. B. C++) nicht mehr so schwer und man kann auf einem guten Vorwissen aufbauen.



Da die meißten Sprachen syntaktisch ähnlich zu C sind (C wiederum ist garantiert irgendwo anders inspieriert worden) finde ich den Einstieg mit C nicht schlecht.
Ich sehe vorallem nicht was schwieriger an C++ ist im Vergleich zu anderen Sprachen. Es gibt aber keine generelle Aussage ob es sinnvoll ist mit Sprache xY anzufangen. Es kommt allein auf den Einsatzzweck und die Zielsetzung an. Vorteil von C++ ist dass die Sprache "alt" ist. Daher gibt es für fast jeden Zweck eine Bibliothek sodass man mit wenig Arbeit auch schnell Ergebnisse erzielen kann. Webentwicklung wiederum ist C/C++ eher ungeeignet. So hat jede Sprache Vor- und Nachteile.
Irgendwo muss man aber anfangen daher meine Empfehlung: Nimm C/C++ und probier einfach aus ob du klarkommst. Wenn nicht probier eine andere Sprache usw.


----------



## thysol (11. Oktober 2010)

mixxed_up schrieb:


> Könnt ihr jetzt mal pauschal sagen, ob es klug ist C++ zu lernen oder nicht?
> 
> Bin schon einigermaßen verwirrt.



Du hast mir gesagt du willst C++ nur zum Einstieg lernen um dann spaeter mit OpenCL weiter zu machen. Meine Empfehlung waere daher C# weil C# und OpenCL einfach hervorragend zusammen passen. C++ ist aber natuerlich auch zu empfehlen. Da kannst du nicht viel falsch machen ausser dass die OpenCL Wrapper fuer C++ etwas komplizierter sind aus meiner Erfahrung. Mit C# ist dass spaeter einfacher.


----------



## mixxed_up (11. Oktober 2010)

Mich interessiert eher, womit ich mehr machen kann und eher weiter komme.


----------



## Skysnake (11. Oktober 2010)

thysol schrieb:


> Du hast mir gesagt du willst C++ nur zum Einstieg lernen um dann spaeter mit OpenCL weiter zu machen. Meine Empfehlung waere daher C# weil C# und OpenCL einfach hervorragend zusammen passen. C++ ist aber natuerlich auch zu empfehlen. Da kannst du nicht viel falsch machen ausser dass die OpenCL Wrapper fuer C++ etwas komplizierter sind aus meiner Erfahrung. Mit C# ist dass spaeter einfacher.



Dann programmier halt in C mit nem bischen C++ reingemischt. Das geht locker flockig von der Hand 

@mixxed_up:

Wie definierst du "weiter kommen"? Du kannst mit fast jeder Programmiersprache fast alles machen, wobei C/C++ im Prinziep keine Grenzen setzen. Wenn du bock hast kannste sogar Assembler mit reinpacken. Auf der anderen Seite musst du dich halt teilweise auch um Dinge kümmern die dir z.B. in Java die JVM ab nimmt. Ebenso ist der Code nicht so leicht zu portieren.

Was C# angeht, so hab ich damit keine Erfahrung gemacht, ist mir aber ganz ehrlich etwas zu speziell, da einfach die Verbreitung noch nicht sooooo riesig ist wie bei Java. Die Performance würd ich jetzt auch in Frage stellen.


----------



## mixxed_up (11. Oktober 2010)

Die Sprache einfach, die mir mehr bringt, die verbreiteter ist und die am meisten angewendet werden kann.


----------



## bingo88 (12. Oktober 2010)

Zur Performance von C# kann ich nur sagen, ich kann mich nicht beklagen. Sicher wird ein kompiliertes natives Programm schneller sein (vorausgesetzt, der Programmierer hat keinen Müll fabriziert), aber bei einer normalen Desktopanwendung habe ich bis jetzt keine großen Unterschiede bemerkt. Dafür klickt man sich in C# die Oberfläche schön zusammen


----------



## thysol (12. Oktober 2010)

Skysnake schrieb:


> Was C# angeht, so hab ich damit keine Erfahrung gemacht, ist mir aber ganz ehrlich etwas zu speziell, da einfach die Verbreitung noch nicht sooooo riesig ist wie bei Java. Die Performance würd ich jetzt auch in Frage stellen.



Die Performance ist mir wurscht weil in meinem neuen Benchmark soll auch der CPU Code komplett in OpenCL sein. Daher wird C# nur zur initialisierung benutzt was kaum Leistung kostet.


----------

