🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1705

C++ Buecher

#1705
From: Dietmar Kuehl
Date: Wed, 28 Feb 1996 20:38
259 lines
14985 bytes
Hi,

letztens habe ich in meinem (leider nicht mehr jugendlichem) Leichtsinn
angeboten, eine kommentierte Liste von C++ Buechern zu posten, wenn ich
dannach gefragt werde. Nun, ich wurde dannach gefragt... Unten gibt es
also ein Liste von Buechern im Zusammenhang mit C++, deren Lektuere ich
fuer mindestens Vorteilhaft halte. Einige der Buecher sehe ich dabei
als "Pflichtlektuere" (zwei, das geht doch, oder?): Die sollte man auf
jeden Fall lesen, wenn man ernsthaft, also nicht nur hobbymaessig, C++
programmieren will. Ich habe nur Buecher aufgefuehrt, die ich selbst
(zumindest teilweise) gelesen habe. D.h.  die Liste ist nicht als
vollstaendig anzusehen. Insbesondere sind zu bestimmten Themen sicher
andere Buecher mindestens ebensogut, wenn nicht besser: Ich habe sie
dann nicht mehr gelesen, weil ich ungefaehr ueber das Bescheid wusste,
worueber das Buch ist (laut Titel oder Rueckseite...). Was ich
ungefaehr sagen moechte ist das:  Nur weil ein Buch in der Liste nicht
auftaucht, heisst es nicht, dass nicht gut ist oder ich es nicht auch
empfehlen wuerde...

Die Reihenfolge der Buecher ist etwas willkuerlich, aber ich habe mich
bemueht von Buechern, die hauptsaechlich ueber die Sprache selbst gehen
zu Buechern ueber das Design von C++ Programmen zu gehen...

- "The C++ Programming Language, 2nd Edition", B.Stroustrup,
  Addison-Wesley, kurz: C++PL2. Immernoch DAS Buch ueber C++.  Leider
  ist es in vielerlei Hinsicht nicht mehr ganz up to date. Es gibt aber
  hoffentlich eine dritte Auflage, wenn ISO C++ definiert ist.
  Abgesehen von einem C++ Tutorial und einer C++ Referenz (bei dem
  leider der Index nicht stimmt; zumindest in der Fassung die ich
  besitze...), gibt es auch Einblick in den Background und wie man
  Projekte angehen kann. Von diesem Buch gibt es auch eine deutsche
  Uebersetzung.

- "The Annotated C++ Reference Manual", M.Ellis & B.Stroustrup,
  Addison-Wesley, kurz: ARM.  Der bisherige "de-facto Standard":
  Beschreibt einen Teil des zukuenftigen Standards (allerdings wird es
  auch eine Reihe Aenderungen geben) und ist zum Nachschlagen von
  Details gedacht (auf jeden Fall ist es kein Lehrbuch und "durchlesen"
  tut man es wohl auch nicht). Inzwischen wird es zunehmend weniger als
  Grundlage genommen: Es wurde praktisch durch das "April DWP" (siehe
  unten) ersetzt.

- "Working Paper for Draft Proposed International Standard for
  Information Systems - Programming Language C++", A.Koenig (Ed.), gibt
  es als Buch direkt von ISO (oder via ftp), kurz: (April) DWP (kein
  Wunder das es dafuer eine Abkuerzung gibt :-). Ist auch nicht zum
  Lesen gedacht, sondern zum Nachschlagen. Das ist ungefaehr das, was
  sich die Leute im Standardisierungskommittee so denken, wie C++
  aussehen soll. Allerdings gibt es seit April auch schon wieder eine
  Reihe Aenderungen/Ergaenzungen (letzters allerdings im Wesentlichen
  nur an der Beschreibung; keine wesentlichen Sprach-/
  Libraryerweiterungen mehr). Die einzige Referenz, die den
  zukuenftigen Standard wenigstens halbwegs korrekt beschreibt. Leider
  ist es irgendwie wahnsinnig kompliziert geschrieben (vielleicht
  finden Juristen sowas Klasse; muesste man glatt man testen...). Im
  April wird es voraussichtlich eine neue Fassung davon geben.

- "The Design and Evolution of C++", B.Stroustrup, Addison-Wesley,
  kurz: D&E. Ein exzellentes Buch ueber die Gedanken "hinter" der
  Sprache (die Design-Philosophie von B.Stroustrup, die sich doch
  radikal etwa von der von B.Meyer, Entwickler von Eiffel,
  unterscheidet), dem "Warum" von vielen Entscheidungen, einige
  Neuerungen in der Sprache (ueber ARM und C++PL2 hinaus) und der
  Geschichte (und teilweise Zukunft) der Sprache. Vor allem
  Sprachkritikern sei dieses Buch VOR dem Schreiben einer Kritik
  waermstens empfohlen. ... und fuer alle, die mehr ueber C++ wissen
  wollen.

