|
|||||
C:
Recommended Reading
Resources
for further study.
815
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++
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
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++
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
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++
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
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++
Table of Contents:
|
|||||