Rust and Ownership-First Thinking
My goal with Rust isn't to rewrite everything in it — it's to use the language as a forcing function for thinking more carefully about resource ownership, lifetimes, and the true cost of abstractions. Coming from Ruby and TypeScript, I've had the luxury of a garbage collector handling memory. Rust strips that away and demands you think explicitly about who owns what and when it gets freed.
The borrow checker is famously intimidating, but working through it has been genuinely eye-opening. When Rust rejects code because two mutable references could alias, it's catching a class of bug I've definitely shipped before — race conditions and use-after-free issues that a GC language papers over at runtime. Fighting the borrow checker is really just arguing with logic about data ownership, and usually the compiler is right.
I've been building a small CLI tool to parse and validate structured log files as my learning project. It's a real enough problem that I'm not just doing toy exercises, but constrained enough that I'm not overwhelmed. Working with Rust's std::io and the serde ecosystem has been solid — the ergonomics around deserialization are impressive, and the error handling model with Result and the ? operator is something I wish more languages enforced by default.
What I'm taking back to my everyday work: thinking about who owns a piece of data, when to clone vs borrow, and being skeptical of implicit copying. These concepts translate directly to designing cleaner interfaces in any language and being more deliberate about shared mutable state in concurrent systems.