In comp.lang.c++ Ian Collins said:
A one who works with and enjoys both languages, the statement "choose
the simplicity of C over the complexity of C++" is one I have trouble
with. C is undoubtedly a simpler language, but the the solutions to
many day to day problems are undoubtedly simpler in C++.
So the choice is often "do I want the simple solution in a more complex
language, or the more complex solution in a simple language?".
That's also the problem I find with the "argument from simplicity",
as one could call it.
When talking about C, making the simplicity argument is basically a
category error. The argument is trying to appeal to the notion that
simpler higher-level languages (such as Lisp) are generally considered
better than overly complex languages. In those languages it is often
so that the same thing can be expressed in a much simpler and more
brief manner, and the result is much "leaner and cleaner" code than
in overly complicated languages. (For example the language specification
of Lisp is relatively short, yet the language itself is incredibly
expressive and powerful.)
In other words, a simple language helps writing simple programs (that
are nevertheless very expressive.)
However, in the case of C the "simplicity" is not actually a factor
that helps writing simple programs. On the contrary, the "simplicity"
of the language is actually a limiting factor. Rather than help, it
impedes the writing of simple programs, requiring many of even the
simplest tasks to have complex and error-prone implementations. It
often requires following strict coding conventions to avoid mistakes,
coding conventions that are completely unnecessary in truly simple
languages. Truly simple languages allow the programmer to concentrate
purely on the task at hand, without having to pay any attention to such
trivial and inconsequential matters as memory management and such.
C isn't that kind of language. In C the "simplicity" forces the
programmer to write complex programs that need to constantly be careful
about things that should normally be non-issues.
This doesn't mean that C++ is a simple language in this regard.
However, C++ is a lot *better* in this regard than C. Yes, there are
coding conventions that need to be followed eg. because of memory
management reasons, but those conventions are simpler and easier to
follow, and much of the work is done automatically by the compiler.
C++ also offers many tools (in both native syntax and in the form of
the standard library) that makes many, many tasks a lot easier and
simpler than in C.
The typical arguments that C++ is so much larger and more complex
than C, and that it requires significantly more learning, ring quite
hollow to the experienced C++ programmer. Why would it matter to me
in the least bit if the language is large and requires a lot of
learning? That's completely inconsequential to me. It may be relevant
if we were talking about what a newbie programmer should learn, but
it's completely irrelevant to me. I know how to use the language
efficiently, and when given the choice between C or C++, there's just
no choice to make, because it's obvious. I choose the one that allows
me to implement the task at hand more easily, ie. C++.