Introduction...
When planning a new project and deciding which language to use, people often fall into one of two illusions. They either venerate an "academic lineage" such as functional paradigms or the purity of a type system, or they blindly follow "community trends" swept up by GitHub star counts and the buzz in programmer communities. It is a naive assumption that elegant mathematical proofs or trendy syntax will guarantee a product's survival, though in some ways it is understandable. People want the language they staked their career on learning, and its Worldview / Paradigm, to stand the test of time. Honestly, if C# and TypeScript started losing market share tomorrow, I would be plastering every programming forum with arguments for how superior they are.
Regardless, every program's execution ultimately reduces to instructions and state transitions carried out by a machine. When an interpreter reads source code or bytecode step by step, the original program may never be fully translated into machine code. Even so, if we're only concerned with computability, high-level languages are not strictly necessary. The same computations can be expressed in machine code or assembly alone.
Yet actual history unfolded as we know it. People did not write every program in assembly and C alone. A vast number of high-level languages and runtime environments emerged to address different problems and Platforms.
Each time new hardware appeared, operating systems arose, and browsers and smartphones became widespread, the languages and tools for working with those surfaces followed close behind. That is because the more expensive problem shifted from whether a machine can compute something to how many programs people can build on top of that machine.
IBM's ceding of PC Platform leadership to Microsoft can be read through the same lens. IBM created the hardware standard known as the PC, but the application software and developer ecosystem built on top of it became bound to MS-DOS and the Windows API rather than to IBM's machines. As compatible PCs proliferated, hardware became a commodity, and Microsoft, which controlled the interface through which developers wrote their programs, became the Platform's true owner. An empty Platform is not yet a product. Only when games, productivity applications, and content accumulate on top of it does it become a world where users stay. A language is the tool that authors that world.
And the moment a programmer takes hold of that tool and imposes logic and rules on the empty space, they become something more than a mere machine operator.
The computer programmer, however, is a creator of universes for which he alone is the lawgiver.
This is a line left by Joseph Weizenbaum, the creator of ELIZA, in Computer Power and Human Reason.
Yet the fact that programmers can build worlds with a language does not, by itself, explain that language's success. A highly expressive language can remain confined to a small research community, while a widely criticized language can encounter a massive Runtime environment and become an industry standard.
... continue reading