C++ Buch für C#-Fortgeschrittene

Palladin007

assimiliert
Moin


Ich lese jetzt seit einer ganzen Weile ein ziemlich gutes C#-Buch . Mittlerweile bin ich bei ADO.Net angekommen, was sich ziemlich zieht. Ich werde das Thema nicht liegen lassen, aber ich würde gerne parallel mit C++ anfangen, so als kleiner Zeitvertreib :D

Das Problem an der Sache ist, dass es Deutsch und kostenlos sein muss.
Auch wäre es schön, wenn sich das Buch eben nicht mehr mit allgemeinen Grundlagen wie OOP, etc. beschäftigt, die bei C++, C#, F# und was es nicht alles gibt, eigentlich hauptsächlich gleich sind.
PDF oder HTML, es sollte downloadbar sein, damit ich auch offline lesen kann.

Kennt jemand ein gutes, passendes Buch?


Gruß
 
C++ ist eine Teilmenge von dem was man in C# alles so treiben kann. In der Tat hat MS bei PHP4 und 5 mächtig geklaut :) hat also c++ und PHP vermengt, die MFC gecancelt und das .net Objektmodell gebastelt und am Ende hieß es C# .net, und je nach Stand der IDE hat man dann Zugriff auf .net 1.0 (vs.net von 2000) bis hin zu 4.0 (VS2012)

Du müßtest mal etwas konkreter werden.... was genau willst du mit C++ eigentlich anstellen? Systemprogrammierung? GUI Programmierung? Vertiefung in Multithreading und Prozeßkommunikation? Treiberprogrammierung? Gar Kernelmode Code? Muß es Visual Studio sein, oder alternative IDEs wie OpenWatcom oder gar eine IDE für den GCC?

Bei Ebay gibts solcherlei Bücher für 1 Euro (gedruckt), plus ein wenig Versand. Z.b. von Francis "Systemprogrammierung unter Windows" - Win32 API -, MS Press "Programmierung mit Visual C++ 6" - GUI und MFC 4.2 und streift viele praktische Anwendungen -, von Addison Wesley "C++ für Naturwissenschaftler", das geht mehr auf die Umsetzung komplexer mathematischer Algorithmen in C++ ein. Wer sucht, findet an bestimmten Stellen auch PDF Versionen davon.

Ich meine, im MSDN sind ein paar davon zum herunterladen, man muß sich nur einmal registrieren. Überhaupt wäre MSDN: Microsoft Developer Network (Deutschland) - .NET Framework, Visual Studio, Azure, Windows 8 und vieles mehr | MSDN Online eine passende Stelle um Material zu finden, gibts auch in Deutsch und die "Einsteigerseiten" für Entwickler kosten nichts. Selbst komplette Entwicklugnsumgebungen wie das Vs Studio Express Edition kosten nichts enthalten etliche Gigabyte an Doku und Anleitungen.

MSDN: Microsoft Developer Network (Deutschland) - .NET Framework, Visual Studio, Azure, Windows 8 und vieles mehr | MSDN Online

Unter Linux ist c# und .net kein Thema, da wird mit c++ und diversen Bibliotheken wie GTK und QT programmiert und dafür gibt es kostenlos massenhaft Material. Es gab mal eine Dot Net Implementation namens Mono, ist aber eingestellt worden und Moonlight (ein Silverlight für Linux), ebenfalls tot.

Eine Einführung unter Linux:

Einfhrung in C++ - Gratis C++ Programmieren Lernen, 106 Beispielprogramme Inklusive


nur eine von zigtausenden Seiten, wo man fragen und antworten kann:

codekicker.de - Antworten für Entwickler

Auf Linux OS | SUSE Linux Enterprise findet man ebenfalls sehr sehr viel Zeug, man muß sich nur durchbeißen.

