I’ve been trying to learn Rust on and off for two years and bouncing off the borrow checker every time. The bounce always had the same shape: I’d write something that compiled in JavaScript or Python, paste it into Rust, fight the compiler for an hour, and either give up or end up with Rc<RefCell<…>> everywhere, which I knew wasn’t the spirit of the language but at least made the squiggles go away.

Today I stopped doing that. I picked up a notebook and drew out who owns what in a tiny program — a CLI that parses a config file and walks a directory. Then I wrote the Rust to match the drawing, not the JS in my head.

It compiled first try. More importantly, I could predict why it would compile. Ownership isn’t a quirk you work around; it’s a description of the shape of the data flow. Once the shape is right on paper, the code is mostly transcription.

The penny dropped on lifetimes too. They’re not a tax — they’re the compiler asking you to be explicit about a relationship you were already implicitly relying on. ‘This reference is alive for as long as that one is.’ Of course it is. Of course you need to say so.

I’m still slow. I still reach for the wrong primitives. But I no longer think the compiler is being unreasonable. That feels like the actual milestone.