When someone tell me that he know’s C++ and that he actually is a C++ programmer I believe him, but, this statement need some further explanation about which version of C++ the fellas is talking about!. Most C++ programmers knows C++03, eventually a little of C++11 and that’s all. Nowadays the tag C++ is used by everyone almost without understanding what that language is really about, things are changed rapidly in he past years and who believed to know C++ five or six years ago today might have problem listing which features modern C++ includes.
This means that if someone tell me that he knows C++ he might do not understand the meaning of his own words, and that is the result of the way C++ is used today, frequently organizations do not need to use the latest C++ features, the productivity might seems to increase to little with the latest version of the language and there’s no incentive in being up to date with all the latest changes.
To be productive at the average job in the average project very little of what was added from C++11 upward is needed, to use more advanced features or to be able to write quality code with modern C++ much more energy on design must be spent, and that is true only assuming that the organization has enough people knowing what modern C++ is able to do, and that might be a problem. I’m not saying here that modern C++ has nothing to offer, what I’m saying here is that to truly benefit from modern C++ much more quality programming over quantity programming is needed, that’s not corporate-friendly, I would say.
So coming back to the original statement which opened this post, do he know C++? Sort of. Have he lied with that bold statement about knowing C++? Probably not.
Many of the things we’re getting in C++17 looks for the most just nice additions, if you haven’t notice that, C++ has got many not really striking updates with the past releases. I do not mean that they were not important or not solving real problems, what I’m telling you is that those features are for the most part related to very specific areas which are not necessary useful for the average programmer or average project.
Many new features allows the developer to solve design and programming problems in an elegant way, a non elegant solution was available also before those features, so why an organization shall adopt those changes? Why shall train people on new techniques, change tool chains and who know what else, just to have an elegant solution to some already solvable problems?
Well, that’s a good question I think. For many big organization the game is not worth the candle and for many programmers learning what new features modern C++ include is not worth the time, after all who’s going to pay you for the time spent on learning? In many cases, nobody. But there are organizations for which continuous development of people and technology is a key principle, those are the places where there’s an attempt to introduce modern C++ or in general modern technologies and techniques, where people discuss about how to solve their problems in an elegant way.
C++03 with a little of C++11 is all that most organization needs, this is what most of C++ programmers know.
Many project have limitation for what concern the possibility to upgrade the used compiler in order to follow up the standard changes, that’s especially true for large projects and big companies. Many projects have no possibility at all to upgrade their compiler nor to move to a different product which support newer C++ features, additionally there’s a certain resiliency to changes when things are pretty much working, why moving to C++11 or C++14 when polymorphism, templates &c are already available in the old tool chain with the old C++?
This take away most of the people from learning what’s new in C++, I would say that modern C++ do not include only new language mechanism but most importantly new programming paradigms, idioms &c. And learning those things required a little more of effort than just getting familiar with a new keyword.
How well do you know C++?