It's Friday and I promised to turn the heat up in the kitchen again and
stir the possums. The text below is pasted from my latest Blog Post
<https://gfkeogh.blogspot.com/2022/06/c-stupidity-and-delusion.html>. I
can't apologise for what I say, I'm really angry about this -- *Greg Keogh*

_______________________

C++ Stupidity and Delusion

I recently returned to writing C++ after a 17-year gap and I have concluded
that C++ has become the stupidest language in contemporary common use and
fans of the language are living in some form of mass delusional insanity.

When I wrote C++ from about 1993 to 2003 it was basically "C with Classes"
and it claimed to guide you away from C spaghetti code into the superior
and trendy OOP world of software development. That claim was generally
fulfilled, but I often found myself creating classes that didn't need to
exist, and there was always the risk of creating "spaghetti classes". *It's
worth noting that opinions of OOP have not aged well and web searches for
"OOP sucks" or "OOP is bad" will produce some withering criticism.*

Upon returning to C++ after a long absence, I am shocked and angered by
what I have found. Several major enhancements over the decades have added
so many features to the language with so much syntax that it looks like an
unstoppable academic research project that went out of control and became a
joke. And ironically, the community using the language don't seem to
realise they're part of the joke.

I have recently watched lots of videos about C++, and the ones taken at
conventions are the most worrying because people like Bjarne and Herb come
on stage and are cheered like heroes by an audience that uncritically
drools over upcoming C++ features that are discussed in great detail. What
makes me both angry and incredulous is that most of the recently added and
upcoming C++ features are either making the language more and more complex,
or they are features that have been built-in to other popular programming
languages for a lifetime.

Languages like Java and C# have had parallelism, reflection, networking
support, UI designers, modules and much more for decades, but here we are
in the far distant science fiction future of 2022 and the C++ committees
are only now proposing to add these features that are vital for software
development. C++ is so far behind the ecosystem of other modern languages
that it's another joke they don't get, and they continue to blindly cram
the language with more libraries and syntax stolen from other languages to
try and keep it up to date with its modern contemporaries.

Writing C++ is so staggeringly complex that I need cheat-sheets always
open, and sometimes I must Google search on how to write every line of code
correctly. As a result, my C++ coding speed often hovers at around 10 to 20
lines of code per hour. It took me 3 solid days of hair-tearing suffering
to find a library that made REST web service calls, compile it, and make it
work. A colleague took two days to get a zip library working and at one
point he said, "lucky I don't live near a cliff". Both of those tasks could
be coded in a few lines of a modern language in less than a minute.

Have a look at the Working Draft <https://eel.is/c++draft/> or the C++
Reference <https://en.cppreference.com/> to get a feel for the astonishing
complexity of C++. There are countless videos online as well that discuss
all of the frightening traps and tricks of C++ coding and how to use the
huge list of language features correctly (see Jason Turner's videos
<https://www.youtube.com/results?search_query=C%2B%2B+Jason+Turner>). The
complexity of C++ creates a huge learning hurdle for even the most skilled
developer who could require up to a year of intensive experience to become
an expert.

C++ doesn't have a public library system (like packages
<https://www.nuget.org/> or crates <https://crates.io/>), the error
messages are beyond mortal comprehension, you can't tell which language
features are "safe" to use on your platform, everyone argues about the best
coding patterns, and most sample code won't compile. In my words (which can
often be heard shouted from the other end of the house) … "Everything
f***ing doesn't work!!". In C++, everything is as ridiculously cryptic and
difficult as it can possibly be. I often joke that writing C++ is harder
than building an atomic clock.

The C++ fanbase brags about how widespread its usage is and how many
diverse and performance critical systems depend upon it, but I think this
is just a historical hangover because it grew out of the popularity of C
back when there were no alternatives. I saw C++ become trendy and cool back
in the 1990s and it developed a kind of aura or mystique about it, mainly
because it was so complex and intimidating to average developers of the
time. If you told people you were writing C++ you could often see reverent
"Oh you're a *real *programmer" looks on their faces. C++ just happened to
arrive at the right time to fill a void and I think the C++ community is
still living in the 1990s.

The other C++ brag is about how it is "close to the metal" and can produce
apps with unequalled performance. C++ continues to ride high on its
performance claims, but it's become an urban legend that's no longer a
compelling argument. Recent research by my own colleagues with nearly
identical cross-tabulation libraries written in C# and C++ finds that the
C++ library only performs slightly better when very large amounts of data
are being processed, which results in very large in-memory tables.

Even if optimised C++ does produce more performant native binaries, who
needs that? Typical business apps are not performance critical and writing
them quickly in C#, Swift, Java or Python will save immeasurable money and
suffering. Maybe C++ is vital in creating database engines, embedded
systems or niche scientific applications, but in the last 15 years I have
never met a single living developer who works in any of those industries
and needs to expend enormous effort to squeeze out top performance. You
would have to be out of your mind to consider using C++ to write a desktop
app, or a background service, or a web service for business use in 2022. If
you asked me to write a Windows desktop app or web service in C++, it would
take at least 20 times longer than writing it in C#.

In summary, I will reiterate without embarrassment that C++ is the most
utterly stupid programming language in popular use, it's getting stupider,
and its community is living in a world of delusion.

C++ should be deprecated now and go into maintenance mode.

One would normally recommend that all development effort be channelled into
designing a modern replacement for C++, but what's the point, because
robust and respected alternatives are already available.

Bjarne often talks about the "ideal C++" and how it will never stop
evolving. By the time it reaches his "ideal" it will be extinct.

*June 2022*

Reply via email to