Ansonsten, Programmierung an sich ist so ein weitläufiges Feld, da ist Google dein bester Freund (und auch Übersetzer) und sollte es mal ein Beruf werden, dann ist eine Spezialisierung absolut zwingend erforderlich. Man braucht gute 10 Jahre um vom Junior-Programmierer zum Software-Architekten aufzusteigen, und selbst der Architekt ist nicht allwissend, aber sehr erfahren. Meiner Erfahrung nach (ich programmier seit 1983) spielt die Sprache heute nicht mehr die Hauptrolle, sondern eher gefragt sind vertiefte Kenntnisse in einer der "neuen" Bibliotheken wie Dot Net auf Windows, QT und GTK und wie sie alle heißen auf Linux, oder man spezialisiert sich auf SAP API und dessen Skriptsprache....
 
Gar Kernelmode Code?

Ist das überhaupt möglich? Ich dachte, das funktioniert nur mit Assambler-Sprachen, wie C.



Was ich genau machen will, kann ich nicht sagen. Ich bin gerade mal 19, mein Wissen habe ich mir bisher komplett alleine erarbeitet, mit Hilfe von Foren, Dokumentationen und Büchern.
Bevor ich mir das erste Buch geholt habe, musste ich aber fest stellen, dass es schon sehr schwer ist, eine so umfangreiche Sprache, wie C# nur durch Dokumentationen und Tutorials zu lernen. Als ich dann ein OpenBook fand, habe ich erst einmal fest gestellt, was es da alles für zig verschiedene Möglichkeiten gibt, von denen ich nicht einmal gehört habe.
Aus dem Grund will ich gar nicht erst damit anfangen, alles mühsam aus dem Internet zusammen zu sammeln. Das kann ich machen, wenn ich die nötige Grundbasis habe, wie in C#. Ich hab das Buch durch und kann theoretisch jede weitere Technik noch zusätzlich lernen, ohne dass ich irgendwie Hilfe dazu brauche.

Was ich also speziell mir aus dem Buch erhoffe ist eine umfangreiche Basis in C++. Alle Bestandteile der Sprache und die wichtigsten Funktionen, die in einzelnen Klassenbibliotheken angeboten werden. Dazu dann noch GUI-Programmierung, Datenbanken, Multithreading und Prozesskommunikation. Diese Basis habe ich in C#. Nicht unbedingt mit viel Erfahrung verbunden und wenn ich mal auf das Eine zurück greife, muss ich auch nochmal nach schauen, aber ich habe es im Kopf und weiß, was es da für Möglichkeiten gibt. Genau das will ich in C++ auch und wenn es noch weitere große Teilgebiete gibt, dann auch die. Was es da gibt, weiß ich nicht, daher kann ich auch nicht sagen, was ich gerne wissen will.

Ich bin halt ein Tipp, der will alles wissen :D
Das wird nie funktionieren, aber ich will zumindest nicht in eine komplexe neue Technik, wie z.B. XAML einsteigen müssen, nur um mit WPF arbeiten zu können. XAML war im C#-Buch dabei und auch WPF und darüber bin ich froh, weil ich dann nicht erst die Basis erlernen, sondern bestehendes Wissen nur noch auf frischen und erweitern muss.


Die ganzen Dinge, wie Systemprogrammierung klingen interessant, aber es hat im Moment keinen Sinn für mich, dort anzufangen, weil da auch das Grundwissen, wie ein Betriebssystem funktioniert, fehlt. Das erhoffe ich mir, wenn ich nach C++ (oder davor, das weiß ich noch nicht) mit C anfange. Ein Buch habe ich bereits und dort wird auch ein tief greifendes Grundwissen von Betriebssystemen und der Arbeit in direkter Hardware-Nähe versprochen.
Wenn ich dann die drei Sprachen C, C++ und C# "kann" und, dann würde ich mich in die Systemprogrammierung stürzen, oder eventuell noch eine andere Sprache lernen.



Danke für die ganzen Links. Ich schau sie mir mal an, aber ich glaube, ohne ein umfangreiches Buch hat es für mich keinen Sinn. Ich bin jetzt in der 12. Klasse, ABI-Stress und wenn ich mir Stück für Stück einzeln alles aus dem Internet suchen muss, ist das Lernen einer Sprache wie C++ einfach deutlich schwerer, als mit einem guten Buch, was ich im Bus lesen kann. In dem Fall würde ich dann halt mit C anfangen.


