I have programmed in C++ for 20 years. Every time I have ventured into other languages, either lured by their syntactic simplicity or design elegance, I have lived to regret it.

The experience could be summarized in the following phases.

- An exciting honeymoon with the new language’s elegance.
- A great deal of excitement as one discovers the language’s capabilities.
- A fun time writing simple applications.
- An unexpected rise in frustration due to performance degradation, oversimplified user interface and/or gratuitous complexity.
- Return to C++.

The experience is definitely not universal. I talk to my fellow programmers at conferences and whenever I have a chance. Some programmers are so put off by C++’s quirks that they swear they will never use it again. However, my experience is common among programmers who have a strong desire to solve extremely complex problems without sacrificing performance. Without trying to exclude anyone from this category I’d say that those people are commonly referred as system programmers. They use abstraction judiciously and are able to debug in assembly mode. They derive an indescribable pleasure from their work. With regards to CLR, they acknowledge its benefits but are annoyed by the implications of managed code; they like the banana until they see the size of the gorilla attached to it.

Looking at the future of C++, I believe that its greatest asset is that it can be extended into a syntactical continuum. The extension began when classes were added to C without penalizing the applications; it continued with templates, ATL, and now with managed classes. The expressiveness of C++ is unique and should be preserved until its benefits are negligible, probably sometime in the next century.

With regards to Microsoft, I would ask the internal C++ community to be clearer about the future of the language. From the outside it appears that Microsoft is abandoning C++ in favor of C#. We hear from Microsoft that this is not the case but the fact is that the new documentation in MSDN is written for managed languages only. The pages which were written for unmanaged C++ are being quietly removed or replaced by their managed version. This may make sense for general applications but not for systems and COM programming.

The most successful Microsoft applications are written in unmanaged C++. As far as I know C# has had some marginal success but nothing comparable to Windows or Office. I don’t know what the reason is. I’d say that users love responsive applications. In my experience, responsiveness is the first thing that goes out the window in complex applications written in managed languages.

Bill Serra