TechRepublic member Oleg F (an experienced C++ developer) asked for my thoughts on the "present and future" of C++. In addition, he wanted information on how C++ fits into the .NET universe, Web development, and cloud computing. Below is my response.
I believe the days of C++ as a general purpose programming language are quickly ending for most developers. There are still lots of great uses for C++, particularly for OS-level work, low-level work (embedded devices, device drivers, etc.), certain high-performance applications, and applications where the overhead of a system like .NET or Java would be too heavy (like an office suite). Some developers will continue to use C++ for applications that other, less complex languages can handle as well. But for the typical developer, C++ is a big headache for minimal gain.
The performance issues that most developers face are not the kinds of issues that moving to native code will resolve; once you take performance out of the equation, C++ is a fairly unattractive option for application development in most cases.
The handful of C++ developers that I've talked to say using C++ in the .NET managed environment is not particularly attractive to them; this takes away much of the opportunity to use it in a Web development capacity, unless you want to use it in the CGI model. There are good things about CGI (less overhead, simple conceptual model) and bad things about CGI (your application has to be "aware" of many more low-level tasks). From what I've heard, under the .NET CLR, C++ loses its speed, as well as many of the things that make C++ useful.
This is not to say that C++ is going away any time soon. I see C++ joining the ranks of COBOL and FORTRAN as a legacy language with a massive installation base and a need for people to maintain/extend existing applications for more than 50 years. In addition, a number of new development projects will be started in it for a variety of reasons (familiarity, library support, tradition/habit, cultural, etc.). I also suspect that it will pick up a reputation as a "dead" language (again, like COBOL), due more to a lack of buzz and hype than actual non-usage (also like COBOL).
I don't want to make the future for C++ sound dismal; if anything, I think there is great potential for C++ developers to do quite nicely for themselves. If you're a C++ developer, I suggest that you stick with the language. Are the things you're working on flashy or get the same attention as Web applications in the mainstream publications? No. But with the current salary structures, I feel that experienced C++ developers will see very nice paychecks for some time. In addition, as the remaining C++ work is of higher difficulty and fewer people learn C++ (it isn't taught as frequently in colleges these days), I expect C++ developers to have more job security and better compensation than .NET or Java developers over the long run.
While C++ in Web development is not likely to become mainstream any time soon and desktop application development in C++ becomes less common, I think there is a lot of upside opportunity for C++ in certain aspects of cloud computing. For some projects (think of ones that are well suited to supercomputers), the cloud offers C++ developers a way to get the same benefits of grid computing but with much more flexibility. There is a lot of overlap between those projects and the kinds of projects for which developers regularly use C++. As a result, I think cloud computing will replace or supplement grids and supercomputers in many projects and will provide an excellent opportunity to see C++ used in new and innovative ways.
Keep in mind that much of this analysis is focused on the Windows world. From what I see, the *Nix development community is still very C/C++ oriented. C++ developers who are concerned about dwindling opportunities in Windows should definitely take a look at *Nix development.
I believe that C++ will slowly fade into the background, but it will neither die nor will it ever become unimportant. While most developers I know have never touched C++ in a real-world environment, many developers would benefit from learning it, if only to gain some appreciation of various languages, including Java, .NET, and Ruby.
If you have a programming question, e-mail it to me by clicking the Contact link at the top of the Programming and Development blog header.
J.JaDisclosure of Justin's industry affiliations: Justin James has a working arrangement with Microsoft to write an article for MSDN Magazine. He also has a contract with Spiceworks to write product buying guides.
---------------------------------------------------------------------------------------Get weekly development tips in your inbox Keep your developer skills sharp by signing up for TechRepublic's free Web Developer newsletter, delivered each Tuesday. Automatically subscribe today!
Justin James is the Lead Architect for Conigent.