I am Leaving C++ and Wall Street!!!

Truth Hacker
6 min readMar 5, 2016

--

From the moment I started my professional career I jumped into the C++ world head first, it was one of the hardest programming languages to learn back in the 90's, the concepts were all new. The two real choices you had were C or C++, sure there was Fortran, Pascal, LISP, and Visual Basic. Around this time C was the mainstream programming language and I remember the great hate for C++ by people in the C camp, they just didn’t get C++, they didn’t get object oriented programming and didn’t want to even try. People with closed mind hate change, this is what I observed in my early days.

Back then Borland was huge and the only game in town for C++. I remember my days and nights with Turbo C++ and OWL the “Object Window Library” that I used to develop Window GUI applications. I was really into GUI programming, it was so immediate and visual, I got excited seeing the results of my effort. I spent countless hours designing dialog boxes, and playing with all the other GUI widgets.

The early effort to understand OOP/OOD were slow and painful, but it was the way forward into a rich and exciting world as a programmer. Then something happen, Microsoft Visual C++ came out and we all laughed because for the most part it just sucked. Microsoft went to win the war with Borland and started to improve Visual C++, they owned Windows and literally give away C++ for free, then killed it with MFC, Microsoft’s answer to Borland OWL. Fast forward Microsoft pretty much killed C++ on their platform when they went .Net after realizing Java was taking over and this scared them to death that Windows would become irrelevant because with Java you programmed once and ran it everywhere! If Java ate the world, no one would care if the software didn’t ran on Windows. So Microsoft “borrowed” Java and started to create their .Net moat. As a C++ developer making a living, this was the moment Microsoft and Windows became irrelevant for me. They killed the C++ Windows community and left us high and dry.

When I started to code, Apple was pretty much irrelevant. Linux was still a toy with a basic X Window manager and it took loads of floppy disks to install, back then our Internet gateway was the FTP over a telephone line with a whopping 9600bps modem! It took days to download stuff like Linux.

When Microsoft went .Net the landscape had changed, Linux was a real choice and I started to learn network programming with sockets and TCP/IP. I switched to Linux and decided I’d become a server side C++ developer. It was not easy to break into the TCP/IP socket world, but I somehow managed to stumble my way into it.

Every step of the way C++ is hard to code in, add TCP/IP and network programming and you have another layer of complexity. You have to do a lot of heavy lifting in the C++ world, and C++11 forget-about-it, it’s a completely new language.

If you don’t code in C++, let me show you how it feels!

I’ve been coding C++ for 10+ years, I can code it with ease but it never feels fun, in fact with C++11, the committee made a huge failure, they didn’t clean up the syntax and make it more palatable for new programmers to jump on board. All those super smart C++ people just widened the gap to learning. Today almost every “pure” C++ coder has no idea about functional programming, they don’t get closures, some understand a lambda function as a simple way to define a function pointer and pass it around. Very few get functors really well and fail to use them, an idea that’s been around for years.

All the C++ developers who have not been exposed to dynamic programming won’t make the crossover to C++11, they will become as C developers stuck in the C++ world and slowly the herd will thin out. Most C++ developers don’t understand the asynchronous programming model, they get the concept but ask them to do any of this in C++ and you will get back a blank look. This is how C++ is failing in a major way, it borrows concepts from modern dynamic programming languages (which by the way is stupid easy in these languages), but then C++ in some weird way makes it really difficult. If you go there with C++11, you will learn more new ways to blow your own foot off with coding. Don’t even try to do meta-programming in C++, it will only make your brain hurt.

I am willing to bet it will take years for the C++ community to adopt C++11, never mind C++14, C++17.

The concept of the C++ header file and source file (two files for one) is outdated, this doesn’t exist in a modern programming language, look at Ruby, Javascript, Golang. When I started to code in Golang it blew my mind, what no header files? Also here is a static language that feels like a dynamic language and compiles into machine bytecode in seconds verse minutes and hours for C++. Concurrent programming is easy, it puts C++11 modern thread library to shame in terms of ease, power and productivity. Golang handles multi-cores for you, you don’t need to think about this. It scales easily to multi-server as it does with multi-core, no need to change the code, it’s all about Golang concurrent programming model which is easily learned. In C++11 you now have Async, good luck with learning that, I might as well add, thanks for yet a new way to blow your foot off! Context switching between threads in Golang is cheap, threads are super lightweight, in C++ this is a big penalty hit on performance, in C++ that’s the bottleneck to really fast multi-threading, more like multi-sloshing programming!

I thought I would never live to see the day when I would say I love Javascript, it has a real chance to eat the software development world. I was a Javascript hater, it was silly, it was too basic, it sucked in the browser with DOM manipulation and click event handling. Not today! We are in a new era for computing, the rise of Javascript was helped by two events, the first was Google chrome and it’s optimization of the V8 JS engine, second was Node, the stand-alone JS VM, it got momentum going.

Coding a server with Node is dead simple, so is network programming, even real-time networking is possible today using JS, cool stuff like video and audio streaming, the hardest problems of programming are getting solved and becoming accessible to the general coder. Unlike C++, with JS meta-programming is easy and sweet, functional programming is a joy, asynchronous programming ditto! I’m sure JS in time will mature and have concurrent programming added to the language core. ECMAScript6 is a move in the right direction to fix some of JS old wrinkles and warts. I can write a HTTP server or API server effortlessly with Node + JS, in C++ I would have to use a lot of libraries (Boost, ASIO or libcurl) but no matter what I chose it would feel like heavy lifting.

I’ve pivoted into fullstack development after my last contract ended working as a C++ consultant on Wall street. I’ve been able to accelerate the process of learning by diving deep into the technology stack. I love coding again, the joy of programming has returned. I can’t tell you how many nights I told my wife I really hate what I do but the pay is too good. Being out of work has allowed me to break free. Today all my years being a C++ coder is paying high-yield dividends. However I won’t waste my life working for some financial institution on Wall street, I’m happy I made it to Wall street, now I’m happy to be moving on to a bigger game.

To keep succeeding, at some point you will have to breakdown things so new things much bigger can take their place. Also the higher you go, the closer you get to the money, the tougher it is to walk away from a lucrative career. My motivation is not with money, it is with doing the greatest work of my life and going for my dreams.

Today, I’ve started to walk down a different path. I am going to enjoy the process and journey….

--

--