Stroustrup: complexity is the new constant in software development

The relentless march of AI and modern libraries is forcing a fundamental shift in how we approach software development, according to C++ pioneer Bjarne Stroustrup. He’s arguing that the inevitable increase in complexity isn’t a bug, but a necessary feature of the landscape.

Beyond the ‘easy’ languages: why c++ still reigns

Beyond the ‘easy’ languages: why c++ still reigns

Stroustrup, known for his blunt assessments of the programming world, dismisses the notion that simpler languages are inherently superior. He’s repeatedly cautioned against relying solely on online tutorials for mastering programming, and isn’t shy about stating that “too much intelligence” can hinder success in the industry. This isn’t about dismissing easier tools, but recognizing that those lightweight frameworks often mask underlying complexity – a complexity that’s increasingly vital for robust, large-scale applications.

The industry, he contends, has bifurcated itself around levels of control. You have those building entire systems from scratch, and then you have those heavily reliant on abstractions. It's a stark division, one that highlights a core tension: the desire for rapid development versus the need for verifiable, reliable code. The constant complaint about ‘difficult’ languages like C++ isn’t necessarily a criticism, but an acknowledgement that they offer a level of control often absent in more streamlined alternatives.

Stroustrup isn’t claiming C++ is the biggest language in terms of lines of code, particularly when compared to behemoths like C# or Java. Instead, it’s consistently perceived as possessing ‘high complexity’ – a complexity that stems deliberately from its design. The goal was never to create a trivially simple language, but one built for scale and resilience, capable of handling the intricate demands of modern systems. And frankly, that’s exactly where it excels today, a testament to its decades-long trajectory.

Conversely, the ‘easy’ languages – those leaning heavily on libraries and abstractions – introduce their own set of complications. Their reliance on external dependencies and demanding environments ultimately creates a different kind of complexity, one that often lacks the flexibility and efficiency of C++. It’s a trade-off, and Stroustrup suggests the gains in developer velocity frequently come at the expense of long-term maintainability.

He succinctly puts it: ‘There are only two types of programming languages: those that annoy people and those nobody uses.’ This provocative statement forces a serious assessment of the current technological ecosystem. The success and longevity of languages like C++, Java, and Python – despite frequent criticisms – speak volumes about their suitability for tackling complex, demanding projects. Ultimately, Stroustrup’s core argument boils down to this: ‘Perfection is the enemy of utility.’

And while complexity may be unavoidable, it’s not necessarily a problem. It’s a consequence of the problems we’re trying to solve – and a crucial ingredient in building the software that shapes our world. The key, he implies, is understanding the trade-offs involved and choosing the right tool for the job. Don’t chase simplicity at the expense of stability, or brevity at the cost of power.”n