- 4 min read

You can't prompt your way past what you don't understand

I was on the Rust homepage the other day and got stuck on a single paragraph.

It said: Rust is blazingly fast and memory-efficient: with no runtime or garbage collector, it can power performance-critical services, run on embedded devices, and easily integrate with other languages.

That’s it. One sentence. And I realised I didn’t actually know what half of it meant. Runtime. Compile time. Garbage collector. I’d heard all these words before. They get thrown around constantly. But if you’d asked me to explain any of them, I couldn’t have. Not really.

Here’s the slightly uncomfortable part. I did a master’s in computer science and AI. I’ve been working as an AI and machine learning engineer for four years. None of that forced me through the low-level layer. You can go a long way in ML without ever touching how memory gets managed or what a runtime really is. So there I was, stuck on the first paragraph of a programming language’s homepage.

I think a lot of people are quietly in this spot. You ship real things, you’re good at your job, and that whole layer underneath just stays invisible. You build on top of it and trust it’s there.

I don’t want to keep trusting it blindly. So I’m going to learn Rust.

Why Rust, though?

Honestly, Rust isn’t really the point. It’s the doorway.

What I actually want is the intuition for how things work underneath: memory, what “compile time” really means, why some things are fast and others aren’t. Rust just happens to force you to look at all of that. You can’t write it without thinking about it. So I’m using it as a way into the deeper stuff, with systems design being where I eventually want to end up.

Here’s the kind of thing I mean. You might have seen a version of this animation float around online before (courtesy bddicken). It’s the same program, one billion iterations of a nested loop, nothing clever, just counting, run across a pile of languages and raced against each other.

1 billion nested loop iterations Same program, one machine. Seconds to finish on the right.
C / clang -O3
0.50s
Rust
0.50s
Java
0.54s
Kotlin
0.56s
Go
0.80s
JS / Bun
0.80s
JS / Node
1.03s
JS / Deno
1.06s
Dart
1.34s
PyPy
1.53s
PHP
9.93s
Ruby
28.80s
R
73.16s
Python
74.42s
One billion iterations of a nested loop, the same program in each language, timed on one machine. Numbers from the bddicken/languages benchmark (a single run, so treat them as rough). The dots move at each language's relative speed, compressed so the fast ones stay visible. The exact times are on the right.

Watch Rust and C zip back and forth while Python barely moves. Half a second versus seventy-four. Same loop, same machine, almost a hundred and fifty times the wait. I can’t fully explain that gap yet, and that’s the point. I want to be able to.

There’s a second reason, and it’s a bit more personal.

I write about AI agents. I build with AI every day. And I don’t want to be hollow underneath all of it, the kind of engineer who can only operate when the tools are working. If something breaks, if the internet’s down, if the model’s having a bad day, I want to still be able to think and build on my own.

But it’s not just the defensive version of that. There’s a better reason. The more I understand the internals, the better I am at directing the AI in the first place. If a data job is crawling and the best I can manage is “make it faster,” I’ll take whatever comes back on faith, maybe a wall of multiprocessing I never needed. If I understand that the real problem is a Python loop doing work that could be vectorised, I can say exactly that: push it into NumPy and drop the loop. And I’ll spot it when the thing that comes back is still looping under the hood.

None of this is me admitting I’ve been faking it. I understand a fair amount of what I build, and I try to understand the systems under it as much as I can. This is just me going deeper into the parts I already lean on every day.

You can’t prompt your way past a concept you don’t understand. The models (LLMs, in this case) are there to amplify your judgement, not replace it, and that only holds if you understand enough to question what comes back.

So learning this stuff isn’t me stepping away from AI. It’s me trying to get better with it.

Moving forward

This scares me a little.

There’s so much to manage, and the concepts are genuinely intimidating. I also know I’m not exposed to strong developers day-to-day the way some people are, and I’ve worried that might be quietly stunting my growth. Doing this in the open instead of in private is me pushing back on that.

I don’t have anything mastered to show you. That’s kind of the point.

Let’s see how it goes.