Edit:
Hab mir gerade diesen Link angeschaut:
http://ladedu.com/cpp/
Ich denke mal, da werde ich schon rein lesen. Ein umfangreicheres Tutorial zu Beginn schadet nicht, aber das reicht eben nicht aus, es überbrückt nur die Zeit. ^^
 
Zuletzt bearbeitet:
ich kann das nur allzugut verstehen. Ich wollte damals daß die Maschine tut was ich will, und das war in Basic auf den damals vorherrschenden 8 Bit 1 MHz Homecomputern in wenigen Monaten gelernt. Bei nem Praktikum hatte ich Zugang zu einem 286er von IBM, neuestes Modell von 1984, 12.000 Mark teuer (heute wohl 20.000 Euro), absolutes Topmodell, da funktionierte ein Textmodus-Spiel von mir nach einer Woche.... ein "Asteroids" Clone. Und Basic gabs da auch auf einem Multiusersystem von Siemens-Nixdorf, ich meine ein BS1000 oder so ähnlich, Usernamen und Paßwörter: Fehlanzeige und Adminrechte? Was ist ein Recht? Jeder durfte alles, aber wer "mickeymouse" eintippte verschwendet 2 Meter Papier, die dann in dem Druckjob eines Programmierers auftauchten.

Heute ist das alles unendlich viel komplexer geworden, und C# ist wohl der beste Einstieg, den man so machen kann. Zum Glück helfen einem die Entwicklungsumgebungen ja sehr viel weiter, mit Vervollständigung von Code, fertig generierten Hello-Wörld-Beispielen und kompletter Doku im Web. C und C++ ist nur eine logische Fortsetzung, denn darüber wird man später immer wieder stolpern denn bis vor 10 Jarhen war praktisch die gesamgte Windows-Software-Entwicklung rein C/C++ und Dot Net kam erst zögerlich hinzu.

Vermutlich kommt man am schnellsten voran, wenn man sich nur einem Thema widmet, was einen auch interssiert und dann nimmt man das näcshte Thema. Spezielle Einzelllösungen hab ich mir oft auf

http://www.planet-source-code.com

rausgesucht, für PHP hat mir

www.selfphp.de

weitergeholfen, speziell bei Datenbankzugriffen und dem Verarbeiten von Formularen.
 
Kurze Zwischenfrage:


Geh mal davon aus, ich bin in C# weit genug um mich als Profi zu bezeichnen. Dem ist nicht so, aber geh einfach mal davon aus.
Welche Sprache würdest du mir dann zum weiter lernen empfehlen? C oder C++?
Lernen will ich beide, aber mit welcher fange ich an?

Wäre schön, wenn du mir da eine Antwort geben kannst und erklären, warum, denn ich bin unschlüssig.


Gruß
 
Die Frage ist eher was du Programmieren möchtest.
Beide Sprachen, also C und C++, sind relativ schnell und für hochperformante und Hardware-nahe Anwendungsbereich geeignet. Für Desktop-Anwendungen würde ich heutzutage ehrlich gesagt keine der beiden wählen. Beide sind relativ schwer zu Programmieren, da man mit Pointern arbeiten muss.

Wie wäre es mit einer ganz anderen Sprache? Zum Beispiel was funktionales. Da wäre F# oder Haskell eine Idee, wobei ich dir Scala empfehlen würde. Scala verbindet Objektorientierung und funktionale Programmierung, was den Umstieg einfacher macht. Bei funktionale Programmierung ist Multithreading-Programmierung auch einfacher, da man in der Regel alle werte und Funktionen pure (vereinfacht gesagt "unveränderbar", geben immer das selbe Ergebnis zurück, haben keine Nebeneffekte) sind. Allerdings ist der Programmierstil anders, als in der Objektorientierung.

Ruby ist einfach zu programmieren und die dynamische Typisierung ist ganz toll :)
Mit Java kannst du Plattformunabhängigkeit erzielen. Mit JavaFX kann man relativ einfach tolle GUIs bauen. Allerdings ähnelt Java C#.

Für den Wbbereich ist PHP interessant.

