Java or JVM based is the best choice for large projects. Prove me wrong
My experience (20+ yrs) at a variety of shops has led me to the belief that overall large corporate projects are best served by using Java (or JVM based language). Access to talent pool, IDE and tooling, type system, vendor support, vast opensource ecosystem are all factors. I don't think that Java is best for small/medium projects - I actually prefer Python for rapid development with small teams (1-5 people). But if 50 devs on a project then I am choosing Java. Willing to hear evidence otherwise. So prove me wrong :) [Genuinely interested - not looking for a flame war]
My big problem with Java is the INSANELY bloated ecosystem where all actual business logic is hidden behind 17 different layers of abstraction. For example, if you want to see where a field of a given object originally gets its value, you may have to track that field back through 4 or five different files in order to find where the value originally came from. Its absolutely fucking maddening and makes the system as a while very difficult to reason about and makes bugs very obnoxious and time consuming (but not necessarily hard) to identify.
What's weird to me is that other languages have the exact same ability to suffer from this problem, but for whatever reason, they do not. Only Java seems to have this culture of circle jerking around patterns and idioms rhat solve problems you probably aren't or are never going to have.
Arguments against:
1. Google prefer Kotlin over Java for Android.
1. You're old so your opinion counts for less.
6. On the stackoverflow survey Java is less wanted than APL, bash and CSS.
2. Go has a cuter mascot.
3. Java just copied from Javascript's name as an easy way to gain popularity.
5. OOP hasn't been cool since the 90s.
(Some of these things might not be true but if you're just looking to argue pointlessly, I think they'll do)
If you've been using Java for 20+ years, you maybe have a slight bias towards Java over everything else.
And that's fine, fight for Java in your life because that's your mastered ecosystem.
Trying to argue which tech stack is best is a pretty annoyingly dead and unanswerable question. There are a few quantifiable-ish things like you mentioned (hiring pool, tooling maturity, etc) but everything else gets subjective and meaningless pretty quick IMO.
Let me create some counter arguments with a InjectableCounterArgumentDecoratorFactoryImpl class
I can only agree. Have seen many systems and various tech being used and Java would be my choice for a large project as well.
I won't get into flamewar over Java vs others, but there are some ecosystems that are definitely better suited for large scale development.
The biggest concern for me and my shop is stability over time. We pick tools and vendors that can comfortably support B2B software contracts that are 5+ years long.
All your advantages of Java also apply to Python. Why would Java be the better choice compared to Python? Or to rephrase this question, why do you think that Python is only good for small teams (with an eye on all these massive billion dollar projects like Instagram which were built in python)?
That would depend a lot on what kind of large project you are building. As an example, Java is unusable for any project that requires high speed processing or highly accurate timing.
Also, there's a HUGE overhead that comes from wiring together and maintaining the runtime environment. The extra hours that you need to spend to find the exact combination of frameworks, servers, JDK version, etc to just get the project to run is something quite unique to Java. And then you need to keep it all up to date and secure. Sometimes those hours are justified, but they can definitely be a factor when you are determining the best language for some particular project.
I think you've proven the opposite in your post. You probably shouldn't have 50 devs working on a project. Better to split it up into 3-4 small/medium projects of 13-18 devs.
I agree for the simple reason that the JVM community pays a lot of attention to backwards compatibility. This alone means if you're working on an investment thats going to be around for more than 2-3 years, it's a solid choice. Contrast that with the NPM/Node community, where they regularly break backwards compatibility every couple of months because it needed to be redesigned.
Yes, but:
C# is just as good as Java on all accounts.
Rust is just as good as Java except the talent pool is yet growing.
C++ is just as good as Java except the language has no ceiling and the talent pool is shrinking.
I agree that Java has the best ecosystem for large systems. But, as others pointed out, in 2022 it is impossible to get in. I was lucky to have been one of the earliest adopters, back then when Java was only for applets and have followed its evolution up to Java 8. If I were a developer who tries now to start with Java, I'd probably despair.
Having done both Java and .NET Projects I’d personally pick .NET over Java every day of the week.
I’m not sure what the talent pool is like for them but that might also be regional. But that comparison is only made because they are very similar platforms. For a lot of protect types I might pick Rust these days too.
Java Dev here.
I dislike its type system.
I don't know what all its wonderful tooling is.
Vendor support? The vendor (Oracle) will sue you.
JIT compilation produces fast code, so fast in fact, that it's only beaten by its one alternative - AOT compilation.
The JVM and its libraries are great, but I prefer the M.
Talent pool? People who are locked into it, like me.
Unit testing sets off the footguns earlier than later. Any language that makes unit testing harder than easier is bound to have problems.
This is true with Python/Java/Go etc.
Anyone who says "If it compiles, it just usually works..." is bound for trouble, particularly on large scale projects -- golang being the obvious example of this.