When I started learning Rust, I realized that much of its uniqueness only becomes clear when placed side by side with other languages. Concepts like ownership, borrowing, or zero-cost abstractions aren’t necessarily hard to grasp: they just emerge from a different way of thinking than what most of us internalize while working with C, Java, Go, or TypeScript.

Instead of following a traditional “learn Rust from scratch” approach, I decided to study it through comparison. For each concept that stood out to me, I looked at how other languages handle the same idea, what they simplify, what they hide, and what they leave unsaid. After each iteration, I felt the urge to write down what I had learned as a result.

That process naturally grew into a series of posts I decided to call “Comparing languages.” Each post explores a different aspect of programming through Rust’s perspective, not to judge which language is better but to understand what each one teaches us about the craft itself.

This isn’t a tutorial or a Rust guide — it’s simply a record of how learning Rust, and reflecting on its contrasts with the languages I already work with, has made me a better programmer in all of them.