204 C++
Comparing C++ to COBOL is unfair to COBOL, which actually was a
marvelous feat of engineering, given the technology of its day. The only
marvelous thing about C++ is that anyone manages to get any work done in
it at all. Fortunately, most good programmers know that they can avoid
C++ by writing largely in C, steering clear of most of the ridiculous fea-
tures that they’ll probably never understand anyway. Usually, this means
writing their own non-object-oriented tools to get just the features they
need. Of course, this means their code will be idiosyncratic, incompatible,
and impossible to understand or reuse. But a thin veneer of C++ here and
there is just enough to fool managers into approving their projects.
Companies that are now desperate to rid themselves of the tangled, unread-
able, patchwork messes of COBOL legacy code are in for a nasty shock.
The ones who have already switched to C++ are only just starting to realize
that the payoffs just aren’t there. Of course, it’s already too late. The seeds
of software disasters for decades to come have already been planted and
well fertilized.
The Assembly Language of
Object-Oriented Programming
There’s nothing high-level about C++. To see why, let us look at the prop-
erties of a true high-level language:
- Elegance: there is a simple, easily understood relationship between
the notation used by a high-level language and the concepts
expressed. - Abstraction: each expression in a high-level language describes one
and only one concept. Concepts may be described independently and
combined freely. - Power: with a high-level language, any precise and complete
description of the desired behavior of a program may be expressed
straightforwardly in that language.
A high-level language lets programmers express solutions in a manner
appropriate to the problem. High-level programs are relatively easy to
maintain because their intent is clear. From one piece of high-level source
code, modern compilers can generate very efficient code for a wide variety
of platforms, so high-level code is naturally very portable and reusable.