A few months ago, I switched jobs. As part of this move, I have changed my daily programming language from C#, which I have been using for over eight years, to Java. It might confuse some people and raise a few eyebrows here and there asking why I would drop my experience just to start with a new language.
In what follows, I will explain the rationale for doing so and the process involved.
What made me abandon a language (re-hyped in recent years) that I'm familiar with all the bits and bytes in favor of a completely different one that I'll have to learn from scratch?
tl;dr I was up for the challenge, going out of my comfort zone to learn new concepts and grow, and no imposter syndrome will stop me!
From my point of view, C# and Java are almost similar, the gap between them appears trivial compared to other languages, but that's geeking out (I won't dive into the differences):
The real reason is that I wanted to have experience in a different programming ecosystem. JVM comes with an almost identical language, which means I could relatively fast gain a very marketable skill, that in the future, will open up opportunities in other JVM-based languages such as Scala, Kotlin, Clojure, etc. It gave me that sense of freshness that comes with learning something new and being back the newbie for a period of time (which is not always easy emotionally).
Furthermore, I used it as an excuse to start developing stuff over a different OS; if you haven't read about that switch, go ahead:
As a side note, until recently, the demarcation line between the OSes is well aligned with the technologies. But, nowadays, you can even use Linux over Windows too:
Finally, from my perspective, the JVM community is more dynamic. It creates more valuable tools and plugins than the .NET community, which I may use on a daily basis. Saying that, as a result of Microsoft's strategy shift, there has been a massive change in .NET over the last few years, and I assume the .NET community will close the gap.
The switch from C# to Java programming language was simple. Gaining experience in the tricks, limitations, and so on… is just a matter of time, and my years of software development will sure come in handy.
On the other hand, going from .NET to Java SE ("The java platform") and from CLR to JVM is a bigger leap. While some concepts are similar, it is actually an entirely different set of APIs that are organized differently. Besides that, I also changed from working on monoliths to using something that is based on microservice architecture, so the language and platform themselves have to be added to the OS, the tools (like Docker), and the inherent difficulties that come with distributed systems. That's quite a challenge. That's exactly what I was hoping for.
A big hurdle is the multitude of libraries/frameworks that make similar things and various sets of Java APIs attempting to handle some of this mess. The .NET universe is much simpler in this regard (there is a clear choice of a tool for whatever you want to do). A sort of "what does not kill you makes you stronger" situation.
Overall, the experience of switching programming ecosystems is an essential milestone in your growth. It paves the road for potential career changes in the future (since You prove to yourself that "I can do it!"). Doing so is really mind-stretching, unleashing your mind from the borders established by the tech stack you've used to.
People react in different ways when they hear about switching technologies. In my opinion, many people place far too much weight on languages, platforms, and tools, and not enough on the purpose of using them, the actual development of the product, and the experience gained from developing it.
Or in other words, the code is the mean for the business and not the end (goal).