Growing up in the country meant casual jobs were farmhands or anything manual work related. When apple picking season came around, there was always a need for available hands
which meant pocket money! I never thought it would give me analogies for later life. The first instructions when picking from a tree: do a pass and move on.
When picking apples you look for the ripest fruit first — the ones that will perish if not harvested, the ones most ready for market. With a Royal Gala you’re looking for the deepest red. You work your way around the tree in one pass, selecting as you go.
In the previous article I described a path from dynamic languages toward TypeScript, and from TypeScript toward stricter compiled languages. Rust is the end of that path — but it took some convincing to get there, and the thing that convinced me wasn't the systems programming story. It was the frontend.
The TypeScript Ceiling
TypeScript is an extraordinary tool within its constraints. The type system is expressive, the ecosystem is vast, and the developer experience — particularly with modern tooling — is genuinely good. But TypeScript erases at runtime. The types you write are a compile-time overlay on JavaScript; they do not exist when the code executes. The compiler can tell you when your model is inconsistent, but it cannot prevent every class of runtime failure.
Around 2020 I made a deliberate decision to stop language tourism — spreading effort across Python, Ruby, and PHP — and consolidate around TypeScript. I haven't looked back.
The Context Switch Cost
For several years I was maintaining professional fluency across multiple languages simultaneously. Python for data pipelines and NLP work, Ruby on Rails for server-side applications, PHP surfacing in legacy projects, and JavaScript on the frontend. Each language has its own idioms, standard library conventions, ecosystem tooling, testing patterns, and community norms. I felt more marketable in the hiring game if I could claim expertise across all touchpoints.