
C is a paradox. Born half a century ago, it remains the backbone of operating systems, databases, and any hardware demanding peak performance. It’s often called complex, outdated, and unforgiving. Yet, the best system programmers still swear by it. Why? Let’s dive into the philosophy, strengths, and quirks of C with Maxim Orlov, a 22-year experience programmer at a leading database company.
How I fell in love with C
My journey with C began in high school. Back then, I was coding in Pascal, and it drove me nuts that arrays of 100 and 200 elements were treated as different types. I vented to a friend, who casually said, “C does it differently.” That sparked my curiosity. I started exploring C, and I was hooked.
Other languages, like C++, never clicked for me. Objects feel restrictive, and the endless chase for abstractions — who can write the most abstract code — gets old fast.
Here’s a favorite example: everything that flies is a “flying object.” Planes, ducks, you name it. But through inheritance chains, you end up with a duck that can’t retract its landing gear. It’s an evolutionary trap: humans are wired to overgeneralize. Avoiding that is harder, which is why C, with fewer generalizations, can feel trickier than C++.

Systems programming: no room for mistakes
To understand C’s place, you need to grasp the difference between systems and application programming. If your browser (an application) crashes, you just restart it. No big deal. But if a database server goes down mid-banking transaction? That’s a disaster.
Systems programming is a conservative world where stability trumps flashy new features. Languages like Python, Perl, or JavaScript emerged when processor time became cheaper than programmer time. It became okay to solve problems “extensively,” burning resources. C, though, hails from an era when every bit counted. It’s built for optimization, squeezing every drop of performance from hardware. That makes it perfect for OS kernels, drivers, and databases.
Why C endures: balance, control, and a touch of magic
How does a 50-year-old technology stay relevant? Here’s why:
Perfect balance. C is like humanity itself — average but versatile. We’re not as strong as tigers or as fast as cheetahs, but we’re social and smart. C strikes a similar balance between low-level assembly and high-level languages, making it a universal tool.
Manual control. In web development, a split-second delay in loading an image is no big deal. But at our database company, we sometimes optimize down to CPU cycles to meet performance demands under heavy loads. C’s fine-grained control over hardware is its unique strength.
Incredible portability. A C module can be compiled on almost any platform and just works. It’s the foundation of Unix and its entire legacy.

The sweater-wearing C programmer stereotype
It’s not entirely a myth! 😊 Back in the day, data centers were freezing to keep servers cool, so programmers wore sweaters. Machines, not people, were the priority—they took up entire rooms.
C is for those who care about the essence, not quick wins. Modern development often chases instant gratification: write code, launch a prototype, get likes. C is different. It’s for the patient, for those who enjoy digging into low-level details without rushing.
Any downsides?
C often gets flak for two things: pointers and the lack of automatic memory management. To me, these complaints are overblown.
When learning to code, everyone can handle basic tasks like calculations or building a menu. But pointers? That’s the moment of truth—where you see who’s serious about programming and who’s just dabbling.
C does lack templates, which can be a hassle, and you can’t easily write functions that handle multiple data types. But adding that would open the door to complexity like metaprogramming, and that’s a slippery slope.
The most frustrating bug
The worst bugs for me are hardware-related. They’re tough to diagnose and even harder to accept—how can the hardware fail? When I suspect a hardware issue, I leave it as the last resort. You have to rule out every code issue first before blaming the machine.
How to start learning C?
The classic go-to is The C Programming Language by Brian Kernighan and Dennis Ritchie, the creators of C. It’s structured, detailed, and packed with examples. After that, just start coding—practice is everything. Reflect constantly: Why does this work better? Why did that fail? How can I make it more efficient?
Get others to review your code. Without feedback, you won’t grow. Over time, you’ll develop a deeper, almost philosophical understanding of C.
Programming is about translating human ideas into machine language. If you can’t clearly articulate what you want to do, you can’t code it. Many overlook this, starting to code and hoping the solution “emerges.” It doesn’t work that way.
Will C evolve?
C is a bastion of stability. I have a 25-year-old book on Unix parallelism that’s still relevant. C evolves, but slowly, with new standards trickling out. It’s a systems programming language where stability matters more than new features.

If C feels tedious or its intricacies aren’t your thing, it might not be your language — and that’s okay. Maybe you prefer quick results (think web development or Python) or building abstractions (C++). But if you love diving deep into low-level details with patience, C is for you.
When people ask if I get tired of C, I say, “Do you get tired of speaking English?” C is just a language, like English or Python. You might tire of a task, but not the language itself.
Can AI write systems code?
Right now, AI can handle basic programming tasks, like moving data between arrays by a set rule. But given that some AI models still claim “a horse has eight legs,” complex systems programming is a stretch. I haven’t seen any successful C projects built by AI yet.
AI is just another tool. Learn its strengths and weaknesses, and use it wisely.
I’m confident C will stick around for a long time. If you want to code in C, there’s plenty to do. But first, know yourself. C isn’t for everyone, but if you enjoy meticulous, low-level work, it could spark a lifelong passion, just like it did for me.
In our series on database company specialists, we also have an article about a performance engineer.
