C++ Buchempfehlung für "Fortgeschrittene"



  • Hallo,

    ich möchte um eine Buchempfehlung bitten, wenn man sich ungefähr auf dem Wissensstand nach lesen von "The C++ Primer" befindet.

    Danke & fG



  • More Effective C++



  • Melan schrieb:

    More Effective C++

    Weniger, eher Effective C++. "More Effective C++" wurde seit erscheinen nicht mehr überarbeitet, "Effective C++" dagegen schon. Das merkt man auch der Aktualität an (nein, das Buch ist jetzt nicht schlecht, aber teilweise einfach nicht mehr wirklich aktuell).

    Gute Bücher um etwas mehr von C++ zu lernen (Bitte immer nach der neuesten Ausgabe schauen):
    1. Die Effective-Reihe (gibt es weitgehend auch in deutsch;
    Effektiv C++ programmieren / Effective C++, Mehr effektiv C++ programmieren / More Effective C++, Effective STL) von Scott Meyers
    2. Die Exceptional-Reihe (hier gibt es glaube ich nur das erste in deutsch;
    Exceptional C++, More Exceptional C++, Exceptional C++ Style) von Herb Sutter [Im Stil von http://www.gotw.ca/gotw/]
    3. C++ Templates: The Complete Guide von Nicolai M. Josuttis und David Vandevoorde
    [IMHO sehr zu empfehlen, legt auch eine gute Grundlage für fortgeschrittene C++ Themen]

    cu André



  • Auch zu empfehlen ist C++ Coding Standards (Sutter/Alexandrescu), und wenns etwas allgemeiner sein darf (also nicht nur C++-bezogen):
    Entwurfsmuster/Design Patterns (Gamma, Helm, Johnson, Vlissides, auch bekannt als Gang of Four (GoF))
    Der Pragmatische Programmierer/Pragmatic Programmer (Hunt, Thomas)



  • Ich finde Modern C++ Design von Andre Alexandrescu auch noch sehr interessant. Ist jetzt nicht unbedingt gerade geeignet um nach dem Primer anzusetzen, aber es hat viele gute Sachen drin, die eine andere herangehensweise aufzeigt. (Vor allem, wenn man sich mit Entwurfsmustern/der Materie beschäftigt hat).



  • drakon schrieb:

    Ich finde Modern C++ Design von Andre Alexandrescu auch noch sehr interessant.

    Interessant: ja
    aber lernfaktor?

    man lernt das templates krass sind. aber sonst nicht viel.

    Exception C++ Style, Exceptional C++, More Exceptional C++, Effective C++, More Effective C++, Effective STL sind hier wohl die Standard fortgeschrittenen Werke...



  • Shade Of Mine schrieb:

    drakon schrieb:

    Ich finde Modern C++ Design von Andre Alexandrescu auch noch sehr interessant.

    man lernt das templates krass sind. aber sonst nicht viel.

    Ich finde, davon abgesehen dass alles mit Templates gelöst ist, besonders die verschiedenen Spielarten der Singletons sehr interessant. Auch z.B. die Art und Weise wie die Fabriken implementiert sind oder der Double-Dispatcher. Imho sind die Erklärungen der Konzepte bzw. Muster sehr gut. Man sollte sich nur im Kopf behalten, dass eine halb so generische Lösung oder auch eine Lösung ganz ohne Templates oftmals auch ausreicht. Auch wie man letzteres macht, kann man imho mit diesem Buch lernen.



  • Shade Of Mine schrieb:

    drakon schrieb:

    Ich finde Modern C++ Design von Andre Alexandrescu auch noch sehr interessant.

    Interessant: ja
    aber lernfaktor?

    Der Lernfaktor kann durchaus groß sein. Man lernt einiges über policy-based design, traits und andere Techniken, die auch in der STL Verwendung finden (wenn auch nicht in dem Umfang wie in loki)
    Man lernt einiges über das Paradigma, das C++ zu einer so besonderen Sprache im Vergleich zu anderen Sprachen macht. C++ wird vielerorts als Multi-Paradigmen-Sprache hoch gelobt, meist werden Kapselung durch OOP und Generizität genannt evtl. gefolgt durch die mögliche Hardwarenähe durch C-Style Byte-Geschiebe und Bit-Operationen Magie.
    Kapselung und OOP kennt man von anderen Sprachen, was Bitschiebereien und Generizität angeht ist C++ auch kein Monopolist.
    Dass templates sehr viel mehr sind als nur die Möglichkeit für generische Klassen und Funktionen hat aber längst nicht jeder C++-Entwickler verinnerlicht. Theoretisch weiß man das, schließlich zeigts die STL mit ihren traits, Allocator-Policies etc. (aber wer macht davon tatsächlich des öfteren Gebrauch?). Josuttis/Vandervoorde zeigen dass Templates einiges mehr können als nur Container und die (n+1)te Implementation von std::max(), schon allein durch den Umfang ihres "Complete Guide", der dicker ist als die Referenz manch einer kompletten Programmierpsrache. Aber das Wissen dass mehr gehen könnte bringt ja nichts.

    man lernt das templates krass sind. aber sonst nicht viel.

    Das lernt man beim ersten Durchlesen des Buches. Alexandrescu wartet mit vielen ungewohnten Konzepten auf, die man nicht alle auf Anhieb verinnerlichen kann. Wenn man das Buch also einmal durchliest und dann ins Regal zu den anderen stellt kanns durchaus sein dass man nicht viel mehr gelernt hat als "templates sind krass". Kann man natürlich auch für einige Dollar weniger haben:

    TEMPLATES SIND KRASS!
    

    jetzt wisst ihrs.
    Aber: Wenn man das Buch noch öfter liest, sich in aller Ruhe seine Gedanken drüber macht und verinnerlicht was er da tut und warum das funktioniert, dann lernt man nach und nach in templates zu denken.
    Deshalb trägt "modern C++" seinen Titel zu Recht, denn die Art wie Alexandrescu in (Template-)C++ denkt ist grundlegend anders als der normale (Standard-OOP-mit-einer-Prise-Generizität-)C++ Ansatz.
    Teile der BOOST-Bibliotheken sind übrigens auch ein gutes Beispiel für modern C++, woraus man viel lernen kann, wenn man nicht gleich wieder den Editor zumacht mit einem "boah-krass-aber-muss-ich-ja-nicht-verstehn"



  • Sorry, also ich fand es interessant aber die einzelnen Implementierungen sind nun wirklich nicht bahnbrechend. Das bahnbrechende an dem Buch ist die Idee soetwas zu machen. Die ausführungen dagegen sind nicht mehr bahnbrechend.

    von den anderen standard büchern lernt man weit mehr. vorallem da man relativ wenig auf modern c++ design in seinen alltag übernehmen kann.



  • Shade Of Mine schrieb:

    vorallem da man relativ wenig auf modern c++ design in seinen alltag übernehmen kann.

    Da gebe ich dir völlig recht. Wenig ist mehr als garnichts, aber mehr als ein paar Mal habe ich aus dem Buch zugegebener Maßen auch noch nichts in produktiven Code gegossen.



  • Shade Of Mine schrieb:

    Sorry, also ich fand es interessant aber die einzelnen Implementierungen sind nun wirklich nicht bahnbrechend. Das bahnbrechende an dem Buch ist die Idee soetwas zu machen. Die ausführungen dagegen sind nicht mehr bahnbrechend.

    Das Bahnbrechende sind natürlich die Ideen dahinter, sprich das Design auf Basis von Policies, Traits usw. Eine fertige Designidee in Code umzusetzen ist selten besonders bahnbrechend.

    von den anderen standard büchern lernt man weit mehr. vorallem da man relativ wenig auf modern c++ design in seinen alltag übernehmen kann.

    Das mag vor allem daran liegen dass im Alltag immernoch viel in herkömmlichem C++ entwickelt (und gedacht) wird. Wer Erfahrung in herkömmlichem C++ hat, aber nicht so viel in modernem C++, der wird Design Patterns wie sie Alexandrescu zeigt auch in herkömmlichem C++ umsetzen und nicht die entsprechende Implementierung aus der Loki Bibliothek, gespickt mit zwei oder drei kleinen Helferlein benutzen.
    Eine meiner (wie immer vielleicht leicht hinkenden) Anaogien: Wenn ich jetzt anfange Lisp zu lernen, würde ich in den ersten Wochen größere Programme immernoch in C++ schreiben, selbst wenn sie in Lisp eleganter, schneller udn effektiver implementiert werden könnten. Warum? Weil ich ein Gewohnheitstier bin wie alle Menschen und in C++ denke, nicht in Lisp.



  • Nur ist Modern C++ Design kein modernes C++ sondern eine Idee.
    Es sind viel zuviele Policies als dass es Sinn machen würde das wirklich genau so umzusetzen. Policy Based Design ja, aber nicht jede kleinigkeit sollte eine Policy sein (kostet zuviel Entwicklungszeit).

    Deshalb kann man Loki auch kaum produktiv einsetzen.

    Es ist mehr eine Machbarkeitsstudie. Modernes C++ Design siehst du eher bei boost. Einige Policies ja, aber nicht _nur_.

    In modern C++ Design wird nicht moderner C++ Code vorgestellt sondern gezeigt was machbar wäre. Aber alles machbare ist nicht zwangsweise auch sinnvoll. Für einige wenige komponenten uU ja, aber generell kann man nicht jede Funktion 100% flexibel machen - das ist kein guter Stil. Man muss den fokus darauf belassen was man erreichen will. einige zentrale komponenten sollen durchaus sehr flexibel sein, aber es kostet massig zeit jede kleine komponente so flexibel zu gestalten und es bringt im endeffekt nix



  • Machbarkeitsstudie ist eine gute Beschreibung - ich denke, das sollte man sich beim Lesen des Buches vor Augen halten. Es zeigt halt alles was geht und man pickt sich die Erbsen raus, die man tatsächlich auch braucht.



  • Sry, wenn ich den Thread ein wenig kapere, aber wenn ich nach Effective C++ Ebook suche finde ich vor allem viele "Free Ebook" Quellen, die allerdings zu großen Teilen nicht funktionieren oder mir merkwürdig vorkommen.
    Gibt es Effective C++ denn legal als kostenloses Ebook, oder sind das alles illegale Angebote?



  • Shade Of Mine schrieb:

    Policy Based Design ja, aber nicht jede kleinigkeit sollte eine Policy sein (kostet zuviel Entwicklungszeit).

    Deshalb kann man Loki auch kaum produktiv einsetzen.

    Bei Loki ist die Entwicklungszeit ja schon investiert. Und man kanns durchaus produktiv einsetzen, schließlich gibts für Ottonormal-Bedürfnisse vorgefertigte Policies, so dass man sich z.B. seinen persönlich zugeschnittenen Smartpointer aus dem Baukasten zusammenstöpseln kann.

    Es ist mehr eine Machbarkeitsstudie. Modernes C++ Design siehst du eher bei boost. Einige Policies ja, aber nicht _nur_.

    Natürlich wird in Code, der für eine bestimmte Problemstellung entwickelt wird, keine übermäßig überladene Policy-Schnittstelle erwartet. Es ist alles eine Frage der Verhältnismäßigkeit und des gesunden Menschenverstandes. Aber grade bei Dingen wie Bibliotheken, bei denen man vorher nicht wissen kann was der User damit anstellen will, ist Konfigurierbarkeit wichtig. Wie oft sitzt man da und denkt sich "ich möchte was, was fast genauso ist wie XXX::YYY, aber um meine Funktionalität einzubauen muss ich so gut wie alles neu schreiben".

    Alexandrecu zeigt was in Punkto Flexibilität machbar ist, und zwar dass da durch templates sehr viel machbar ist. Die Designentscheidung, wie viel Flexibilität man braucht ist nicht Thema des Buches.

    7H3 N4C3R schrieb:

    Machbarkeitsstudie ist eine gute Beschreibung - ich denke, das sollte man sich beim Lesen des Buches vor Augen halten. Es zeigt halt alles was geht und man pickt sich die Erbsen raus, die man tatsächlich auch braucht.

    Das Buch zeigt, dass es viele Erbsen gibt die man nur finden muss. Die Kernaussage des Buche ist in etwa "es ist fast alles machbar und ich zeig euch WIE es machbar ist" - das kann man auch in den C++-Alltag übernehmen, man muss nur von Fall zu Fall selbst entscheiden, ob man es auch machen sollte. Was das angeht: lieber etwas mehr Zeit in die initiale Entwicklung stecken als bei jedem Refactoring und jedem Featurewunsch den halben Code neu schreiben - auch dabei können die Prinzipien aus Modern C++ Design helfen.

    Ich bleib bei meiner Aussage, man lernt sehr viel mehr als nur "das templates krass sind."



  • Shade Of Mine schrieb:

    Das bahnbrechende an dem Buch ist die Idee so etwas zu machen.

    Die ISO Norm enthält dafür schon Ansätze und das Buch "Generative Programming, Czarnecki, Eisenecker" wird meiner Meinung nach unterschätzt. Das eine Kapitel über static C++ Metaprogramming ist klarer geschrieben als Modern C++ Design und führt in die Konzepte ebenfalls ein. Modern C++ Design ist eher das dazu passende "Cookbook".



  • Advanced Noob schrieb:

    Hallo,

    ich möchte um eine Buchempfehlung bitten, wenn man sich ungefähr auf dem Wissensstand nach lesen von "The C++ Primer" befindet.

    Die Exceptional C++ Büchern von Herb Sutter. Die Modern C++ Serie von Meyers finde ich nicht so spannend.

    Die englischen Originale sind zu bevorzugen.



  • ~john schrieb:

    Shade Of Mine schrieb:

    Das bahnbrechende an dem Buch ist die Idee so etwas zu machen.

    Die ISO Norm enthält dafür schon Ansätze und das Buch "Generative Programming, Czarnecki, Eisenecker" wird meiner Meinung nach unterschätzt. Das eine Kapitel über static C++ Metaprogramming ist klarer geschrieben als Modern C++ Design und führt in die Konzepte ebenfalls ein. Modern C++ Design ist eher das dazu passende "Cookbook".

    Ja, generative Programming ist eins meiner Lieblingsbuecher.
    Aber Modern C++ Design war Bahnbrechend. Auch wenn bei Generative Programming ja vorallem Generators schon eingesetzt wurden, Modern C++ Design geht einen Schritt weiter (eigentlich sogar ein paar). Modern C++ Design spielt einfach mit Policies bis es nicht mehr geht.

    Bei Generative Programming geht es um praktische Ansaetze und Generatoren zB auf GenVoca basierend erleichtern halt Feature-Matrizen enorm. Es ist dort eher alles pragmatisch und alles mit Ziel. Waehrned Modern C++ Design einfach auf LSD ist - aehnlich wie das Buch von Coplien (Advanced C++?) wo einfach Ideen aufgeworfen werden und ALexandrescu implementiert jede Idee bis zum Ende.

    Also so direkt sind die beiden Buecher nicht vergleichbar. Vorallem da Generative Programming ja auch viele andere Themen anspricht und C++ eigentlich nur zufaellig fuer die Codebeispiele verwendet.

    Aber Generative Programming bringt einem erst etwas wenn man die ganzen Konzepte seiner Sprache auch wirklich durchblickt.

    @pumuckl:
    Wenn du Klassen mit 5-10 Policies hast, wie in Loki ja oefters vorkommen, dann bist du nicht mehr produktiv. Es sei denn du schreibst einen Loki klon. Aber davon abgesehen macht es in der realen Welt keinen Sinn es so zu machen. Vorallem da du fuer die Konzeption der Policies ploetzlich laenger brauchst als fuer die Implementierung der Funktionalitaet. Und das testen ist ebenfalls ein Horror.

    Loki ist schoen und nett, aber es macht keinen Sinn soviele Policies einzusetzen wenn man Code schreibt. Es bremst einen nur enorm und ist fehleranfaellig. Wenn du wirklich schoenes Policy Design sehen willst, lies mal Generative Programming und dort die Kapitel ueber Generatoren und Feature Matrizen. Da werden praktische Beispiele gebracht wie man soetwas aufzieht.

    Modern C++ Design bitte nicht als vorlage fuer guten C++ Code verwenden. Das war naemlich auch nie der Gedanke hintern Modern C++ Design. Alexandrescu zeigt nur das machbare auf und teilweise auch das unmachbare. Deshalb lernt man Design maessig auf Modern C++ Design nichts was man nicht schon aus Buechern wie Generative Programming und Konsorten lernt. Man lernt eine Menge interessanter C++ Tricks und sieht die Grenzen des machbaren... das ist natuerlich spannend und interessant, aber wirklich produktiv bringen tut es nichts (aber das ist ja auch nicht das Ziel des Buches).



  • JustAnotherNoob schrieb:

    Gibt es Effective C++ denn legal als kostenloses Ebook, oder sind das alles illegale Angebote?

    Illegale Angebote. Es gibt kaum ein frei verfügbares Fachbuch.
    Ich wüsste auch nicht das es die Effectiv-Reihe überhaupt als PDF angeboten wird.

    cu André


Anmelden zum Antworten