

Author: Qianshan
Currently, programmers have many choices when it comes to programming languages: Java, Python, C, Rust… To put it bluntly, you don’t need to learn C++ to become a programmer.
However, the fact that C++ has thrived for over forty years must have its reasons, which is why countless intelligent, diligent, or skeptical individuals continue to choose the challenge of C++.
As we all know, C++ is difficult. Therefore, some people will earnestly advise newcomers: cherish your life, stay away from C++. Others return after ten years of diligent study, still modestly mentioning, “I have a certain foundation in C++.” Thus, most of the time, those who claim to “understand C++” are likely just “understanding kings.”

Image source: quickmeme

No one can fully understand C++, not even the father of C++.
As early as 2010, Joomla developer Louis Brandy published an article on his personal blog titled “Never Trust Programmers Who Claim to Understand C++.” Unexpectedly, this topic has recently gained traction on Reddit.
At that time, Brandy explained that programmers transitioning from C to C++ believe they understand the language because they can quickly become proficient in it. “They are lying. When a programmer continues to use C++, they will experience a valley of frustration, where they will come to accept the full complexity of the language.”

Image source: Louis Brandy’s blog
In Brandy’s diagram, we see that as learning deepens, more and more questions begin to arise for learners: confusing template error messages, somewhat too “magical” reference types, virtual destructors that are hard to use, poor exception specifications, static object initialization issues…
He mentioned that it is easy to discern the learning stage of a C++ programmer during an interview. “As long as you mention that C++ is an extremely large and complex language, those who have gone through the valley of despair can list 127 various small frustrations they encountered while studying this language.” In contrast, those who have not yet traversed the ‘valley of despair’ often hold a mysterious confidence, typically answering: ‘Yes, I think so. I mean, it’s like C with classes.'”
To this day, C++ has become even more of an all-encompassing behemoth. Brandy’s statement has sparked further discussion on Reddit.
Some believe that Brandy’s statement is biased. Because C++ is so vast, aside from personal interest or selling courses/books, no one would learn all of C++’s knowledge. The reality is often that learning is based on one’s own needs, focusing on a subset of knowledge.
Although they are both in the C++ domain, since everyone has different subsets of knowledge, this situation often arises in interviews: interviewers ask candidates to rate their C++ skill level on a scale of 1-10. If the self-rating is above 6, then it’s time to discuss details. Only by discussing details can one truly understand which part each person has mastered.

Image source: Reddit
This viewpoint has received much support from netizens. Many programmers with years of C++ development experience have come forward, stating, “Understanding how to use C++ does not mean understanding every detail of the language.”
Some candidly admitted: “Since 2004, I have used C++ as my primary language at work. But I still can’t say that I know it 100%. (Because within it) there are many intricate traps.”
Moreover, many advised: “No one truly ‘understands’C++, if you want to know whether a programmer’s words are valuable, ask them if they understandC++. If they confidently say ‘yes’, take everything else they say with a grain of salt. Unless you are talking to Bjarne Stroustrup.”
However, someone quickly responded: even the father of C++ has admitted that he is not omniscient about C++. According to legend, Bjarne Stroustrup rates his own C++ level as 7/10. He once mentioned that there might only be four people in the world who fully understand it, and he is not one of them.
In summary, the discussion clearly points out the high standards for C++ programmers, and almost no one questions the learning ability of C++ programmers for other languages.

SurpassingJava to Rank Third, Next Version Timeline Confirmed
C++, born in 1979, is indeed powerful, but it has also reached a mature age, hence the voices of decline have never ceased. We occasionally see statements like “C++ is outdated,” “How much longer can C++ survive?” and “Will C++ be replaced by XX language?”
Big names like Linus Torvalds have also criticized “the complexity of the C++ standard leads to too many unqualified users, making it easy to misuse and abuse language features.” He suggested using C directly for system programming, and for non-system programming, one should choose a language with garbage collection, as C++ features are basically useless and will only cause confusion.
In recent years, large companies like Microsoft have also supported Rust for memory safety reasons. Last year, Microsoft’s Azure CTO Mark Russinovich publicly called for stopping the creation of new projects in C and C++. In May this year, Microsoft revealed that it is rewriting the Windows 11 kernel based on Rust, partially replacing the previous C++, and it seems to be progressing well.
So is C++ really not viable? Not at all. According to the latest July programming language rankings released on TIOBE’s official website, C++ has surpassed Java to rank third, and the gap with the second-ranked C is only 0.76%.