- "The Standard C++ Library", P.Plauger, Prentice Hall. Eine leider
  nicht mehr aktuelle Beschreibung der Standard C++ Library: Es fehlt
  z.B. STL vollstaendig und auch der Rest der Library hat sich massiv
  (in Richtung von STL-artigen Techniken) geaendert. Dennoch wird die
  allgemeine Philosophie der Komponenten (etwa von IOstreams) ganz gut
  beschrieben (zwar nicht immer ausfuehrlich, aber doch wenigstens
  vollstaendig). Neben den relevanten Auszuegen aus einem veralteten
  Working Paper enthaelt des Buch eine vollstaendige Implementation der
  beschriebenen Library. Um das Buch einfach lesen zu koennen, sind
  gute C++ Kenntnisse eine Voraussetzung.

- "The Standard C Library", P.Plauger, Prentice Hall. Ich weiss nicht,
  ob es eine korrekte Beschreibung der ISO C Library ist (ich habe den
  entsprechenden Standard nicht), aber man findet in diesem Buch auf
  jeden Fall die Details, die man z.B. in C Tutorials nicht findet.
  Ansonsten ist das Buch gehalten wie das vorherige (bzw. in
  Wirklichkeit natuerlich genau umgekehrt :-).

- "STL Tutorial and Reference Guide", D.Musser & A.Saini, Addison-Wesley.
  Eine gute Beschreibung von STL (wie es im Standard ist). Leider ist
  der Reference Teil meiner Meinung nach etwas unuebersichtlich
  (naemlich thematisch statt alphabetisch) geordnet. Ansonsten wird die
  Idee "generic programming" und ihr Umsetzung in STL samt Anwendung an
  vielen Beispielen beschrieben.

- "C++ IOStreams Handbook", S.Teale, Addison-Wesley. Diese Buch war
  lange Zeit die einzige Quelle fuer Information ueber IOStreams.
  Inzwischen ist es veraltet und es gibt deutlich bessere
  Informationsquellen (etwa das Buch von Plauger): Das Buch ist in
  meinen Augen absolut chaotisch. Eine Trennung von "Programmer's
  Manual" und "Reference Manual" waere da wesentlich besser gewesen.
  Der einzige Vorteil gegenueber dem Buch von Plauger ist, dass es sich
  an den Benutzer wendet (anstatt an den Library Programmierer) und
  daher einige Beispiele enthaelt...