Noch ein paar allgemeine Sachen: Wenn du Multithreading-Programmierung anwenden möchtest, solltest du dir auf jeden Fall vorher anlesen, wie Thread- und Prozessverwaltung bei Betriebssystemen funktioniert. Das muss man vorher verstanden haben, denn bei Nebenläufigkeit und Parallelität bekommt man - wenn man einen Fehler bei der Synchrinisation macht (was schnell mal passiert) - ganz ekelhafte, sporadisch auftretende Fehler und Deadlocks, die nur durch Testen kaum findest und nicht nachvollziehen kann. Ohne das entsprechende Hintergrundwissen kommst du hier nicht weiter.

Ansonsten kann ich nur empfehlen, Software-Architektur und Design Pattern (Entwurfsmuster) genauer anzuschauen. Beides ist hochinteressant und hilft dir gute Programme zu schreiben. Du kannst der Beste Programmierer sein und alle Funktionalitäten einer Sprache perfekt beherrschen. Aber wenn die Architektur deiner Software scheiße ist, wird dein ganzes Programm schnell unnütz.

Achja, was den Kernel-Mode Code angeht: Kein Modernes Betriebssystem lässt dich Code im Kernel-Mode ausführen. Du rufst zwar ständig System-Calls, die im Kernel-Mode laufen, auf, aber der Rest des Codes läuft im User-Mode. Ausnahme sind Treiber. Die laufen im Kernel-Mode. Das ausführen von Code im Kernel-Mode birgt ein großes Sicherheitsrisiko, da dadurch ein direkter Hardwarezugriff möglich ist. Das ist auch der Grund, warum Windows bei unsignierten Treibern fragt, ob man diese tatsächlich installieren möchte.
Unter Linux könntest du natürlich auch den Kernel selbst um eigenen Code erweitern und den Kernel neu kompilieren...
 
Naja, was ich genau machen will, weiß ich nicht. Ich weiß nur, dass ich später beruflich in diese Richtung gehen möchte.
Den Vorteil den ich bei C++ ist der, dass es doch sehr schnell ist und auch hardwarenahe Programmierung möglich ist, aber trotzdem die Objektorientierung beherrscht.
Und den Vorteil, C zu können, sehe ich darin, dass man mit C praktisch alles machen kann. Außerdem würde ich mir solide Grundkenntnisse der internen Funktionen eines Betriebssystems erarbeiten können, das steht zumindest in der Einführung des C-Buches, das ich habe.

Woran ich auch immer ein bisschen denke, ist die Reaktion eines Arbeitgebers, wenn er erfährt, dass ich so schwere Sprachen wie C oder C++ schon seit meiner Jugend in der Freizeit und mit Spaß nutzen kann. ^^

Auch denke ich, dass ich von der Sprache, die ich lerne, möglichst weit gefächerte Möglichkeiten, gute Performance, Unabhängigkeit und möglichst viele Anwendungsbereiche, abgedeckt bekommen kann. Wobei ich Java nicht lernen möchte, das hat mir der Informatik-Unterricht gründlich verdorben. Später lese ich mich da vielleicht mal wieder ein. ^^
Außerdem sollte sie eine Zukunft haben. Nicht wie Delphi, was, soweit ich weiß, nicht mehr weiter entwickelt wird.

Und ich will alles wissen. ^^ Das ist nicht möglich, aber ich kann ja zumindest darauf hin streben.


Wie schwer eine Sprache ist, ist mir eigentlich auch ziemlich egal. Wenn ich etwas nicht verstanden habe, habe ich noch nie aufgegeben, bis ich es doch kapieren konnte und solche Dinge, bei denen man auch mal rätseln muss, fesseln mich dann irgendwie. ^^


Aus den ganzen Gründen habe ich auch C/C++ in die nähere Auswahl gelegt. Teils, weil der Umstieg von C# aus (hoffentlich) leichter sein wird und weil diese Sprachen sehr umfangreich, schnell und unabhängig sind und weil sie in vielen Bereichen genutzt werden können.
 
Kein Modernes Betriebssystem lässt dich Code im Kernel-Mode ausführen. Du rufst zwar ständig System-Calls, die im Kernel-Mode laufen, auf, aber der Rest des Codes läuft im User-Mode.

