My Journey Outside .NET
I have been asked to compare moving from a primarily Windows, Azure, .NET based day job to a Linux, AWS, Java based day job. With four months under my belt, I am ready to make my comparisons.
Windows To Linux
I have been using Linux personally since about 2010. It wasn't an unfamiliar move, but oike anything else, the more you use it in a professional capacity the more you learn about it. Overall, I thoroughly enjoyed it. My Linux knowledge has grown exponentially and I am way more comfortable now. I feel less challenged when I have to do low level configuration etc. With that said, the lack of non-web apps for MS Office, purchasing Hiri for a mail client, and lack of conferencing application support has been frustrating. LibreOffice is a great product, but it isn't the same. Hiri is the only mail client that integrates with Exchange that I feel provides as close an experience to Outlook. Not having a native app and no meeting notifications would have been miserable. Luckily Zoom and Slack have apps for Linux, however Zoom was challenging at times.
Azure to AWS
Overall, the transition was fairly easy. I think how I AM works in AWS is pretty cool and can lead to some interesting implementations that are very secure. I feel AWS is still heavily centered around infrastructure and requires a decent skill set in networking to be effective. This makes AWS feel more sysadmin focused. Azure on the other hand definitely focused on the platform aspect and this makes it feel friendly toward developers.
.NET to Java
I am saving the best for last, as this is the one that I was asked most to compare. Overall, the syntax and the Java language was not that difficult of a transition. All the libraries that you would need exist albiet, with the Java feel to them. JPA I found to be very similar to Dapper, log4j felt log logging in .NET, and Spring Boot provided a very similar feel to ASP .NET MVC. The two items I found to be the most jarring, see what I did there, to me was new project creation and build tooling. Java doesn't have an official way to create projects and doesn't have an official project templating system. Spring provides their initializer system, that creates a prebaked project for you, other than that, the typical approach is to rely on how your IDE does it or create your own seed projects that you just clone and rename a bunch of files. That is the one item that I feel .NET is really strong. It provides a really nice and extensible project system. The other item was build tools. In .NET there is pretty much one official build tool and that would be MSBUILD and that is tied into the csproj and sln files that make a project. In Java, there are many build tools with Maven and Gradle being the most prevalent. Maven is XML based, while Gradle is a DSL based on the Groovy language. There isn't always examples provided for both systems and coming from .NET, it isn't obvious how it works sometimes.
If there are any specifics that you would like to know, just find me on social media and I will be happy to share my thoughts and opinions. With all of this said, in a week I will be moving back to .NET and Azure. My journey on the otherside has come to an end and I feel that I have a new appreciation for what Microsoft has done with .NET.
Thanks for reading.