the people that work on Java & the JVM are very smart.<p>it has become a best of breed language - hell its better than Go for industry purposes.<p>the drawback with Java will always be the CULTURE - (maybe someone can insert a quote of how in physics progress is only made, when old physicist die - I don't wanna be morbid ) but with Java same that's when the culture will change.<p>All those people using typescript (could be using Java - but the culture doesn't want them and consider them heretics for not embracing religion of OOP and FactoryFactory)
> for not embracing religion of OOP and FactoryFactory<p>Not the case today. Of course, crappy code (or questionable patterns) can be found in all languages, and java community had made some innovations in the area early on, but today we have a different picture.<p>FactoryFactory has gone mostly extinct, the most likely place to see it is “dailywtf.com”.<p>We now know that we prefer composition over inheritance, we have stream api - language and community evolved, old patterns are not neccessary anymore to solve same/similar problems.<p>Sample of one - junit (testing lib) source code, from quick glance it seems more procedural than dogmatic OOP: <a href="https://github.com/junit-team/junit-framework/blob/main/junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertArrayEquals.java#L434" rel="nofollow">https://github.com/junit-team/junit-framework/blob/main/juni...</a>
After ~13 years of working with C#, I moved to Kotlin. It's such a beautiful language. When I have to read docs for a Java lib I realize why I like Kotlin.<p>I want to say culture around Java doesn't have to change, new culture is growing around succinctness (if not simplicity) of Kotlin, and it gets most of the benefits of Java ecosystem.
It's getting better, it doesn't all have to be Spring Boot and JBoss.<p>There is quarkus, helidon and micronaut for slimmer more modern backend frameworks. jbang for scripting (think uvx, bunx), Tambo UI (<a href="https://tamboui.dev/" rel="nofollow">https://tamboui.dev/</a>) for terminal UIs, and more.<p>Along with all the new Java features that help you write much simpler code - eg. virtual threads, structured concurrency, stream gatherers, and performance / resource improvements.<p>It's not all there yet, but I think the next few years things will come together nicely (however a better build system is sorely needed - one of the things that Go / Rust did right).
If someone reads this and wonders what JBoss is, the contemporary variety is called WildFly and it is actually rather easy to install and play around with.<p><a href="https://www.wildfly.org/" rel="nofollow">https://www.wildfly.org/</a><p>I think this is an often overlooked solution to some of the problems we nowadays tend to approach the clown for.<p>As for build systems, Maven is old and cranky but if something else replaces it, it will probably be quite similar anyway.
> As for build systems, Maven is old and cranky but if something else replaces it, it will probably be quite similar anyway.<p>Bazel is the most obvious contender and very different from Maven in almost every possible way.
Enterprise space architecture is not picky, all programming languages get a place when they manage to hit big at corporate life.<p>It can be Yourdon with C and Pascal, Booch with Smalltalk and C++, Patterns with Smalltalk and C++, UML with Ada, C++, Smalltalk and Java, Rational RUP , Java and .NET application servers, Kubernetes with WebAssembly microservices,....<p>Ever looked into Typescript with effects, pretending to be Haskell?
Front page, 82 comments, comment 2 hours ago…why is this the top comment? “People who write Typescript could just be writing Java except they’re scared of being outcasts for not using design patterns” is bait, not a serious technical opinion.<p>Oh. That’s why it’s the top comment.
What do you mean by "better than Go for industry purposes"?<p>I don't understand what "industry purposes" means and in what aspects Java is better than Go in your opinion (I can think of some myself, but I'm interested in your perspective).
Not the GP, but for really large code bases, Go is missing a few features that I've noticed:<p>1) No immutable types. My work team is a huge user of immutable data stuctures in Java to make sure data passed around to other teams isn't changed. Go doesn't really have a good way to do this.<p>2) Refactoring can be really annoying (or at least really noisy) because of public/private being defined by capitalization of method/field names.<p>3) Error handling isn't great. I love Go's errors being just normal values, but the `error` interface is awkward when trying to figure out what kind of errors can be thrown without having in-depth knowledge of the kinds of errors that can be returned. We regularly need to make different decisions depending on the kind of error returned. Knowing which errors can be returned in Go is not defined by the method being called (only in comments).
Ya, that seems to be a misunderstanding. "Industry purposes" covers a huge range of stuff. Go is pretty good for systems programming where Java isn't really an option due to the fundamental limits imposed by garbage collection and lack of pointers. Java is pretty good for higher-level application development where occasional GC pauses are tolerable (the GC pauses are rare and fast now, but they still rule out using Java for certain purposes).
"a solid foundation for the future" is faint praise for a language that has been around for over thirty years.<p>> It has become a best of breed language<p>To me it lags significantly behind .net (runtime) and C#/F# (language). I don't see Java catching-up.
They trade blows, and have different philosophies (complex runtime, simpler language vs the reverse).<p>E.g. on the GC side Java is ahead of any other platform, especially with the low-latency ZGC garbage collector.
I would love to have a Java compiler with the capabilities of the .net compiler. To make incremental builds to aid code completion including type information, looking past simple syntactical errors, fixing them, and continuing compilation.<p>Currently, this is “magic” embedded in eclipse, IntelliJ, and maybe a bit in the vscode plugin. Imagine having a Java LSP running that can provide all this information while typing.<p>.net has had this for ages. From a language design I think that is wonderful.
Java LSP backends are basically headless Eclipse and NetBeans, they definitely go beyond syntactical errors.<p>There's also the upcoming Metals v2 that's using another compiler frontend optimized for performance, Google Turbine: <a href="https://metals-lsp.org" rel="nofollow">https://metals-lsp.org</a><p>Actionable diagnostics for Java aren't implemented yet though.
Java is 4th on tiobe.<p>Bright future for it just means it is not planning to become 40th or 400th.<p>(My prediction - in next ten years java will always be among top 6; new language might come to the very top and some leapfrogging game between c# and java)
I didn't use Java since 7, but from people that do - nowadays you basically don't code Java, you code Spring Boot. And that has all the bad things you think when people say "Java".<p>I don't know if it's true though.
There are more Java devs than people in my home country. Like how could you even give a single description for all of them? They all work on vastly different stuff, from low-latency trading to robotics, to regular old CRUD. Not even the CRUD part is as monotonic though as you make it out to be.
Spring Boot isn‘t bad. It‘s opinionated about configurations and dependencies. Its main advantage is that you can start shipping production-quality code very quickly, focusing on business problems rather than anything else. Vibe coding on it is more or less stable, entire apps can be built solo in a few months. And it‘s easy to do fullstack with SSR based on Thymeleaf and Htmx. It is absolutely superior to anything that exists for node stack.<p>And then there‘s also Micronaut, if you prefer compile-time setup to Spring.
There's a lot of programming that has nothing to do with SpringBoot - and I say this as someone who works in a backend team that uses SpringBoot for all our apps.
You're talking to specific people.<p>A completely different culture of Java usage can and does exist a lot of places. It is absolutely true that success creates a certain ossification of practice. But SpringBoot is not necessary, any more than Guice or any other framework-y thing.
I am captivated by your thought process.
Once i heard a manager explain "we must get rid of anything Oracle, including Java, because of license reasons". I see this attitude everywhere since.<p>JavaScript people are too afraid to use Java, that is why something like TypeScript exists.<p>And for personal projects, C# has become a better and more fun "just works" platform.