Image source: TIOBE
It can be seen that C++ is still developing steadily, and there are even occasional signs of slight recovery. In this case, if someone still thinks this is a dying language, it inevitably raises suspicions of being “like a pig’s nose inserted into a green onion—pretending to be something it is not.”
So what has kept C++ thriving all these years? “Start small, clarify the basic principles, set clear long-term goals, and develop based on feedback from real-world usage.” The father of C++ said.
Stroustrup has stated: “From the very beginning, I knew that it was impossible to build the ideal language, so I had to aim for incremental development: improvement. Honestly, I don’t believe in the idea of a perfect language: what would qualify as perfect? For whom (is it perfect)?” To meet the ever-changing challenges, keeping up with the times is essential.
Looking back at the historical versions (C++ is named by its release year, following a three-year version cycle), we can identify several important milestones.
C++11: This version can be considered a milestone in the history of C++ development. C++11 introduced many features that fundamentally changed people’s traditional impression of C++, to the extent that some say C++ after this point no longer resembles C++. For instance, C++11 brought components of TR1, as well as move semantics, perfect forwarding, and variadic templates, but that’s not all. C++11 even provided a memory model as a basic thread foundation and a thread API.
C++20: This is also a major version, bringing larger updates than C++11. New features represented by the Big Four—Concepts, Ranges Library, Coroutines, and Modules—have brought many surprises.
Concepts allow you to write requirements for templates, revolutionizing the way we think about and write generic code; the new ranges library enables algorithms to be expressed directly on containers, using pipe symbols to compose algorithms and apply them to infinite data streams; coroutines allow asynchronous code to be written with synchronous syntax, making it a great tool for writing asynchronous code; modules will overcome the limitations of header files while promising faster compilation times and isolation of macros.
It is also due to the significant changes in C++20 that C++23 is destined to be a bug-fixing version for C++20. Coupled with the pandemic, many discussions about C++23 could only take place online, affecting efficiency, thus C++23 ultimately lacks T0-level features and is a medium-sized release. Notably, the ISO C++ standards committee recently held an online meeting to officially finalize the timeline for C++26 (details can be found in “Next Version Confirmed! New Actions for C++ Rescue!”), which is expected to be a medium/medium-large version.
In summary, you could say that C++ has become more “bloated” than before, or that it is not as vibrant as it was at its peak, since there are now too many language options. However, to say that it is on the verge of extinction is clearly subjective.

To Learn or Not to Learn, That Is the Question
At the beginning of this article, we mentioned that the threshold for C++ is extremely high, and mastering it is even more challenging. However, the latest trends show that C++ is still very much alive and has vast applications, so whether to learn or not, and whether to choose C++ as a technology stack, seems to be a question.
-
It’s Okay Not to Learn
First, it needs to be clarified that the current programming world is flourishing, and you can choose any language that suits you. After all, programming languages are just tools that programmers learn when needed. If Python suits you better, why must you choose C++?
-
If You Want to Learn, Clarify the Applicable Fields
Discussing languages without considering their applicable fields is always empty talk. How to choose a language often depends on what you are doing. “C++ has never been as popular as Java or JavaScript, but it shouldn’t be compared with them because each has its specialization. C++ is not suitable for quickly writing mediocre programs. It is designed for persistent systems that have runtime requirements and independence.” This is a viewpoint expressed by a developer in the C++ topic on Quora, which is quite to the point. In scenarios requiring extremely high performance and control, such as operating systems, game engines, embedded programs, etc., C++ undoubtedly takes the lead.
-
Be Prepared for the Difficulty
C++ is widely recognized as a difficult programming language to learn. Some humorously claim, “You can’t find anything simple in C++.” The so-called “X days to master” or “X course to master” clearly does not apply here.

Image source: Reddit
The online learning platform Springboard once compared “the five hardest programming languages to learn,” and C++ topped the list, surpassing Prolog and Haskell. The main reasons are:
-
It has a complex syntax to support multifunctionality.
-
It is a permissive language—you can do anything technically possible, even if it’s logically incorrect.
-
It is best learned by those who already have a foundation in C programming.
4. What Are the Additional Rewards of Mastering C++?
The author of the development framework Neutralinojs, Shalitha Suranga, once stated on his blog, “Learning C++ is a required course for all programmers aspiring to become experts in programming.” To this end, he listed several substantial rewards of learning C++.
It motivates you to learn the fundamentals of computer science. C++ provides a more advanced and user-friendly abstraction than C, but it encourages people to use pointers and manually manage memory like C. Additionally, the design of the C++ standard library emphasizes computer science concepts, performance, and flexibility, rather than merely focusing on ease of development.
Build lightweight, high-performance solutions. Most modern programming languages focus on hiding underlying technical details with pseudo-code-like syntax, giving little thought to performance, lightweight design, and flexibility. However, C++ can still generate lightweight binaries, making it the best choice for writing performance-oriented software systems.
Helps you learn other programming languages more quickly. C++ is a multi-paradigm, multifunctional programming language. In other words, you can set your own programming style and best practices while writing code in C++. Learning the C++ standard library and development patterns requires solid computer science knowledge and technical skills. Therefore, when you master C++, learning a new language often becomes much easier.
The best language for interacting with operating system APIs. Every operating system provides developers with a programmable interface for handling operating system-level operations. All these APIs expose C/C++-based interfaces because every operating system is written in C/C++.
Facilitates better technical decision-making. There are often multiple solutions to programming problems. C++ is complex and fast, but it allows programmers to have full control over program execution, optimizing code according to their preferences. Thus, you need to make technical decisions carefully, choosing the best C++ features for your needs based on your preferences.
Reference Links
https://www.tiobe.com/tiobe-index/
https://analyticsindiamag.com/dont-trust-a-programmer-who-knows-c/
http://modernescpp.com/index.php/c-23-the-next-c-standard
https://www.springboard.com/blog/software-engineering/top-programming-languages/
https://levelup.gitconnected.com/why-every-programmer-should-learn-c-during-their-careers-959e1bc2ea68

