ZeePedia

C: Recommended Reading:Depth & dark corners, Analysis & design

<< B: Programming Guidelines
Index >>
img
C: Recommended Reading
Resources for further study.
815
img
C
Thinking in C: Foundations for Java & C++ Chuck Allison (a
, by
MindView, Inc. Seminar-on-CD ROM, ©2000, bound into the back
of this book and also available at ). This is a
course including lectures and slides in the foundations of the C
Language to prepare you to learn Java or C++. This is not an
exhaustive course in C; only the necessities for moving on to the
other languages are included. Additional language-specific sections
introduce features for the C++ or Java programmer-to-be.
Recommended prerequisite: some experience with a high-level
programming language, such as Pascal, BASIC, Fortran, or LISP
(it's possible to struggle through the CD without this background,
but the course isn't designed to be an introduction to the basics of
programming).
General C++
The C++ Programming Language,rd edition by Bjarne
3
,
Stroustrup (Addison-Wesley 1997). To some degree, the goal of the
book that you're currently holding is to allow you to use Bjarne's
book as a reference. Since his book contains the description of the
language by the author of that language, it's typically the place
where you'll go to resolve any uncertainties about what C++ is or
isn't supposed to do. When you get the knack of the language and
are ready to get serious, you'll need it.
C++ Primer, 3 Edition by Stanley Lippman and Josee Lajoie
,
rd
(Addison-Wesley 1998). Not that much of a primer anymore; it's
evolved into a thick book filled with lots of detail, and the one that I
reach for along with Stroustrup's when trying to resolve an issue.
Thinking in C++ should provide a basis for understanding the C++
Primer as well as Stroustrup's book.
816
Thinking in C++
img
C & C++ Code Capsulesby Chuck Allison (Prentice-Hall, 1998).
,
This book assumes that you already know C and C++, and covers
some of the issues that you may be rusty on, or that you may not
have gotten right the first time. This book fills in C gaps as well as
C++ gaps.
The C++ StandardThis is the document that the committee
.
worked so hard on for all those years. This is not free,
unfortunately. But at least you can buy the electronic form in PDF
for only $18 at www.cssinfo.com.
My own list of books
Listed in order of publication. Not all of these are currently
available.
Computer Interfacing with Pascal & (Self-published via the
C
Eisys imprint, 1988. Only available via ). An
introduction to electronics from back when CP/M was still king
and DOS was an upstart. I used high-level languages and often the
parallel port of the computer to drive various electronic projects.
Adapted from my columns in the first and best magazine I wrote
for, Micro Cornucopia (To paraphrase Larry O'Brien, long-time
editor of Software Development Magazine: the best computer
magazine ever published ­ they even had plans for building a robot
in a flower pot!) Alas, Micro C became lost long before the Internet
appeared. Creating this book was an extremely satisfying
publishing experience.
Using C++(Osborne/McGraw-Hill 1989). One of the first books
out on C++. This is out of print and replaced by its second edition,
the renamed C++ Inside & Out
.
C++ Inside & Out
(Osborne/McGraw-Hill 1993). As noted,
actually the 2nd edition of Using C++ The C++ in this book is
.
reasonably accurate, but it's circa 1992 and Thinking in C++ is
C: Recommended
817
img
intended to replace it. You can find out more about this book and
download the source code at .
Thinking in C++, st edition(Prentice-Hall 1995).
1
Black Belt C++, the Master's Collection
, Bruce Eckel, editor (M&T
Books 1994). Out of print. A collection of chapters by various C++
luminaries based on their presentations in the C++ track at the
Software Development Conference, which I chaired. The cover on
this book stimulated me to gain control over all future cover
designs.
Thinking in Java2nd edition (Prentice-Hall, 2000). The first edition
,
of this book won the Software Development Magazine Productivity
Award and the Java Developer's Journal Editor's Choice Award in
1999. Downloadable from .
Depth & dark corners
These books go more deeply into language topics, and help you
avoid the typical pitfalls inherent in developing C++ programs.
Effective C++(2nd Edition, Addison-Wesley 1998) and More
Effective C++(Addison-Wesley 1996), by Scott Meyers. The classic,
must-have texts for serious problem-solving and code design in
C++. I've tried to capture and express many of the concepts from
these books in Thinking in C++, but I don't fool myself in thinking
that I've succeeded. If you spend any serious time with C++ you'll
end up with these books. Also available on CD ROM.
Ruminations on C++by Andrew Koenig and Barbara Moo
,
(Addison-Wesley, 1996). Andrew worked directly with Stroustrup
on many aspects of the C++ language and is an extremely reliable
authority. I've also found the incisiveness of his insights to be
refreshing, and have learned much from him, both in print and in
person, over the years.
818
Thinking in C++
img
Large-Scale C++ Software Design John Lakos (Addison-
, by
Wesley, 1996). Covers issues and answers questions you will
encounter during the creation of big projects, but often smaller ones
as well.
C++ Gems Stan Lippman, editor (SIGS publications, 1996). A
,
selection of articles from The C++ Report.
The Design & Evolution of C++  Bjarne Stroustrup (Addison-
, by
Wesley 1994). Insights from the inventor of C++ about why he
made various design decisions. Not essential, but interesting.
Analysis & design
Extreme Programming Explained Kent Beck (Addison-Wesley
by
2000). I love this book. Yes, I tend to take a radical approach to
things but I've always felt that there could be a much different,
much better program development process, and I think XP comes
pretty darn close. The only book that has had a similar impact on
me was PeopleWare (described below), which talks primarily about
the environment and dealing with corporate culture. Extreme
Programming Explained talks about programming, and turns most
things, even recent "findings," on their ear. They even go so far as
to say that pictures are OK as long as you don't spend too much
time on them and are willing to throw them away. (You'll notice
that this book does not have the "UML stamp of approval" on its
cover.) I could see deciding whether to work for a company based
solely on whether they used XP. Small book, small chapters,
effortless to read, exciting to think about. You start imagining
yourself working in such an atmosphere and it brings visions of a
whole new world.
UML Distilledby Martin Fowler (2nd edition, Addison-Wesley,
2000). When you first encounter UML, it is daunting because there
are so many diagrams and details. According to Fowler, most of
this stuff is unnecessary so he cuts through to the essentials. For
C: Recommended
819
img
most projects, you only need to know a few diagramming tools,
and Fowler's goal is to come up with a good design rather than
worry about all the artifacts of getting there. A nice, thin, readable
book; the first one you should get if you need to understand UML.
The Unified Software Development Process Ivar Jacobsen,
by
Grady Booch, and James Rumbaugh (Addison-Wesley 1999). I went
in fully prepared to dislike this book. It seemed to have all the
makings of a boring college text. I was pleasantly surprised ­ only
pockets of the book contain explanations that seem as if those
concepts aren't clear to the authors. The bulk of the book is not only
clear, but enjoyable. And best of all, the process makes a lot of
practical sense. It's not Extreme Programming (and does not have
their clarity about testing) but it's also part of the UML juggernaut
­ even if you can't get XP adopted, most people have climbed
aboard the "UML is good" bandwagon (regardless of their actual
level of experience with it) and so you can probably get it adopted.
I think this book should be the flagship of UML, and the one you
can read after Fowler's UML Distilled when you want more detail.
Before you choose any method, it's helpful to gain perspective from
those who are not trying to sell one. It's easy to adopt a method
without really understanding what you want out of it or what it
will do for you. Others are using it, which seems a compelling
reason. However, humans have a strange little psychological quirk:
If they want to believe something will solve their problems, they'll
try it. (This is experimentation, which is good.) But if it doesn't
solve their problems, they may redouble their efforts and begin to
announce loudly what a great thing they've discovered. (This is
denial, which is not good.) The assumption here may be that if you
can get other people in the same boat, you won't be lonely, even if
it's going nowhere (or sinking).
This is not to suggest that all methodologies go nowhere, but that
you should be armed to the teeth with mental tools that help you
stay in experimentation mode ("It's not working; let's try
820
Thinking in C++
img
something else") and out of denial mode ("No, that's not really a
problem. Everything's wonderful, we don't need to change"). I
think the following books, read before you choose a method, will
provide you with these tools.
Software Creativityby Robert Glass (Prentice-Hall, 1995). This is
,
the best book I've seen that discusses perspective on the whole
methodology issue. It's a collection of short essays and papers that
Glass has written and sometimes acquired (P.J. Plauger is one
contributor), reflecting his many years of thinking and study on the
subject. They're entertaining and only long enough to say what's
necessary; he doesn't ramble and bore you. He's not just blowing
smoke, either; there are hundreds of references to other papers and
studies. All programmers and managers should read this book
before wading into the methodology mire.
Software Runaways: Monumental Software Disasters Robert
, by
Glass (Prentice-Hall 1997). The great thing about this book is that it
brings to the forefront what we don't talk about: how many
projects not only fail, but fail spectacularly. I find that most of us
still think "That can't happen to me" (or "That can't happen again")
and I think this puts us at a disadvantage. By keeping in mind that
things can always go wrong, you're in a much better position to
make them go right.
Object Lessonsby Tom Love (SIGS Books, 1993). Another good
"perspective" book.
Peopleware by Tom Demarco and Timothy Lister (Dorset House,
,
2nd edition 1999). Although they have backgrounds in software
development, this book is about projects and teams in general. But
the focus is on the people and their needs rather than the technology
and its needs. They talk about creating an environment where
people will be happy and productive, rather than deciding what
rules those people should follow to be adequate components of a
machine. This latter attitude, I think, is the biggest contributor to
C: Recommended
821
img
programmers smiling and nodding when XYZ method is adopted
and then quietly doing whatever they've always done.
Complexity by M. Mitchell Waldrop (Simon & Schuster, 1992).
,
This chronicles the coming together of a group of scientists from
different disciplines in Santa Fe, New Mexico, to discuss real
problems that the individual disciplines couldn't solve (the stock
market in economics, the initial formation of life in biology, why
people do what they do in sociology, etc.). By crossing physics,
economics, chemistry, math, computer science, sociology, and
others, a multidisciplinary approach to these problems is
developing. But more importantly, a different way of thinking about
these ultra-complex problems is emerging: Away from
mathematical determinism and the illusion that you can write an
equation that predicts all behavior and toward first observing and
looking for a pattern and trying to emulate that pattern by any
means possible. (The book chronicles, for example, the emergence
of genetic algorithms.) This kind of thinking, I believe, is useful as
we observe ways to manage more and more complex software
projects.
822
Thinking in C++