Article View: de.comp.lang.c++
Article #1705C++ Buecher
From: Dietmar Kuehl
Date: Wed, 28 Feb 1996 20:38
Date: Wed, 28 Feb 1996 20:38
259 lines
14985 bytes
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!kuehlShow 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]