Maybe I wonder if there is a long way for modern C++ to prevail as well-known easy-to-use design technique similarly to OOP. |
I'm not exactly sure what this means, but C++ has been through decades of use and development, and since it holds a position as the primary language in which most of the most ambitious applications are built, I can't say it has a long way to go to "prevail".
Ease of use, however, makes some sense when I recall all of the comparisons I've heard and read between C++ and various languages like Java, C#, Python, Visual Basic (the list is quite long).
I've always found myself reminded, as a result of those comparison, of a quote attributed to Einstein - "Keep it simple, but no simpler".
His was a caution against that tendency we all have to want simple methods and approaches, which occasionally threaten to oversimplify that which is, by it's very nature, not open to simplification. Einstein's own theory of relative was a kind of expansion on Newton, where the simpler method of Newton is still perfectly applicable to the kind of engineering and physical observations common to human experience, but entirely unsuficient to explain nature at a deeper level the way relativity did.
Some only need Newton's version. It works, it's simple, it ignores some facts but it does so in a context where they are not particularly relevant.
To that extent, after 40+ years of development behind me, I find that for those targets which require the kind of features found in C++ (and, in part, it's roots in C), virtually every other language I've "had to work in", for whatever reasons they do come up, simply can't compare well. When simplicity is a priority, it is likely not the kind of target which demands the performance and feature set found in C++.
If I were to contribute to the Linux kernel I'd have to work in C. That's Torvalds domain, and C is a requirement, and it is suitable. I could argue that C++ would be advantageous, and back that up with engineering data through experiment, but it would be of no use. Torvalds will never budge from that position.
C was purpose built as an assembler level language to write the UNIX operating system. By absorbing most of C into C++, Stroustrup designed a path for this language which still can address that level which gave C its historic position, while expanding the level of organization from which applications can be built.
While it can be used for simple targets, it really isn't that suitable for them. That isn't to say it would be inferior as a result, or as a choice of language, but that the language is capable of such deep and wide targets, it isn't always the best of first choice for simpler targets.
In various businesses, there are needs for custom applications, or simple applications (or both), which can be built by developers of lesser experience and knowledge. For them, a simpler language may be a better choice.
A good example of this is in scientific work. Many scientist, with PhD's and high reputations, are simply not interested in being programmers, but still require the use of a computer for research work. Many use Python for its simplicity, some use C# or Java for a better performance, but they have no patience, time or purpose in learning C++. I doubt there will ever be a time when C++ would be a suitable choice for them.
I sometimes wonder why many who do use C++ choose to do so, when their skills (and intent in development them) is moderate. C++ is used to engineer software of high ambition, like CAD engines, physical simulation systems (CAD + simulation = building machines in a computer for manufacture), game engines (more work than most realize), photo image editing systems, all of which have intensive demands on hardware. I find many want to use C++ for games, which is a good choice if their skills are up to that, or other simple applications. Some are more casual students, not serious enough to consider a path to engineering.
Many don't even think of software development as an engineering discipline (and it is, but only if approached that way for a reason).
An example of engineering in software is also the first example of a software engineer (the person who invented the discipline in engineering) - the computer software that was on the spacecraft that landed on the moon.
In other words, peoples lives depended on that software and hardware. No one trusts that to a casual author, not even in the late 60's.
Stroustrup has pointed to the reasonable assertion that C++ is cumbersome, requires a bit too much expertise...but he never claimed it was the best, or that it was supposed to be simple - though he agrees the language should support those ideals as is possible in the context.
That context brings in the original C, and it's purposes. It's actually the problem, if there is one. Languages without that baggage, like C# and Java, are less troublesome to the programmers, simpler to learn, and easier to use.
The cost of that, however, is how far one can reach. The level of performance, control, and suitability for the targets of the highest ambition. They can't do that.
So, for the foreseeable future, which could be many decades, there won't be just one or two languages. There will be at least 3 or 4 levels of languages, and C++ will likely always be toward that low/deep hardware/high performance level which requires some (toward the extreme) expertise, while there must be languages that are simpler and "safer" for lesser skilled hands in various industries or personal exploration.