In about 2 months I'll be 28 years-old. By Rudolf Steiner's 7-Year Cycles of Life [1], that means I'm entering a new cycle that runs from 28 to 35.
According to Steiner, earlier cycles were important for establishing identity and independence. Experimenting with new things is particularly useful in early life, as this is the only way of (hopefully) discovering what you enjoy and want to pursue long-term.
For my IT career, I experimented a lot. Every technology on this list is something I spent at least 50 hours working with professionally, learning, or just tinkering. And to make it more interesting, I'll be listing the exact order I encountered them: Windows, C++, Linux, Java, Vim, Git, Python, OpenCV, Pytorch, HTML, CSS, JavaScript, Node.js, MySQL, Firebase, React, Django, C#, .NET, Docker, Sqlite, Rust, PHP, Laravel, Vue, MacOS, AWS, Typescript, Go, Angular, PostgreSQL, WebRTC, Elixir and Phoenix.
Exploring all these technologies gave me a solid sense of their differences and similarities. At one point, I even called myself a tech agnostic, which I now kinda cringe at. Honestly, most of these languages and tools are solving the same fundamental problems, just with different tradeoffs.
Still, I don't think any of this time was wasted. Without those experiments I wouldn't be where I am today, and certainly not writing this article. For example, back in university I was convinced I'd go into an AI career until I tried it and realized it's mostly about math, dataset processing and far less about the systems programming I enjoy.
Mastering None
Having many casual interests and hobbies like the 40-year-old Virgin, although it's a little bit weird and arguably not optimal, seems fine to me as they are mostly for fun. But when it comes to serious stuff like your career, dividing your attention across too many things is a real problem.
Developing the amazing ability to "learn" a new technology from scratch and start using it as fast as possible seems useful but in practice it is a remarkably useless skill, especially in the current LLM age where companies can just pay an AI to write the kind of code a person would write in this scenario.
The idea here is clear: You master none. It's extremely hard to achieve excellence in many things given the limited free time a normal adult has.
In software, excellence means deep understanding of system architecture, reliability, security, maintainability and performance. Those are things you only improve by building depth over time in one domain.
Focusing
A while ago I shifted from experimenting too much to pure focus. My strategy was simple: pick a language and specialize in its ecosystem and the kind of software that language is usually used to build.
I picked Rust because I love its design and ecosystem, plus how it aligns with the systems programming I enjoy. There were other practical reasons, like its reliability and market potential, but this article isn't about Rust.
After committing to a single path, work just felt much lighter. There's no more overhead about choosing tools, I only focus on architecture, coding and shipping. Also my productivity and satisfaction increased a lot.
Closing
Experimentation is great, that's how you find what you enjoy. But once you find it, know when to stop and start building depth.
References