C++ In the year 2021, and beyond

The point is: Someone has to pay

Software development is often a risky business.  The stakeholder’s point of view is rather important. The stakeholder has one question: Is that feasible? The question for you today is: Is it feasible to invest in C++  based development?

The answer largely depends on where the software product being planned might reside. What do we mean by “where”. Let’s try and clarify. IT landscape cross-section is broadly divided into three groups of layers :

IT Landscape Layers

  1. top group — Applications
  2. middle group — Logic
  3. bottom group — Infrastructure

During the last several years and today in 2021, the reality of the IT industry: Feasible software systems, their architectures, and implementations are based on distributed systems architecture.  Based on the HTTP communication infrastructure, connecting those distributed components. We can be a bit more specific and use that somewhat abstract picture as the primary skeleton of the more concrete description of those distributed systems.

Distributed IT System

  1. top group — Applications — Desktop and Cloud(SaaS)
  2. middle group — Logic — Cloud (PaaS)
  3. bottom group — Infrastructure — Cloud (IaaS)

In English: consider this is the very system you are using right now through your browser while reading this. You are using the desktop part of the Applications layer, aka “front end”. It is partly residing in your browser and it is communicating to the Cloud part “Software as a Services” (SaaS).  The logic of the system, web servers in this case is what we broadly call “PaaS” aka “Platform as a Service”. The cloud infrastructure (that is the “bottom group”) is completely hidden in the “fabric” of the Cloud. And by the way, we can be sure 99% of components in that IaaS layers, are written all in the C programming language.

That “middle earth” group aka “application logic” group might be or might not be “hidden” in some PaaS product (aka “offering”) think “Heroku”, and such. Again that is (very certainly) the domain of software components written in languages like Java running on JVM, JavaScript on node NODE.JS, and C# on .NET Core. All “server-side”.

That layer is also where C++ written components might reside. In particular to support native modules for Java or NODE. That is: To facilitate the connection between the middle and the bottom components. That means software modules (aka components), not applications.

One illustration I often do use, to visualize the C++ role in contemporary Cloud-hosted, IT systems are this one. That is a schematic depiction of the “Cloud Side” of Azure hosted and Azure implemented modern distributed system. This is SaaS, PaaS and IaaS part. You and your browser are on the left of this picture.

Spot your product
Can you spot your C++ product? XYZ is the one component in this system that might be feasibly written in C++.

The point is: Most of the code on that diagram is not C++ written. Infrastructure, largely invisible, is always C. Always. All those funky SF boxes you see glowing in the dark on those scary data center images.  When they arrive from the factory they all are already having software operating inside them. All written in C.

Application logic is JavaScript inside NODE.JS. The DB (aka DataBase) is a mixture of C and C++. And so on.

And the reasons for that are not entirely technical. The reasons are feasibility-driven. Stakeholders need to pay for the development of such a system. And such a system is made of teams of human engineers, who have to be found, employed, and paid. And that is a large part of the total cost.

The Enterprize point of view

A view of the IT landscape of an Enterprise. Let’s call it: Enterprize landscape geography. This is the kind of diagram EA (aka Enterprize Architect) is using to communicate to the stakeholders why things are as they are, and what are they paying for.

Again we have three “layers” but slightly differently named, for reasons of describing things we have described above but this time from stakeholders POV aka “Point of Veiw”.

Universal Enterprise
Universal Enterprise: Enterprize is based on Application Landscape

Make no mistake. Legacy is the name of the game in that IT landscape. Ket’s get back to the subject: Where is C++?  That view above fits (more or less) each and every business organization of today. C++  (in various forms) might be used to develop some concrete software components. But where do we find them on the diagram above?

Looking for C++, that view (orthogonal to the layered section of the IT landscape) does not show (for example) a possible large population (aka clusters) of web services. They are in the  Applications landscape middle section of the diagram.  A sizable number of them were written in the past 20+ years in some previous versions of C++. Developers wanted them fast, platform-specific, and business-specific. Think banking, ticketing systems, financial transactions, telecoms, and such. And that is where 90% of C++ on that diagram is.  And in the parts of the “Infrastructure” group.

Also called the 99% legacy systems. Because those components have been written years ago. And some are written even today still in some previous versions of C++.

But our subject is: It is now 2021; where is C++? And where on the IT landscape will it be in the future?

The desktop still rules

Completely external to that universe of enterprises is a huge industry of computer gaming. Developed for and running on the desktop, or on all sorts of mobile devices. Probably the strongest presence of C++ these days is in desktop games.  And desktop graphics in general. Also a large industry. Think of Photoshop, AutoCAD, and similar; largely the domain of Qt, the C++ GUI framework. All also big consumers of C++ engineering resources.

And of course, on the desktop we have browsers. They are all right now developed in C++  (and large parts in the C). But understand this: they all have been started years ago. Browsers are very complex and expensive to develop. Very few organizations can afford the teams required.  It is simply not feasible right now, to develop a brand new browser from scratch. And in particular to develop it completely in C++.

There is an alternative desktop infrastructure to make a browser. But it is even less feasible (read: impossible?) to use C++ to develop a browser using the Electron-based application architecture. Almost completely  TypeScript, written. Perhaps with only some “mission-critical” modules still in C++. And yes in that pesky C too.

That is in short, what runs on desktops and is developed in C++, today (2021).

Thinking of a new software product?

It is just not feasible to start, in the year 2021, developing some new 100% C++ coded, application.  The same goes for desktop or cloud-hosted applications. Perhaps some components.

On the desktop there is one side effect of the ubiquitous browser, HTML, JavaScript combination:

It is simply not feasible anymore, to start any kind of  apps with UI, coded in pure C++.

See here to learn about QT6 and JavaScript. Generally, it is much faster and cheaper to develop desktop apps in (for example) C#, Java, Go, Swift, Dart, React Native … you get the picture: Not C++. Why is that? Essentially:

What matters is TTM and ROI.

Act Responsible: Use legacy carefully

There are few very important legacy apps that are alive and well and still being developed using C++, “as we speak”. One notable example is  MS Office. Then there are few decades-old media players, VLC, Virtual DJ, and such.

 

Caveat Emptor

So, starting with C++ in 2021 means: no UI, very likely no client-side software at all. And very likely no IoT, under the firm rule of C; or low-level infrastructure, also the kingdom of C. And largely no PaaS side either. Other than that; that is where one might plan for and find a feasible place for C++ development. In 2021 and going forward.

I shall be revisiting this post for additions and classifications.