A thoughtful reflection on programming language tribalism, arguing that Rust's strengths shouldn't blind us to its limitations or make us dismiss alternative approaches.
The programming world has a peculiar relationship with tools. We don't just use them—we adopt them, defend them, and sometimes build entire identities around them. Nowhere is this more apparent than in the Rust community, where the language's technical merits have occasionally been overshadowed by the fervor of its advocates.
I like Rust. It's versatile enough that it can be used for application and systems programming. It has the best tooling of any language I've seen. It has a fairly pleasant type system. And I think most importantly it does a great job in bringing higher level language features into an environment without a garbage collector. Rust has arguably set the bar for "fast languages that are also decently expressive."
But here's the thing: it's just a programming language.
Programming Rust does not mean I have to:
like every popular crate buy into their marketing hype follow community "best practices" attack someone who prefers to solve a particular problem in C, or Zig refuse to admit it has design flaws refuse to admit the language is complex refuse to admit there are alternatives to RAII give the same smug lectures about "safety" we have all heard dozens of times before
The irony is that Rust itself was designed to be pragmatic. It's a tool built to solve real problems—memory safety without garbage collection, concurrency without data races, abstraction without overhead. Yet some of its most vocal proponents seem to have forgotten this foundational principle.
This isn't really about Rust, though. I'm picking on Rust here because it's no secret it has a long history of having some very... enthusiastic users. But my broader point is that tools are just tools. They're not our identity, a mark of our wisdom, or a moral choice.
Other people have different perspectives, tastes, and skills—and they may prefer different tools to us. We would do well to accept this.
Consider the alternatives. Zig offers a different approach to systems programming with its explicit memory management and compile-time features. C remains unmatched for certain low-level tasks and has decades of battle-tested code. Even languages like Go or Java have their place when development speed and ecosystem maturity matter more than raw performance.
The programming community would be healthier if we could discuss these trade-offs honestly. Rust has genuine advantages, but it also has a steep learning curve, complex error messages, and a borrow checker that can feel like fighting with a particularly stubborn compiler. These aren't character flaws—they're design decisions with real consequences.
What's particularly frustrating is watching newcomers get caught in the crossfire of language wars. Someone asks a simple question about memory management in C and gets lectured about how Rust would prevent all their problems. Someone mentions struggling with async Rust and gets told they're "doing it wrong" instead of receiving actual help.
This tribalism extends beyond individual languages. The vim vs. emacs debates of yesteryear have evolved into neovim vs. vscode arguments. The tabs vs. spaces war continues unabated. We form camps, develop jargon, and sometimes forget that we're all trying to solve problems with code.
The most effective programmers I've known share a common trait: they're tool-agnostic. They learn multiple languages, understand different paradigms, and choose the right tool for the job rather than forcing every problem into their preferred framework. They can write Rust when they need performance and safety, Python when they need rapid prototyping, and SQL when they need to query a database.
This flexibility requires humility—the willingness to admit that your favorite tool might not be the best choice for every situation. It also requires curiosity—the desire to understand why other tools exist and what problems they solve.
Rust's success is well-deserved. It has pushed the industry forward, influenced other language designs, and provided a viable alternative for systems programming. But its value doesn't depend on converting every developer or proving the inferiority of other approaches.
Tools come and go. Programming paradigms shift. What remains constant is the need to solve problems effectively. Sometimes that means using Rust. Sometimes it means using something else. The mark of a mature developer isn't loyalty to a particular tool, but the wisdom to choose appropriately.
So by all means, use Rust. Enjoy its features, contribute to its ecosystem, and appreciate its innovations. But remember: it's just a tool. Your worth as a developer isn't measured by your language choice, and your code's quality isn't determined by the hype surrounding its implementation.
The next time you're tempted to evangelize your favorite language or dismiss someone else's choice, pause and consider: are we building software, or are we building identities?

I'm available for hire.

Comments
Please log in or register to join the discussion