I
clawed my way into C++ from exactly the same position as I expect the readers
of this book will: As a C programmer with a very no-nonsense, nuts-and-bolts
attitude about programming. Worse, my background and experience was in
hardware-level embedded programming, where C has often been considered a
high-level language and an inefficient overkill for pushing bits around. I
discovered later that I wasn’t even a very good C programmer, hiding my
ignorance of structures,
malloc( )
&
free( ),
setjmp( )
&
longjmp( ),
and other “sophisticated” concepts, scuttling away in shame when
the subjects came up in conversation rather than reaching out for new knowledge.
When
I began my struggle to understand C++, the only decent book was
Stroustrup’s self-professed “expert’s guide,
[1]
” so I was left to simplify the basic concepts on my own. This resulted
in my first C++ book,
[2]
which was essentially a brain dump of my experience. That was designed as a
reader’s guide, to bring programmers into C and C++ at the same time.
Both editions
[3]
of the book garnered an enthusiastic response and I still feel it is a valuable
resource.
At
about the same time that
Using
C++
came out, I began teaching the language. Teaching C++ has become my profession;
I’ve seen nodding heads, blank faces, and puzzled expressions in
audiences all over the world since 1989. As I began giving in-house training
with smaller groups of people, I discovered something during the exercises.
Even those people who were smiling and nodding were confused about many issues.
I found out, by chairing the C++ track at the Software Development Conference
for the last three years, that I and other speakers tended to give the typical
audience too many topics, too fast. So eventually, through both variety in the
audience level and the way that I presented the material, I would end up losing
some portion of the audience. Maybe it’s asking too much, but because I
am one of those people resistant to traditional lecturing (and for most people,
I believe, such resistance results from boredom), I wanted to try to keep
everyone up to speed.
For
a time, I was creating a number of different presentations in fairly short
order. Thus, I ended up learning by experiment and iteration (a technique that
also works well in C++ program design). Eventually I developed a course using
everything I had learned from my teaching experience, one I would be happy
giving for a long time. It tackles the learning problem in discrete,
easy-to-digest steps and for a hands-on seminar (the ideal learning situation),
there are exercises following each of the short lessons.
This
book developed over the course of two
years,
and the material in this book has been road-tested in many forms in many
different seminars. The feedback that I’ve gotten from each seminar has
helped me change and refocus the material until I feel it works well as a
teaching medium. But it isn’t just a seminar handout – I tried to
pack as much information as I could within these pages, and structure it to
draw you through, onto the next subject. More than anything, the book is
designed to serve the solitary reader, struggling with a new programming
language.
[1]
Bjarne Stroustrup,
The
C++ Programming Language
,
Addison-Wesley, 1986 (first edition).