- "Effective C++", S.Meyers, Addison-Wesley (gibt es in deutsch als
  "Effektiv C++ programmieren). Ein "must-read": 50 exzellente Tips was
  man besser bleiben laesst, wie man es besser macht und warum.  Leicht
  zu lesen, vom Praktiker fuer den Praktiker.

- "More Effective C++", S.Meyers, Addison-Wesley. Da habe ich vorhin
  gesagt, dass ich nur Buecher aufliste, die ich zumindest teilweise
  gelesen habe... Auf dieses Buch trifft es nicht wirklich zu: Ich habe
  nur ein paar von den 35 Tips ueberflogen. Trotzdem: Es macht
  ebenfalls einen sehr guten Eindruck. Die Tips sind teilweise deutlich
  umfangreicher als in "Effective C++"... Wie gesagt: Ich habe es
  (leider) noch nicht gelesen. Ich habe es erst vor 10 Tagen oder so
  bekommen...

- "C++ Programming Style", T.Cargill, Addison-Wesley. Geht in eine
  aehnliche Richtung wie "Effective C++", macht aber die Punkte nicht
  fuer konkrete Situationen, sondern ehere generelle Regeln. Leider
  werden keine Regeln fuer Templates, Exceptions, etc.  diskutiert, da
  es, als das Buch geschrieben wurde, noch zu wenig Erfahrung damit
  gab.

- "Designing and Coding Reusable C++", M.Carrol & M.Ellis,
  Addison-Wesley. Eine grundsaetzliche Diskussion ueber den Entwurf von
  C++ Code und was man beachten sollte. Es werden eine ganze Reihe von
  Aspekten diskutiert, die mit Wiederverwertung zu tun haben: z.B.
  Effizienz, Exception-Safety, verschieden kompatibiltaets Kritieren,
  etc.

- "C++ FAQ", M.Cline & G.Lomov, Addison-Wesley. Wie das C++ FAQ (siehe
  etwa <http://www.informatik.uni-konstanz.de/~kuehl/cpp/cppfaq.htm>),
  aber ein paar mehr Fragen/Antworten. Ausserdem halt in gedruckt und
  gebunden und nicht auf dem Bildschirm. Dafuer hilft grep(1) nicht, um
  Sachen zu finden... Fuer alle die sich das FAQ noch nicht
  durchgelesen haben, vielleicht eine sinnvolle Investion (das erinnert
  ggf.  daran, wo man noch nach Antworten auf C++ Fragen suchen
  kann...).

- "Taming C++", J.Soukup, Addison-Wesley. Ein Buch ueber das Design von
  C++ Code.  Beschreibt was Code von einander abhaengig macht, warum
  man das vermeiden will und wie man das vermeiden kann. Ist allerdings
  nicht ganz einfach zu lesen.

- "Secrets of the C++ Masters", J.Alger, Academic Press. In diesem Buch
  geht es vor allem und immer wieder um Pointer-Klassen in allen
  moeglichen Variationen. Sehr nett :-)

- "Advanced C++", J.Coplien, Addison-Wesley. Nochmehr Pointer, aber
  nicht nur.  Hier kommt es mehr auf das Zusammenspiel von mehreren
  Klassen an. Es geht sehr stark in Richtung "Design Pattern" (siehe
  unten), nur das es auf C++ spezialisiert ist.

- "Design Patterns", E.Gamma, R.Helm, R.Johnson, J.Vlissides,
  Addison-Wesley, kurz: GOF book (Group Of Four; die vier Autoren
  tauchen oft zusammen auf). Ein "must-read". Es ist nicht C++
  spezifisch, sondern findet Anwendung zumindest in allen
  objekt-orientierten Programmiersprachen: Diskutiert werden immer
  wiederkehrende Muster von Zusammenspiel von mehreren Objekten. Als
  erstes wird das Konzept "Design Pattern" eingefuehrt und an
  Beispielen illustriert. Dannach wird eine "fundamentale" Menge von
  "Design Patterns" beschrieben. Einfach gut, das Buch (*): Lesen von dem
  Buch aendert die Herangehensweise an Probleme. ... und dabei ist es
  leicht Lesbar (ich habe es vollstaendig auf einer Bahnfahrt von
  Konstanz nach Berlin mit dem Wochenend-Ticket gelesen; also ein Tag
  Bahnfahrt).
  (*) Ich weiss: "Dies kein Satz. Auch nicht."

- "Practical Algorithms in C++", B.Flamig, John Wiley & Sons. Der Autor
  schafft es, (meiner Meinung nach) uebelste Programmiertechnik mit
  ziemlich guten objekt-orientierten Ideen zusammenzubringen:  Er
  verwendet einerseits ausgiebig 'goto' (ja, sowas gibt es in C++ und
  ich habe es, obwohl ich seit Jahren C++ programmiere, noch nie
  gebraucht...), andererseits abstrahiert er Algorithmen in Objekte
  (eine ziemlich maechtige Idee, mit der man Algorithmen deutlich
  flexibler gestalten kann; genaueres dazu wird sich auch in meiner
  Diplomarbeit finden, an der ich derzeit schreibe...). Das Buch
  beschreibt ganz gut, wie man Algorithmen implementieren kann.
  Allerdings halte ich von dem Programmierstil, den der Autor
  verwendet, nichts (aber das ist ziemlich unabhaengig von den anderen
  Techniken; man sollte das Buch halt mit Vorsicht geniessen...).  Zu
  dem Buch gibt es als "Companion" noch ein zweites, das ich allerdings
  nicht gekauft habe: "Practical Data Structures in C++".

- "Data Abstraction and Structures using C++", M.Headington, D.Riley,
  D.C.Heath and Company. Es beschreibt, wie man in C++
  objekt-orientiert programmieren kann. Ist eigentlich ganz gut. Ich
  kann mich allerdings nicht mehr genau erinnern; ist schon laenger
  her, dass ich es gelesen habe und es war irgendwie nichts, was mir
  ganz neu gewesen waere...

- "Object Oriented Modelling and Design", J.Rumbaugh, Prentice Hall.
  Eines der Standardwerke ueber objekt-orientierte Programmierung. Hat
  mit C++ direkt nichts zu tun, aber ein Buch ueber OO-Programming sollte
  man sich ruhig mal antun: Hier wird von der Notation bis zur Technik,
  wie man entwirft, alles durchgegangen. "OMT" ist die eine Schule, eine
  andere kommt gleich. Inzwischen gibt es wohl auch ein Buch das die
  beiden Techniken zusammenbringt...

- "Object-Oriented Analysis and Design", G.Booch, Benjamin-Cummings.
  Noch eines der Standardwerke ueber objeckt-orientiert
  Programmierung.  Ist wie das vorherige, nur etwas anders. Die
  Methode, die hier beschrieben wird, heisst "Booch-Method" und ist
  eine andere Schule. [flame-bait on] Fuer Leute, die auch andere
  Sachen als OO Analysis und Design machen, sieht das eigentlich
  genauso aus wie OMT...: Mich hat zumindest der Unterschied nie
  richtig interessiert... [flame-bait off]

So, dass sind jetzt einige tausend Seiten, die will niemand wirklich
alle lesen will, nur weil sie von irgendwem empfohlen wurden...  Hier
also, was ich fuer eine vernuenftige "Grundausstattung" halte:

- ein C++ Tutorial. Ausser C++PL2 habe ich davon nichts in der Liste:
  seit C++PL2 habe ich halt nichts mehr davon gelesen. ... und von dem
  was ich bisher sonst gesehen habe gefaellt mir keins so, dass ich
  sagen wuerde "das ist es".
- Effective C++: Sonst laeuft man eh in jede Falle in der Sprache :-)
- Design Patterns: Es hilft wirklich viel. Die Zeit holt man schnell
  wieder raus.
