For context, I currently use JavaScript (React) and Python (Flask) in my daily routine.
I need your help in choosing either Spring Boot or ASP.NET Core. Both frameworks seem to have mature ecosystems. I would like to hear your thoughts on the following points:
- Difficulty level of both frameworks
- Level of community support
- Career prospects i.e do Spring based jobs pay more or vice versa
- which one will be helpful if I decide to transition towards a more specialized field like data engineering.
I am asking this because it is something that I am also exploring in parallel. I know that Python and #SQL play a huge role in big data.
I’ll echo what others have said here with a few twists.
I have experience with both platforms including Micronaut, a relatively new kid on the block. It all depends on your near term goal. If it is to make money, sure Java jobs pay more generally because there is more hassles when dealing with the entire ecosystem. Like someone said earlier, you have to make a decision at almost every stage of the development cycle from the IDE, dependency resolution framework, logging, serialization, microservice framework etc. There is just too much choice which some may argue is an advantage while others may argue is a distraction and productivity killer. At the end of the day you can build solid systems with both frameworks.
Coming to ASP Core, yes I also agree that options are more streamlined. You’ll be using Visual Studio or Visual Studio code. For dependency management, you’ll be using Nuget. But I disagree with one of the comments above about the lack of choice. In some aspects .NET actually has more choice believe it or not for example choice of ORM. There is entity framework, nhibernate, dapper etc. For J2ee, hibernate reigns supreme although you have JPA. For dependency injection you have many IoC containers like unity, castle Windsor in .NET while you have Guice and maybe a Spring based implementation.
Also C# is technically a better language that Java. That’s not questionable as has also been stated above. Many things are done right obviously by avoiding some of the mistakes made in the underlying architecture surrounding the Java programming language. That’s why Microsoft created c# to begin with. The language is a lot cleaner and allows you to focus on learning core principles and nail down fundamental OO with emphasis on good design. I find too many distractions in the Java ecosystem which takes me away from understanding the core problem I am trying to solve.
So as you can this is not an easy decision and as someone has stated there’s work to do regardless of what technology choice you make.
If your sole purpose is to make a higher base salary, sure pick Spring Boot. If you want to quickly deliver something and iterate, pick ASP Core. I personally use c# for all private projects and proving concepts even though my employer is a Java shop. It allows me to stay focused on solving the problem and not constantly wrestle with issues such as Gradle dependency resolution glitches in IntelliJ.
Given that you can transfer skills from .NET to J2ee I recommend guys to pick up ASP get a couple of services to get a feel web development as you can still get jobs in Java even with that experience. Companies don’t care these days. In fact a lot of companies are going to Go so there’s that too.
Depends on your immediate term goal.
I gotta disagree a bit with the statement "you can still get jobs in Java even with that experience". I'd agree that the concepts are transferable, but in my experience, companies often want experience with specific technologies.
For example, maybe you used EclipseLink, but they want Hibernate. I've seen companies turn people down for stupid shit like that. If it's a job as an FTE, I think this is incredibly dumb (the specific tech used will change over your career at the company), but it happens all the time. And of course, For contracting jobs, it's not unreasonable to demand that. They don't want to wait for you to get up to speed on technologies, they're not investing in you. You're a hired gun to do a job. And often you're sold as an "expert" of some sort or other by the contracting company even if that isn't totally accurate.
I guess I'd amend the statement by saying "GOOD companies don't care these days". But whether that is applicable to your situation depends on the market of the specific city you live in.
On the issue of "choice", both frameworks have choices, and for both there's mostly 1 de facto standard. That's just more the case for .NET than Java, and I think .NET guys tend to use fewer community projects that aren't part of the standard framework. I do think this is changing, however.
I'll preface this by saying I haven't ever done work on the Microsoft stack, so take this with a grain of salt.
Community support: Java tends to have a more active community (and much more diverse universe of new open source projects) than .Net (related to below).
Difficulty level: I'd say the Java/Spring stack is more difficult because Java developers tend to use more community projects and have to know which ones to choose in which circumstances (e.g. what logging framework to use? What database connection pooling library to use? What testing framework to use). That being said, most decisions you have to make have choices that are vastly more popular than others. My impression is that .NET guys use stuff from the standard library almost exclusively. If it's not provided there, it's a problem they never thought to solve or maybe write their own (usually the former).
Career prospects: I'll get hate for this probably, but Java/Spring has more jobs than .Net. .NET Core even more so because it's new. Most .NET jobs out there are going to be not Core, and not on anything other than Windows. LinkedIn search for jobs in United States shows 97,103 for Java and 36,448 for C#. That's not to say some individual city might not have more .NET than Java, but by and large Java is bigger. Also, .NET is not dying at the same pace as say Ruby on Rails (sorry Rails fans). I'd say it's ticking very slowly lower, maybe even holding steady. I wouldn't say you're screwed career-wise if you choose .NET. C# is also pretty similar to Java from what I've seen, and I know professionals that have transitioned to Java (though interestingly, I don't know any that did the reverse). Several companies have basically no .NET footprint, for example, Amazon, Google, Facebook, LinkedIn, Twitter all have Java, but basically no C#.
Specialized fields: Neither Spring or .Net are going to be a thing in a field like data science. That's exclusively Python (some R) for the most part. The only exception being that there is some Java in Hadoop, and Scala in Spark (which runs on the JVM). But I think those are generally more for data products being created, and not data science work. I'm also under the impression this is increasingly less the case than historically. Some other specialties might make Java useful, for example Android development.
In short, Java is the COBOL of the modern enterprise (which is both a good and bad thing). I recommend it to anyone over .NET, but not for technical reasons. It's for reasons related to the questions you asked. There are actually reasons I think CLR and C# are actually better from a technical perspective than Java (unsurprisingly, since they had the benefit of hindsight). But that's not what you were asking about...
Hearing you say " Java is the COBOL of the modern enterprise" sounds kind of depressing....
What I mean by that is that it's ubiquitous and stable. And that I'm maybe a touch cynical after being a Java guy for over a decade.
Innovation has gotten better under Oracle. Sun kinda let the language languish from a lack of new features (e.g. functional programming). But the last several years have picked up and I think has made companies that were looking at Scala or whatever alternative languages decide that the updated Java was good enough and they no longer needed an alternative.
Let's be honest though, all these languages (Python, C#, Java) aren't exciting. They've been around a really long time and are stable workhorses. But that's not a bad thing. A language that has a lot of exciting new features is just gonna break my shit more likely than not.
I'd also add that Python is chipping away at Java's dominance it seems (although it's not happening in the city I live in). So good on you for having that in your toolbelt.
Python for sure has been dominating for the several years. However, I've heard that when it comes to the field of data engineering, Java has more edge. Perhaps a lot of tools like Apache Spark and Kafka are based on it and it also the ability to handle large scale data, but I am not sure about it. Another reason of me asking for Spring/ASP.NET Core is the nature of Java and C#. Knowing a statically typed language (and the relevant frameworks) forces you
to think about your code in more cautious manner. They give a different perspective about writing code. But again, these are just my thoughts.
That is true. Java/Scala are pretty big in data intensive applications, though this is a fairly highly specialized area. Since most data science is done in Python, I think fairly often folks just run their stuff in Python and even though it's not all that performant, it's often good enough. Though there's definitely overlap in that problem-space.
It is useful to understand how both dynamic and statically typed languages work. But I wouldn't say a statically typed language makes you have to be more cautious, I'd say it eliminates a category of problems (things not being the type you expect at runtime -- you always know exactly what types you're dealing with). Java is rather verbose in its syntax, but that's not strictly related to it's lack of dynamic types. Scala is much less verbose, but also lacks dynamic types (but it does have type inference, which is one of the things that reduces the amount of ceremony). Static typing also have better tooling (it's easier for an IDE to autocomplete stuff, etc), and better performance (in theory, someone probably could create a dynamically typed language that performs as well as statically typed languages, but it has never happened yet).