Hero Image

The Hidden World of Systems Programming Languages

Have you ever wondered what are the programming languages that power our modern world? From my perspective living in Latin America, I see great trends towards Web Development. People learning JavaScript (in many flavors and many frameworks: Node.js, Angular, React, Vue, Vanilla, TypeScript, etc.) and perhaps PHP. These languages and technologies present great opportunities for serving the ever-emerging market of Software Web Development, but have you ever thought about the programming languages that actually enable us the modernities of today?

Compiled vs. Interpreted Languages

A codebase that uses a compiled language almost always beats a same-purposed codebase written in interpreted languages, in regards to performance. Of course, no amount of compiler magic will save you from poorly structured or inefficient code. The scale of difference in performance is such that it gets close to a comparison of the size of a car and the size of the Sun. It’s just that vast, and I’m being conservative, like another realm entirely. The reason for this is related to the low-level facilities that compiled languages are better suited to access. Think of technology stacks where each level adds its own execution overhead.

To further explain my point: In the case of interpreted languages, since you always need an interpreter (Just-in-Time compilation, interpretation of code during the execution of instructions) this adds its own overhead each time the code runs whereas compiled languages (Ahead-of-Time compilation, code already in binary before execution) the price of interpreting the code has already been paid by the compiler, for once and for all future runs, so no overhead is ever paid again since the processor already can understand the instructions of the application. Of course, the operating system is always between the program and the hardware and is a layer in itself, but given you use an operating system that’s generally available, I’m pretty sure that has been optimized to have the least amount of impact on performance for end-user software.

So, what’s the point?

There are some less hyped programming languages that, even if you don’t fancy learning them, are what enable you to enjoy the perks of our modern world. These programming languages have unparalleled power and reach for use cases we take for granted. Let me provide some examples:

  • C or C++: Most performance-critical systems use C or C++ programming languages. Operating systems, trading systems, embedded systems, robots, and even your web browser. Microsoft’s Windows kernel is mostly written in C (and some Assembly language). Chromium and most of its derivatives are developed in C++. The world’s most popular databases (Oracle, MySQL, SQL Server, and PostgreSQL) are written in these languages too. If you know Assembly language, you can reason about performance even at an atomic level per CPU operation.
  • Assembly Language: Often people disregard Assembly language as too obsolete to work with like it was a plague of the ’50s or ’60s, and it’s mostly a misconception. What can become obsolete of Assembly is the instruction set when a new processor architecture is out. Whenever there’s a new processor architecture or a processor offers new features extending the current instruction set, the Assembly language gets extended as well. Short of actually writing in binary code, Assembly language gets you the closest possible to the processor, and thus, unlocks performance never before seen for your software.
  • Java and C#: Despite not being a fully compiled language, Java compiles to a bytecode where the Java Virtual Machine (JVM) doesn’t have to do much translation between the intermediate representation of the bytecode and binary instructions. It even has features of Garbage Collection and Multiplatform enablement. C# runs on the .NET Framework and shares most of these features with Java, but they are not related to each other.
  • COBOL: Some government and financial institutions still use this programming language today, as it has proven to be rock-solid to still be useful today for mission-critical day-to-day operations. When you make a bank transfer or pay using your debit or credit card, that’s most likely talking to a COBOL-supported mainframe somewhere. Old, but not obsolete, in the sense that it is still used today even if it’s not the primary choice for a new system.

Having become aware of these programming languages, ask yourself: Would the purpose of my professional life be more fulfilling to me if I actively considered learning and contributing to open-source codebases in these languages? I would argue that yes. I would consider it a great honor to be a Linux Kernel contributor or perhaps understand Mozilla Firefox’s codebase to such an extent to be able to roll my own web browser. What if you changed Chromium’s V8 with something else? Could you imagine a web browser that instead of JavaScript ran Python or an Android distribution that runs a .NET Core instead of Android Runtime (ART)?

Before jumping on a highly hyped language, remember to consider the alternatives! Our modern world wouldn’t exist if not for these programming languages.

blog comments powered by Disqus

Other Related Posts:

Economics of Software Performance

Disclaimer: I’m presenting this post without any figures or math, so it’s just my opinion based on professional past eye-witnessed experiences. This post will not be about hate, but rather on the weaknesses of delivery of recent trending technologies.

Recently I’ve seen a dangerous trend in software development, more specifically about web and desktop technologies. I wish not to bash on software frameworks such as Electron, but I think there are hidden costs for both junior developers and enterprises are ignoring. Let’s dig a bit deeper ahead.

10th Dec 2020