It’s been almost 4 years since I last programmed professionally with C++. C++ was my language of choice from 1994 through the end of 2000. It is a language that, once upon a time, I knew REALLY well. How well? I could read template errors and code the fix based on the build output-if you are a .NET developer, that’s kind of hard to do. Since then, I’ve done a lot of development with three languages: VB.NET, C#, and F#. Most recently, I was doing my hobbyist development in F#. I was impressed by the incremental boost in development productivity in F# over C#. The productivity boost at first was just noticeable and has recently become something where I can express F# algorithms in significantly less time that the C# equivalent.
Since mid November 2009, I started using C++ because a hobby project I wanted to work on required it. The project is a .NET profiler, and you can’t write a .NET profiler in .NET-you have to go to an unmanaged language. I noticed that I’m expressing C++ code at about the same rate as in F# and C#. At first, I was frustrated at the amount of functionality I could code in a few hours of C++ programming versus the same time slice in C#/F#. After talking to some friends, I was reminded that this is a thing that most people know but few people experience: each individual writes code at their own pace. Once they reach a level of expertise across 2 or more languages, they will write more functionality in the language that offers a higher level of abstraction. Unfortunately, not all languages can be used in all situations. The highest level of abstraction I can use for my profiler is C++.
If you do nothing else this year, learn a functional language to compliment the work you do in C#, VB.NET, Java, or C++. F#, Haskell, Clojure, Scala, and LISP all await to increase the amount of functionality you deliver every day.