Kann ich damit sagen, dass nur lohnt, mit C zu arbeiten, wenn man entweder Treiber programmieren, oder eine Assambler-Anwendung erstellen will?
Wenn ja, dann fällt mir die Entscheidung nicht schwer, denn dafür brauche ich bestimmt weit umfangreichere Kenntnisse.

Da ich ja eigentlich bei den C-Sprachen bleiben wollte, weil ich damit so gut klar komme und Visual Studio ja eine hervorragende Entwicklungsumgebung bietet, bleiben ja nur Sprachen wie C, D, C++, C#, F# und wenn ich noch eine vergessen habe, dann die auch noch.
C fällt ja vorerst in den Hintergrund aus dem Grund, den du genannt hast und D sollte ich, wenn überhaupt, erst lernen, wenn ich C bereits kann, das erleichtert die Sache dann sicher, weil C-Code auch mit einem D-Compiler compiliert werden kann.
F# werde ich mir vermutlich später auch noch anschauen, allerdings ist F# wieder an das .Net-Framework gebunden und fällt damit auch raus.

Übrig bleibt C++, was ja einzelne Bibliotheken vom Net-Framework nutzen kann, aber nicht davon abhängig ist.
Das finde ich persönlich sehr praktisch, denn dann kann man ja auch einfach die eine oder andere Bibliothek vom Installer mit in den Anwendungsordner legen lassen, wenn sie nicht bereits vorhanden ist.
Ganz abgesehen davon ist C++ sehr hochperformant und ich habe auch schon ein bisschen damit programmiert. Zwar nur ein bisschen in der Konsole, aber der Anfang in C würde mir vermutlich schwerer fallen, selbst wenn man mal die Tatsache ignoriert, dass es "nur" eine imperative Sprache ist.



Womit wir wieder bei dem Buch über C++ wären.
Vermutlich werde ich mir doch das Buch kaufen. Das schmerzt in der Brieftasche, aber ich habe gleich noch die CD als Beilage und kann es auch unterwegs lesen.
 
NAja mit C alles machen zu können ist nicht so ganz richtig. Für komplexe Software ist C einfach ungeeignet. Der Trend geht langsam in die Richtung, dass C++ auch bei den Embedded Systems C langsam ablöst, da diese immer schneller werden. C++ ist für komplette Anwendungssoftware ebenfalls unbrauchbar. Wie bereits gesagt, beides wird nahezu nur bei Hardwarenahen Anwendungsgebieten eingestzt. Außerdem sind beides wohl eher weniger die Sprachen mit großer Zukunft. In C/C++ wird immer weniger Programmiert werden - auch wenn es natürlich nicht all zu schnell ausstirbt.

Willst du eine Sprache mit Zukunft, dann lerne Scala - dazu sind allerdings zunächst Java-Kenntnisse erforderlich.

Und deinen späteren Arbeitgeber wirst du nicht so sehr mit Kenntnissen in vielen Sprachen beeindrucken, sondern eher mit Kenntnissen in der Software-Engineering. Programmierer gibt es wie Sand am Meer und wer eine Sprache gut beherrscht, lernt auch relativ schnell eine andere. Das interessiert nicht so sehr...
 
Nagut, dass C eine rein imperative Sprache ist, bedeutet natürlich ein Nachteil. Mit "alles machen" meine ich damit, dass man in C keine Grenzen hat, was die Arbeit mit der Hardware angeht.

Aber C++ wird immer noch in sehr Leistung fordernden Programmen genutzt, oder?
Hab mal gelesen, dass Spiele wie Assassin's Creed in C++ geschrieben werden.


Das Problem was ich allerdings bei vielen Sprachen habe, ist, dass sie eine Laufzeitumgebung brauchen.
Java braucht eine, C#, F#, etc.
Immer muss beim Anwender die passende Laufzeitumgebung installiert sein und damit fällt raus, dass man einfach nur die fertige exe und eventuelle Zusatzdateien kopiert und gleich starten kann. Deshalb wollte ich mit C++ anfangen.



Weshalb sagst du denn, dass Scala Zukunft hat?
Hab eben den Wikipedia-Artikel dazu überflogen.
 
Oben