Zachβs defense of intellectual control highlights a crucial truth: as AI generates more code, the ability for a human to actually understand it becomes far more valuable than any compiler-enforced safety. It is a timely reminder that software robustness ultimately depends on human comprehension, not just rigid machine verification.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Zig vs Rust, agentic coding, and intellectual controlAdded:
Hey guys, it's your boy Zach.
Um someone asked me in my last dev vlog about my use of LLMs.
And I realized my view on that is directly related to um a lot of philosophical debates that have raged in the software world um including the very trendy comparison between Zig and Rust these days. So I'm going to there's actually a common thread here. I'm going to try to explain that.
I'm outside by the way. It's a nice day, so I went to uh one of my favorite spots here.
Right by the Ohio River.
Um I'm going to move though cuz it's kind of like washed out with this shitty laptop camera.
Um there we go.
So yeah.
This is a complicated topic.
Normally I would insist on having a glass of whiskey.
But it's too early in the day for that.
So I have to settle for a cigarette.
Um what I find compelling about this particularly Zig versus Rust is that it's clearly there's clearly this underlying philosophical disagreement. It's not just a shallow language war.
It's actually a philosophical war that has been waged long before either of those languages existed.
Um I mean one example is the Linux kernel mailing list had this exact same war going on. Only then it was C versus C++. Right?
And I'll I'll try to link to an example of that, you know, one of my favorite rants from Linus.
But he he you know, the C guys, they would always argue that um the most important thing in the long run for robust software was simplicity.
Uh code simplicity and readability.
Whereas the C++ guys they emphasized safety features from the compiler uh zero-cost abstractions as they refer to them.
And um so that debate raged.
In some sense, it was always hamstrung uh because even people who were believers in simplicity often gave up on using C after a while because uh it had too many foot guns.
So what's what's really nice about Zig versus Rust is that we can see this play out more on a level playing field.
Because these languages are both good modern languages. They have features that we come to expect like tagged unions, exhaustive switch statements, an actual error system.
Things that uh we didn't have in C.
But on a philosophical level, they are very much um just continuing the same battle that was waged back then between C and C++. What is more important?
And and and I know you're going to say, "Well, both are important. I want readability and I want a safe compiler." Well, yes.
We all want to have our cake and eat it, too.
But sometimes these things are going to conflict.
And which one are you going to prioritize when they are conflicting?
That's what determines which side of this battle you're on.
And uh uh it should be obvious what side I'm on.
I spent my career writing Closure, now I'm writing Zig. I clearly am on the side of readability over safety or abstractions.
I care about readability for the human reading the code more than anything else. I think that's ultimately in the long run what allows you to write robust software.
I believe the problem with the languages that add all of these safety features is that the code becomes more complex.
And when you have more complex code, you have a greater chance for logic bugs.
So, you've made it uh less likely to get let's say memory bugs.
But in exchange, you made the code more complex. And now you're probably going to have more logic bugs. Is that really a trade-off that you want to make?
I'm going to If I If I remember to, I'll link to a article by George Fairbanks where he talks about two different ways you can get control of a code base, intellectual control and statistical control.
It's the exact same distinction I've been making here, just phrased in a different way. Intellectual control is the control you get when you understand the code, when you can actually read it, understand it, run it in your head.
Statistical control is the kind of control you get through automated means, like unit tests or your type system.
Both of these are important, of course.
But again, sometimes you can't have both. So, sometimes they conflict and you have to choose one or the other.
And which one you choose, which one you lean more towards, is going to determine which side of this debate you fall on.
Do you fall more so on the side of intellectual control, keeping the code simple and readable, or on the side of statistical control, getting more compile time guarantees, even if that means that the code itself becomes harder to read?
So, in the uh C C++ debate, one of the flash points here was was destructors.
Right? C++ has destructors and C does not.
And uh you know, destructors are interesting because in you could argue in some sense they are a safety feature. They they prevent you from forgetting to run important cleanup code.
But, if you take a typical C function, all of you know, calling a bunch of functions and then doing all of the cleanup directly, because there are no destructors in C.
A C++ C++ guy will look at that and be like, "I know how to improve this."
And he breaks the code out into into special types, and each type has its own destructor.
And then the function uh it just instantiates those types, and this the destructors, of course, run automatically.
And he's he's probably proud of himself like, "Oh, yeah, much better."
But, is that better? I mean, the C function was it just a nice linear function that you could read, you could fit on one screen, and see everything.
The C++ version, it it's uh it turned it into an Eldritch horror of abstraction.
Maybe you're getting uh some nominal amount of extra safety, but is it is it really worth the trade-off to have code that reads like that, where where I mean, at the call site, you can't see the destructor at all. It's invisible.
Um is this actually improving the code in the long run over the C version?
It's the same debate.
Just in a different way. Because the exact same thing can be seen when you compare Zig and Rust code. The Zig code will often have all of that directly in the function because there are no destructors in Zig.
Whereas in Rust, everything is a trait.
So, and that trait could be defined in a totally different file somewhere.
Um and there's way more indirection in the code, which I would argue makes it much harder to read in the long run.
So, um intellectual control and statistical control. That's really what the debate is. Which one do you lean more towards when they conflict?
But, how does this relate to AI and agentic coding?
Well, the argument goes that particularly if you're leaning heavily into it to the point where you're barely reviewing the output, who cares about readability?
I've got my my nice little robot here who uh never gets tired and has infinite memory and can go through these horrible abstractions and understand it in seconds.
Who cares about readability now? You may as well just use a language that goes entirely in the direction of statistical control like Rust instead of Zig. And this, of course, is what Bun is doing. They're rewriting their code from Zig to Rust entirely using Claude, apparently just in the past week.
And uh the argument makes sense on the face of it. Like if you really are just diving headfirst into the deep end and you're not even reviewing the output of these LLMs, you may as well just use Rust or Haskell or something that gives you more guarantees.
Readability doesn't matter if you're not reading it, right?
>> [laughter] [snorts] >> Um maybe.
But there is one flaw in this whole reasoning, and that is it is assuming that these LLMs will be able to keep up with all of the complexity that they themselves are producing.
We all know if you if you use these uh um LLMs um like Claude or Codex, um they will typically produce over-engineered solutions that are much more complex than what an experienced programmer would write.
I see this all the time. I uh you know, for for ZIT uh you know, I basically hand-coded all of it, but very recently I tried using Codex with GPT-5.5.
And uh I just asked it to do a small refactor with the HTTP back end. Previously, it was hard-coded to output CGI format, so it can run as a CGI program.
Um but I realized I I wanted to choose either CGI output or just direct HTTP output. Um and so I just asked it to do a quick refactor.
And it decided to create a dynamic interface. That's not even a language feature in Zig, you have to build it um manually with a V-table and everything, and it did it. And I took one look at it was like uh no.
>> [laughter] >> Like why would you make that a dynamic interface? There's only two possibilities, CGI or direct HTTP.
Just make it a freaking enum.
Or tagged union if it needs data along with it.
Uh I don't need dynamism. I don't need to be able to create a new instance at run time.
Totally over-engineered, totally more complicated than it needed to be.
But here's the the thing people don't realize.
When if you allow a complicated solution like that to get into your code base, every other uh change that you make to your code will also be more complex.
Complexity compounds.
So, if I allowed that to get into my code base, then any future change I made to that part of the code base would now be more complex as well because it has to contend with this grotesque dynamic interface that it created.
And this is the problem is that complexity with with uh agentic coding, it doesn't increase linearly, it increases exponentially. Every time it creates an overly complex solution to a problem, all future changes that it makes will also be more complex.
And the problem is you're assuming that it will always be able to handle the complexity that it creates.
And I don't see the evidence for that at all.
Um every technology plateaus at some point.
It's I mean, you can't just assume it's it's just going to continuously increase its context window and continuously improve the models themselves and the fine-tuning.
No, I mean, at at some point the amount of complexity that it creates will will so great that making any changes to the code base will be um extremely uh costly in time and produce new bugs constantly.
That's the problem. That in essence is the problem with uh you know, going headfirst into vibe coding and allowing uh allowing it to make these sorts of changes without serious review.
Um so I don't I don't actually think it's going to work out in the long run.
I think readability still matters.
Readability by a human being still matters and that is why I still use uh Zig and why I like small minimalist languages even today even though we've got these amazing tools that supposedly don't care about readability.
Um it it still does matter if you want your code to actually stand the test of time in my opinion.
At the same time uh even if you keep it on a short leash and you review the code carefully um it can still save you time.
Like that refactor I mentioned it would have taken me several hours to do manually.
Um instead I iterated on it with Codex and I I made sure to get rid of that dynamic interface and clean up the code.
So I I definitely had to baby sit it, but it still saved me a [Β __Β ] load of time.
So it's likely that I will use it more for Haxe. I've not been using it much in Haxe yet um because in the early stages of a project, I don't think it's helpful, you know, I'm I'm still trying to figure out the design. I'm still experimenting.
So, I've mostly been coding manually.
But, I'm probably going to start using it more later on for more of the grunt work.
But, I'm going to keep it on a short leash, and I'm always going to review the code. And, I'm not going to give a [Β __Β ] about the fact that vibe coders are moving 100 times faster than me.
They may be moving 100 times faster, but they're increasing complexity by 1,000 times.
And, that will come back to bite them eventually.
So, that's why I think this relates to the philosophical debate between Zig and Rust or the the distinction I made between intellectual control and statistical control.
It's all the same stuff, just restated in different ways.
Um, how do you write robust software in the long run?
Um, you need to focus on readability and and simplicity of the code for a human being.
And, uh, secondarily, try to get automated guarantees as well.
But, when they conflict, most of the time you should lean towards intellectual control.
You should lean towards simplicity and readability.
Even in the world of AI agents, um, I think it is still important. Um, I believe they they will eventually um, produce code that even they themselves cannot maintain if you allow it to happen.
I think that's my rant for today.
But, uh, yeah.
We'll We'll see if uh what I'm saying actually turns out to be true or if this turns out to be sort of like the swan song of a uh old-school programmer that uh that you know, looks outdated in retrospect. But, that's my overall view. This This This philosophical war is really about managing complexity and your views on complexity.
And uh people who don't take it seriously are exactly the sort of people who are diving headfirst into agentic programming and uh they're about to learn a lesson that we all learned in other contexts long ago.
And uh that is there is no free lunch and complexity will eventually um cause your project to buckle under its own weight as it has happened many times in the past long before LLMs, long before AI um agents came to the scene.
Anyway, I hope that made sense.
If not, then screw you.
Related Videos
Agentforce NOW AMA: Build with React and Salesforce Multi-Framework
SalesforceDevs
490 viewsβ’2026-05-28
How agent o11y differs from traditional o11y β Phil Hetzel, Braintrust
aiDotEngineer
450 viewsβ’2026-05-28
WEB TECHNOLOGIES UNIT-2 | Degree 4th sem BCOM Computers web technologies unit-2 full explanationπ―β
LearnwithSahera
1K viewsβ’2026-05-29
More tests are always better? How to use AI to identify tests that bring little value
Alliance4Qualification
335 viewsβ’2026-05-29
Search Algorithms Explained in 60 Seconds! π€π¨
samarthtuliofficial
218 viewsβ’2026-06-01
People of Game of Thrones using JavaScript DOM
AltCampus
296 viewsβ’2026-05-30
Introduction to Problem Solving Part - 1 | Lecture 1 | Intermediate DSA
ascensionix
107 viewsβ’2026-05-29
So What's Odin Lang Even Good For
TechOverTea
131 viewsβ’2026-06-01











