REVIEW - Problem Solving, Abstraction and Design Using C++

Title:

Problem Solving, Abstraction and Design Using C++

Author:

Frank Friedman

ISBN:

0201300028

Publisher:

Addison-Wesley Publishing Company (1997)

Pages:

768pp

Reviewer:

Burkhard Kloss

Reviewed:

April 1998

Rating:

★★☆☆☆

Unlike most introductions to C++, this is specifically an academic textbook aimed at undergraduates with little or no programming experience. As a result, the scope of the book is wider than you might expect, though that is not necessarily a bad thing. The book assumes very little about the reader and is a generalintroduction to programming using C++ as a first language.

In good textbook style, there are review questions and exercises of varying levels at the end of each chapter. Answers to some of the questions are provided in an appendix. Lecturers can order an Instructor Manual and additional material is available online.

The C++ seems reasonably up to date; for example, the standard string class is used everywhere (except in the inevitable and useful,

simple_string
example).
const
is used instead of
#defines
, but sadly
const
member functions are omitted.

Sadly, the book contains its share of horrors and nasty typos:

void main (void), #INCLUDE, COUT
and other such nonsense appear more often than they should. Some examples mix the user interface into the program logic. This sets an extremely bad example and such practices should really be anathema to authors professing to teach Software Engineering as well as programming.

Still, the breadth of topics is impressive: an overview of computing and programming, an overview of C++, top-down design with functional decomposition and ADTs, basic control structures, files, basic data types, introduction to Software Engineering, user defined types and 'data modelling', recursion and dynamic data structures. In other words, more or less all the things that a basic course should cover. I was pleasantly surprised to see a section on professional ethics, as well as pre- and post-conditions and invariants being mentioned. I also like the tips, tricks and pitfalls that are highlighted throughout the book.

The appendices should be quite useful for a beginner, especially the table of selected library facilities and the operator precedence table.

Still, I would hesitate to wholeheartedly recommend this book as a course text, though this may change if the next edition is revised and the few (but nasty) problems are ironed out. Most of them seem, as so often, to be more due to lax editing than lack of knowledge. If, as a lecturer, you are looking for a reasonable introduction to programming, you should at least consider this book. At the very least it will give you a wealth of material and you may find it appropriate for your course after all.

As an experienced programmer converting to C++, you should probably give it a miss because it contains too much material that is not relevant to you. However, if you are relatively new to computing, I think you will find a lot of useful things in this book. It won't 'just' teach you C++, but after all, that's not all you need to learn to become a C++ programmer!


Book cover image courtesy of Open Library.