- Was ueber STL, z.B. das Buch von Musser und Saini: STL ist eine
  andere Denkweise ("generic programming"). Von dem Buch reichen
  vermutlich die ersten zwei Kapitel, um die Idee zu bekommen.
- Was ueber objekt-orientierte Programmierung.

Grundsaetzlich gilt: Nur lesen reicht nicht. Anwenden muss man die
Sachen auch. ... und zum Anwenden ist es ganz nuetzlich, eine Referenz
zu haben. Ich benutze...

- das DWP fuer die Sprache und teilweise fuer die Library.
- Plauger's Buecher fuer die Library (bzw. man-Pages oder ein Buch
  ueber POSIX.1).
- das GOF Buch fuer die Patterns.
- seit kurzem (ich habe es erst seit ~drei Wochen habe) das Buch von
  Musser und Saini (trotz nicht so tollem Referenz Teil...)

Fuer Kritik, Ergaenzungen (mehr Buecher, mehr Kommentar), Korrekturen,
etc. bin ich offen. Insbesondere bin ich persoenlich natuerlich an
Auslassungen interessiert, wo ich einen Teil garnicht abgedeckt habe
(zumindest da habe ich dann vermutlich noch Nachholbedarf). NICHT
interessiert bin ich an Dokumentation von spezifischen Compilern
(vielleicht ausser von gcc, den man ja eigentlich mal erweitern
koennte...), spezifischen Libraries, etc. Insbesondere interessieren
mich MFC und die verschiedenen PC-basierten Compiler ueberhaupt nicht
(zumindest derzeit, demnaechst ist Jobsuche faellig, da sieht es
vielleicht anders aus; allerdings hoffe ich das UNIX und X11 als Ersatz
ausreichen; mal sehn...).

Hm. Mit Abruestung (auf Artikel unter 100 Zeilen) ist wohl vorerst
nichts geworden.  Ich kann es ja mal versuchen, wie die Supermaechte:
Abruestung auf unter 100 Zeilen ist super. Macht mal, ich werde das in
ZUKUNFT dann BESTIMMT auch machen... :-) (allerdings brauche ich eine
Uebergangszeit zum Abruesten: z.B. damit einige Klassen, die ich oefter
verwende schon bekannt sind...; wie die Supermaechte habe ich auch
genug Ausreden, nicht mit der Abruestung anzufangen :-).
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl
I am a realistic optimist - that's why I appear to be slightly pessimistic
Technical Details
Message-ID: <4h2egg$t8r@news.BelWue.DE>
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl
From: kuehl@uzwil.informatik.uni-konstanz.de (Dietmar Kuehl)
Newsgroups: de.comp.lang.c++
Subject: C++ Buecher
Date: 28 Feb 1996 20:38:40 GMT
Organization: Fakultät für Mathematik und Informatik
Message-ID: <4h2egg$t8r@news.BelWue.DE>
Reply-To: dietmar.kuehl@uni-konstanz.de
NNTP-Posting-Host: uzwil.informatik.uni-konstanz.de
X-Newsreader: TIN [version 1.2 PL2]