Why C++ is back.

I love C++, too. It’s an amazing tool.

Six years ago I began my never-ending learning experience, programming. It started with an arcane toolkit called Jamagic (which was unfortunately discontinued). Jamagic’s scripting language, JamagicScript is an amalgamation of C++, Java, and multimedia wrappers that allow for simple games and “simulators” to be developed without extensive knowledge of math or programming—a perfect fit for an eager ten year-old. It wasn’t, at least for me. I soon grew tired of Jamagic primarily due to the abstract nature of it; I wanted to program, not point and click (albeit with some scripting).

This lead me to C, a succinct and pragmatic language—a perfect fit for me. I quickly picked up the ropes (memory management, pointer arithmetic, etc.). I started hammering out code. I could keep track of my piggy bank, or determine prime numbers! I felt amazing, because I was creating. As I became more adjusted to the intricacies of the language I picked up C++. Over the next three years I learned about the Win32 API and the underlying structures that made Windows. I mastered C++, or so I thought.

C++ is ever evolving (as is my knowledge of it1). The latest standard, C++11 definitely makes it easier to become proficient. Making it easier to learn might be a natural extension of that: smart pointers are an incredibly powerful abstraction that might help new programmers, lambdas make code more succinct thus more understandable, etc. With C++ becoming more accessible it is illogical to dissuade newcomers from learning C++, perhaps shameful:

  • Knowledge. Learning a craft or skill is hard, C++ especially so. It requires perseverance and courage—fundamental skills for success (especially as a founder) that a large portion of today’s youth lack. Learning C++ also results in heaps domain specific knowledge. The same goes for functional languages.

  • Hireability. As mentioned previously, extensive domain specific knowledge is acquired, and that knowledge is in heavy demand. Especially bit twiddling (which I assume pays better).

  • Portability. C# and Java require virtual machines, that immediately limits portability to supported platforms. Abstractions leak: threading is a great example of this (Go is an honourable mention here; it handles concurrency elegantly). Furthermore, embedded systems require C or a relative like C++, or Obj-C.

To summarize, more and more companies are relying on C and C++. Learning an in demand skill is a no-brainer, and with C++ becoming “easier” to learn we have produced a low-hanging fruit. Expect a resurgence.