Meinung zu Büchern der Art: Effective C++: 50 Specific Ways to Improve Your Programs and Designs



  • Ich stoße in letzter Zeit immer wieder auf Büchern der Art: "Effective C++". Bücher welche offenbar neue Programmierelemente/-paradigmen zeigen wollen. Sie scheinen meines Erachtens interresant zu sein, aber nur auf den ersten Blick.

    Lohnen sich solche Bücher (auch aus akademischer Sichtweise) ? Wie sieht das Ganze aus akademischer Sicht aus? Sind Programmierhilfen der Art "Effective C++" verkappte Design Patterns ?

    Ich meine wir alle wollen guten Code schreiben, doch ein Problem sind die Annahmen welche wir implizit in unseren Code machen. Bsp.:

    // Annahme: Funktion ist selbsterklärend
    int TestFunktion(int* a, int& b)
    {
      char Buf[8];
      // Annahme: Stack ist noch groß genug für Buf
    
      sprintf(Buf, "Hallo Welt: %i", *a);
      // Annahme: a, *a sind sauber initialisiert
      // Annahme: Buf ist groß genug für sprintf()
      //   -> Es kommt zu keinem Speicherüberlauf
    
      return a[0] + a[1] + b;
      // Annahme: a, *a, b sind sauber initialisiert
      // Annahme: a zeigt auf eine Liste von zeit int Werten 
      // Annahme: a und b sind nur als Eingaben gedacht
    }
    

    Und auch ohne so ein Buch mal durchgeblättert zu haben, weis da nicht so Recht ob sich solche Bücher lohnen, denn die Bücher scheinen mir eher dazu zu neigen ein paar Tips zur Verminderung der Annahmen zu liefern.

    Und so komme ich zum Urteil das eine gesunde Mischung aus der Kenntnis der impliziten Annahmen, Neugier, ein wenig Drang zur Annahmenverminderung, ... nützlicher sind als solche Bücher.

    Wie sieht ihr das ?



  • Bitte ein Bit schrieb:

    Ich stoße in letzter Zeit immer wieder auf Büchern der Art: "Effective C++". Bücher welche offenbar neue Programmierelemente/-paradigmen zeigen wollen.

    Nein, wenn sich die Bücher an Effective C++ halten, werden sie sich nicht unbedingt mit neuen Paradigmen beschäftigen. Effective C++ zeigt potentielle Fallstricke, Möglichkeiten die Codequalität zu verbessern und (aber eben nur) manchmal auch Paradigmen die sich inzwischen bewährt haben auf.

    Bitte ein Bit schrieb:

    Sind Programmierhilfen der Art "Effective C++" verkappte Design Patterns ?

    Nein, sie sind Richtlinien für sauberen und effektiven Code. Nicht mehr und nicht wengier.



  • 1.) Dein Beispiel vs double dispatch, oder dein Beispiel vs boost::mpl ?
    2.) Was bedeutet "akademische Sicht" fuer dich?
    3.) Was meinst du mit "lohnen"? 100 Euro + Lesezeit + Uebung gerechnet auf welchen Zeitraum bei welchen Anwendungen? Anwendungen wie in deinem Beispiel? Lol. Fuer Kindergartenprogramme lohnt es sich nicht.

    Verminderung der Annahmen

    Viele implizite Annahmen kannst du mit assert explizit machen. Insbesondere durch Kommentare, die im Header bzw. bei der Funktionsdeklaration Vor- und Nachbedingungen nennen. Nicht jeder kann die Funktionsdefinition einsehen.

    Und wenn der Stack nicht ausreicht, hast du als Programmierer sowieso Mist gebaut. Genauso gut koennte ich mich davor schuetzen, dass der Mond auf die Erde stuerzt, tue ich aber nicht.



  • In welchem Buch steht das mit dem Stack und zu was wird da geraten?



  • "Effective C++" gehoert zur Standardliteratur, wenn man einen guten C++ Stil entwickeln moechte. Es lohnt sich auf jeden Fall, so etwas zu lesen, wenn man...

    ... 1. einen guten Stil haben moechte.
    ... 2. schon etwas C++ programmiert hat.



  • Bitte ein Bit schrieb:

    Ich stoße in letzter Zeit immer wieder auf Büchern der Art: "Effective C++".

    Effective C++ ist AFAIK 1992 erstmals erschienen und soweit ich mich erinnern kann, wird es hier im Forum schon immer als klassisches Standardwerk gehandelt, das man mal gelesen haben sollte. Da findest du bestimmt einschlägige Postings von volkard u.a. aus dem Jahr 2000 oder 2001. Wenn dir das in letzter Zeit ständig über den Weg läuft, muss das wohl an dir liegen. Oder meinst du tatsächlich mit "Büchern der Art" andere Bücher, die das Konzept imitieren?

    Bücher welche offenbar neue Programmierelemente/-paradigmen zeigen wollen.

    Will es doch gar nicht. Effective C++ zeigt, wie man in dem unübersichtlichen Haufen an Features, der C++ eigentlich ist, einen sinnvollen Stil findet. Vielleicht meinst du ja doch ein völlig anderes Buch.

    Wie sieht ihr das ?

    Ich finde es unproduktiv, über Bücher zu diskutieren, die man noch nichtmal durchgeblättert hat.



  • 2.) Was bedeutet "akademische Sicht" fuer dich?

    Kann das Einführen eines solchen Buches Teil eines Vorgehensmodells zur Entwicklung sein ? Was ist der Unterschied zu Design Pattern ? Ist aber nach dem Thread von asc klar.

    Was meinst du mit "lohnen"? 100 Euro + Lesezeit + Uebung gerechnet auf welchen Zeitraum bei welchen Anwendungen? Anwendungen wie in deinem Beispiel? Lol.

    1.) Ist die Zielgruppe Anfänger, Fortgeschrittene oder Profis ?
    2.) Ist die Errata nicht übermäßig groß (unter 5 Seiten) ?

    "Effective C++" gehoert zur Standardliteratur, wenn man einen guten C++ Stil entwickeln moechte. Es lohnt sich auf jeden Fall, so etwas zu lesen, wenn man...

    ... 1. einen guten Stil haben moechte.
    ... 2. schon etwas C++ programmiert hat.

    Ich habe schon einiges in C++ gemacht, und ich möchte auch gerne einen guten Stil haben. Insbesondere wenn man schlechte Codebeispiele sieht.

    Ich finde es unproduktiv, über Bücher zu diskutieren, die man noch nichtmal durchgeblättert hat.

    Naja, ich habe ein wenig um die Ecke gedacht. Ich war am überlegen ob ich mir das Buch zulegen soll und wollte verhindern das ich an schlechtes Buch ala Jürgen Wolf gerate, da dieser auf Amazon auch inzwischen sehr gute Rezessionen bekommen hat. Und genau deswegen war dieser Thread eine Entscheidungshilfe für mich.

    Aber so wie es momentan aussieht habe hole ich mir doch das Buch. Danke Leute für die Hilfe. 🙂



  • Effective C++ ist auf alle Fälle Pflicht, wenn du C++ schreibst. More Effective C++ ist auch fein, aber nicht gar so bitter für jeden nötig wie das erste. Würde nicht an einem C++-Projekt mitarbeiten wollen, wo nicht alle Entwickler den Meyers gelesen haben oder zumindest den Inhalt kennen.



  • 1.) Ist die Zielgruppe Anfänger, Fortgeschrittene oder Profis ?
    2.) Ist die Errata nicht übermäßig groß (unter 5 Seiten) ?

    1.) Kann man leicht selbst herausfinden.
    2.) siehe erstens



  • Bitte ein Bit schrieb:

    1.) Ist die Zielgruppe Anfänger, Fortgeschrittene oder Profis ?
    2.) Ist die Errata nicht übermäßig groß (unter 5 Seiten) ?

    Zu 1: Ich würde sagen es liegt in allen Bereichen ein wenig. Alle drei Gruppen können in dem Buch sinnvolles finden, das Buch ist auch nicht zwangsweise zum Durchlesen von vorne nach hinten ausgelegt.

    Zu 2. Das kann ich dir bei EC++ nicht sagen, es empfiehlt sich aber immer zur neuesten Auflage zu greifen, da sich der Inhalt beispielsweise von der ersten zur dritten Auflage stark geändert hat. More Effective C++ wiederum ist älter (gegenüber der letzten Auflage von EC++) und in Teilen veraltet (Wobei dennoch sinnvolles darin zu finden ist). Effective STL finde ich auch nicht so verkehrt (wobei EC++ das wichtigste davon bleibt).

    Ich glaube zu jeder etwas besseren C++ Bibliothek sollte EC++ gehören.



  • Bitte ein Bit schrieb:

    Lohnen sich solche Bücher?

    Das Original von Meyers (nur Band 1) lohnt sich auf jeden Fall.

    Aber unzählige Trittbrettfahrer, die "Effektiv was anderes" schreiben und nicht Meyers heißen, kannste in der Pfeife rauchen.



  • Wie schon gesagt wurde sind die Effective C++-Bücher Standardliteratur. Grundsätzlich würde ich folgendes sagen: Wenn du die C++ Grundlagen einigermaßen kennst (du musst sie noch nicht aus dem ff beherrschen), und wenn du vorhast, mehr als Hello World und das 25.000ste Adressbuch zu schreiben, auf jeden Fall bedenkenlos in aktuelle Auflagen von Büchern investieren kannst, deren Autoren Scott Meyers, Herb Sutter und Andrej Alexandrescu heißen. Wobei das Standardwerk von Andrej eher schon was für fortgeschrittene Template-Fans ist.



  • volkard schrieb:

    Aber unzählige Trittbrettfahrer, die "Effektiv was anderes" schreiben und nicht Meyers heißen, kannste in der Pfeife rauchen.

    Effective Java fand ich ganz gut.

    Aber ja, der Titel alleine sagt sehr wenig aus. Marc++us' Buch OOP für Dummies hat ja auch einen wahnsinnig dämlichen Titel.

    @pumuckl:
    Ich würde Alexandrescu nicht als Standard Literatur sehen. Sein Modern C++ Design ist ziemlich schräg. Klar ist es wahnsinnig interessant zu lesen aber ich denke Bücher von Sutter und Meyers bringen einem viel weiter als er.



  • Exceptional C++ bzw. GotW finde ich übrigens auch sehr gut. Aber Effective C++ ist natürlich ein Standardwerk und äußert ideal, für Leute mit ersten Erfahrungen in C++.

    @Shade
    Ich finde Modern C++ Design mittlerweile auch ein bisschen angestaubt. Die Policy-Design ist ja schon länger nicht mehr "en vogue".



  • Shade Of Mine schrieb:

    volkard schrieb:

    Aber unzählige Trittbrettfahrer, die "Effektiv was anderes" schreiben und nicht Meyers heißen, kannste in der Pfeife rauchen.

    Effective Java fand ich ganz gut.

    Und Effective C# ist leider für die Tonne.



  • µ schrieb:

    Und Effective C# ist leider für die Tonne.

    Warum genau? Sind die Tipps falsch, schlecht oder falsch ausgewählt?



  • Bei solchen Büchern reicht es sich das Inhaltsverzeichnis auf Amazon durchzulesen.


  • Mod

    Bücher wie das von Meyers oder
    http://www.amazon.de/Accelerated-Practical-Programming-Example-Depth/dp/020170353X/
    versuchen doch eher, C++ einzuführen/zu vertiefen, Sinn und Möglichkeiten oder Besonderheiten der Sprache überhaupt zu vermitteln.
    Design Patterns versuchen standardisierte (erprobte) Muster zu vermitteln und das hat auch seinen Sinn, u.a., weil zum Programmieren Nachdenken und Testen auch dazugehört, aber oft wegfällt. Aber das heißt nicht, dass man sie nicht zur Vertiefung einer Sprache mitbenutzen könnte. Prinzipiell könnte man Design Patterns, da sie eine Ebene höher angesiedelt sind, leichter auf andere Sprachen übertragen. Wo man jetzt genau die Grenze ziehen will, hängt sicher auch noch von den jeweiligen eigenen Vorlieben und Erfahrungen ab.



  • pumuckl schrieb:

    Wenn du die C++ Grundlagen einigermaßen kennst (du musst sie noch nicht aus dem ff beherrschen), und wenn du vorhast, mehr als Hello World und das 25.000ste Adressbuch zu schreiben, auf jeden Fall bedenkenlos in aktuelle Auflagen von Büchern investieren kannst, deren Autoren ... Andrej Alexandrescu heißen.

    Auf jeden Fall sollte man sich auch dieses Buch von Andrej Alexandrescu kaufen:

    http://www.amazon.de/D-Programming-Language-Andrei-Alexandrescu/dp/0321635361/

    Das gilt erst Recht, wenn man neue Projekte anfängt.



  • rüdiger schrieb:

    Die Policy-Design ist ja schon länger nicht mehr "en vogue".

    Seit wann?


Anmelden zum Antworten