Cezar's library

C(++) and the original sin

Published on

Share on ...

Every programming language has its baggage, but C++ was born with a suitcase already packed. When Bjarne Stroustrup created "C with Classes" at Bell Labs, he made a pragmatic decision that would define, and haunt, the language for decades: full backward compatibility with C. This was the original sin. That single choice meant C++ would inherit not just C's syntax, but its footguns, its quirks, and its 1970s-era assumptions about how hardware and developers should interact. The raw pointers, the manual memory management, the header files, the preprocessor, these aren't accidental flaws. They're the inevitable consequences of a language trying to be both modern and perfectly backward compatible.

Read more...

Abolish the runtime!

Published on

Share on ...

For decades, systems programming has accepted a quiet tax: the runtime. Want polymorphism? Here's a vtable. Need logging? That's a function call with I/O overhead. Love your collections? They're allocating, copying, and destroying on the heap, every single time. But a new generation of languages and libraries is asking a radical question: what if all of this could happen before the program ever runs? Zig's comptime lets you execute code at compile time. Jai (still vaporware, but influential) promises metaprogramming that feels like ordinary programming. Rust's macros and const evaluation keep pushing more into the compiler's domain. Even C++ is slowly dragging itself toward compile-time reflection and constexpr everything. The pattern is unmistakable: the future of systems programming isn't faster runtimes, it's smaller ones. Compute at compile time. Generate code instead of interpreting it.

Read more...

On code beauty

Published on

Share on ...

We don't talk about beauty in systems programming. It feels frivolous, maybe even dangerous—a distraction from the serious business of cycles and bytes. Performance is measurable. Correctness is non-negotiable. But beauty? That's for frontend developers and Python scripters who have time to debate indentation styles. Yet anyone who has maintained a codebase for more than a year knows the truth: beautiful code isn't just easier on the eyes. It's easier to debug, easier to extend, and surprisingly often, faster than its ugly counterpart.

Read more...

The corporate ladder and encapsulation

Published on

Share on ...

Object-oriented design was supposed to be about modeling the real world. Instead, it ended up modeling the office. We encapsulate data behind private accessors not because the hardware demands it, but because it mirrors how information flows through middle management. We build deep inheritance hierarchies because promotions work that way. We abstract and inditect and add layers because that's what organizations do when they grow. Somewhere along the way, we forgot that silicon doesn't care about reporting structures. The CPU has no concept of private variables. The cache doesn't respect your protected methods. It just wants flat, predictable, linear access to memory. But our code, shaped by the corporate structures that produce it, prioritizes organizational legibility over hardware reality. We add getters and setters not for performance, but because "direct field access is bad design." We virtualize everything because "we might need to extend this later." The machine pays the tax. The user waits. And we call it engineering.

Read more...

Free market, bad software

Published on

Share on ...

The invisible hand doesn't write good code. It never has. Markets optimize for what can be measured—ship dates, feature counts, quarterly returns—while the things that actually determine software quality remain stubbornly invisible. Technical debt doesn't show up on balance sheets until the interest payments become impossible to ignore. Security holes are just line items until someone exploits them. Maintainability is a feeling, not a metric. So the market does what markets do: it externalizes the costs. Ship now, fix later. Acquire startups, gut their engineering culture, extract the users. Let the next developer, next team, next sucker deal with the mess. Open source volunteers burn out maintaining critical infrastructure that trillion-dollar companies depend on for free. The incentives are perfectly aligned to produce software that is just good enough to sell, and never good enough to last. Capitalism is very good at making things cheap, fast, and disposable. Software just happens to be the latest thing on the assembly line.

Read more...

Why there's no programming bible

Published on

Share on ...

Civil engineers don't guess whether bridges hold. They have models, simulations, centuries of failure data etched into stone. But software architecture? We're building bridges in the dark, guessing which patterns might work, then praying the market doesn't punish our experiments too harshly. There's no controlled trial where two teams build the same system—one with microservices, one with monolith—and we measure which collapses first under load. No long-term study tracking maintenance costs between functional and object-oriented approaches on identical codebases. The market doesn't fund that kind of rigor. It funds "move fast and break things" until breaking things becomes too expensive, at which point it funds "rewrite it in Rust" without ever understanding why the first version failed. So we accumulate dogma instead of data. Clean Architecture sells books because we can't prove it wrong. Agile coaches bill hourly because we can't measure their impact. We're not an engineering discipline. We're a priesthood, passing down beliefs about encapsulation and separation of concerns, never quite sure which parts are scripture and which are just really persistent opinions.

Read more...