How Programming Has Evolved

So a show of hands, who is writing C++ code? If I could see you, my guess is that outside of a few folks, you would not be raising your hand.

The week before I brought up Bjarne Stroustrup, the guy that invented C++. What many people may not realize is that C++ was not the first object-oriented language. Bjarne was inspired by an earlier language called Simula, which itself was a variant of ALGOL.

Languages like C++ tend to get a bad rap these days. It is a notoriously difficult language to learn with brain melting syntax. While some schools have used it as a beginning computer course, most agree that it is not a suitable first language. Even Linus Torvalds of Linux fame declared that C++ is a horrible language, going further:

It’s made more horrible by the fact that a lot of substandard programmers use it, to the point where it’s much much easier to generate total and utter crap with it.

To be fair though, Bjarne had a pretty good comeback…

There are only two kinds of programming languages: those people always bitch about and those nobody uses.

My first language was luckily the much easier BASIC. To my sixth grade mind, it just made sense. When I got to college, I learned Pascal and Assembler (the wonders of being an Electrical Engineering major). When I started my programming career however, it was C, Bash, Perl, and lots of SQL.

This was also when I got my first taste of “4GL”. Using wizards and drag and drop, I could build database applications in a snap. This was the golden age of PowerBuilder, but my company JYACC used JAM (anyone recognize it?). I was now able to build working and scalable three-tier applications that did complex transactions in a matter of days.

My first taste of C++ was when I moved to San Fran to chase Internet dreams. People told me I needed to learn a “serious language” if I was going to make it in the startup world. It made sense as all the job postings said you needed C++. So I enrolled in a C++ course and a semester later I was still trying to get “Hello World” to compile.

A decade later, working with NYC startups, I noticed most were building apps in Ruby on Rails. So I taught myself RoR and in a month had a working, nicely designed web app, a directory of NYC tech companies. It was super simple, but impressive nonetheless.

I do not code much anymore other than to help my kids on homework assignments. But as I look at the most popular languages now, JavaScript and Java reign supreme with Python making a strong showing. As expected, most of the job postings ask for JavaScript and Python. We have now moved from low level compiled languages where we had to do a lot of dirty work to higher level languages that abstract that complexity away.

Joel Spolsky talks a lot about the abstraction layer. The abstraction is not merely in the instructions we tell a computer to execute, it’s also entire applications we do not have to code like payments system or mapping algorithms by writing a single line of code to an API. With API’s, Microservices, Serverless, and scripting languages, the productivity of developers has never been higher.

For enterprises though, this poses a challenge. Half of their applications are in modern languages, the other half are a heterogeneous soup of legacy languages requiring the knowledge and skills to integrate, migrate, or containerize the code.

The good news is that Stack Overflow has become the go to repository of knowledge for legacy coding questions. The C++ tag is one of the most active with 578K questions with over 80% answer rate & 409K people watching. It is a testament to how strong and committed the community to helping each other (and probably how notoriously difficult the language can be).

The bad news is that much of the contextual and specific knowledge about that code is not documented. Those proprietary bits reside in the heads of the developers that have long ago left. Besides the fact that developers hate writing documentation, there was also no good easy way to transfer that knowledge into a more consumable and accessible form.

While you are stuck re-engineering old code bases, you can at least future proof your organization from the whims of changing languages, frameworks & abstractions. This is the benefit of having a collaborative community-based platform to capture contextual knowledge in flight in a way wikis and docs cannot. And for legacy code, at the very least it is a place to let the wisdom of the crowd help to unwind the legacy spaghetti.

How do you the jumble of languages in your company? What steps are you taking to prepare for the inevitable turnover in technology and languages?

What is the “ →” operator in C++?

Speaking of wonky computer language syntax…

We help IT leaders in enterprises solve the cultural challenges involved in digital transformation and move towards a community based culture that delivers innovation and customer value faster. Learn more about our work here.

Thoughts on developers, digital transformation, enterprise agility, community building & software engineering culture. Author 👉