In my experience most people don't like Java due to experiences they had before Java 8. This means they were used to the bloat, config as XML style world which made Java a pain to write and slow to run.<p>Once I show them Java 11 with var keyword, lambda's and streams they start appreciating how modern the language has become. Then you throw in frameworks like javalin or sparkjava and suddenly they are not as hostile as they were before.<p>Honestly the only things I would really like out of Java these days are data classes and possibly native runtime compilation out of the box. Containers solve the latter issue, but id love to just build a binary and run it.<p>Do that and its on the same level as Go in many ways which nailed the tooling and deployment model, even if the language has issues. Java already has the tooling.<p>I suppose a decent syntax highlighter library like pygments or chroma would be nice too.
I think the reason so many people have mixed feelings about Java is that "Java" is actually several things:<p>- The Java language<p>- The Java API (and/or whatever set of libraries you're using)<p>- The Java ecosystem, tooling, etc.<p>- The sorts of work typically done these days with Java<p>It's perfectly possible for one person to feel strongly one way about some of those aspects while feeling strongly the other way about others.<p>For instance, I'm quite fond of the Java language, I mildly dislike the Java API (in how bloated it's become), I'm ambivalent about the ecosystem, and I do my best to avoid the "Enterprise Software" CRUD-churn that Java development often entails (although this might have changed, it's been a while since I did Java commercially.)
My biggest issue with Java isn’t even the language, it’s the culture. I feel like typical Java solutions are just layers upon layers upon layers upon layers of abstractions, frameworks inside of frameworks, and stack traces taller than skyscrapers. It’s just too much!<p>It seems like the Java community has lost the art of coding without a framework. It feels incredibly bloated and entirely too magical. But this has more to do with the ecosystem and philosophies of the community, rather than the language, or even runtime, itself. From a purely language and runtime perspective, I think it’s fine.<p>But I don’t enjoy it. Every time I need to work on a Java project, it’s like it’s a form of punishment. I’d rather do basically anything else.
Stack Overflow yearly survey[1] mentions that ~40+% developers who took the survey use Java. Not very surprising if you look at how long ago Java came into being (24 years ago!). I, for one am happy that it continues to evolve. At the very least it shows that the developers of the language are still taking lessons from the programming languages ecosystem :-)<p>[1]<a href="https://insights.stackoverflow.com/survey/2019#most-popular-technologies" rel="nofollow">https://insights.stackoverflow.com/survey/2019#most-popular-...</a>
Java 8 made it an "okay" language for me to use.<p>It's a lot better nowadays, but historically the biggest problem with Java has been the 3rd party libraries. They tended to be written with extensibility in mind at the expense of usability. Extensibility is great, but it's not the only important thing in a design.<p>I'm not a huge fan of annotations. It makes the language feel a bit magical and hard to debug in some places. It can be difficult to track down how a given library actually treats an annotation - or even a set of annotations since you can put more than one on a given thing.
It puts the language in a strange place: sometimes both boilerplate-heavy and magical.<p>> The introduction of annotations in JDK 5 has made enterprise Java development a whole lot simpler by allowing things like dependency injection.<p>This is a bit weird - you don't need annotations to do dependency injection. And you don't need a DI framework either. One thing I don't quite understand is the infatuation with DI frameworks in Javaland. I prefer to just do it by hand where both necessary and plausible.
I'd like to see a JVM with a garbage collector that isn't designed to always consume the maximum amount of memory before it starts collecting. If you configure the JVM to have at most 400MB and it's current heap size is 120MB and you allocate 0.5MB every second or simply allocate 400MB of temporary objects that could be collected right away, it will allocate more GC heap until it hits the maximum 400MB and only then it decides to start a collection cycle. This makes the JVM useless for anything that isn't a web server that uses the entire RAM anyway.<p>Although Shenandoah looks promising but it's pretty telling that even in 2019 the JVM only has a single good garbage collector and it's still experimental. 23 years of history my ass. Other than the awful JEE ecosystem, the JVM is probably the worst part about the Java ecosystem. You can't fix it with a language that runs on top of it. It's slow (mostly startup performance), the GC is awful and it gobbles up a huge amount of memory. Obviously my company doesn't care because 8GB of RAM for a webserver costs them almost nothing.<p>It wouldn't surprise me if a WebASM implementation will take over one day, because the JVM is such a failure.
When I first went to college for my Associate's Degree, we learned C++ and had the option to choose between Java and Visual Basic. I chose Java, obviously, because who the hell wants to know Visual Basic?<p>I really liked Java back then because C++ had always been a struggle, not because of pointers or anything like that... but because I always found project management, figuring out how to link libraries, and build my projects, to be overly complicated. With Java, I only had to import a library, and that was it. I didn't need to link external libraries because Java's standard library was large enough that it had most of what I needed at the time, and adding external libraries wasn't nearly as difficult as C++.<p>However, over the years, I feel like I've kind of grown apart from it and have started to want to migrate back towards C++ and Python. I still use Java because it's the language I know best and it's the language I'm writing my game in, but after I finish my game, I think I'll be using it significantly less. The bulkiness of the code, the complications from the JVM, and the lack of good options for deploying executable code is just getting more and more frustrating.<p>Also, as I was working on my Bachelor's Degree, filling in the gaps of knowledge left by a "meh" education at my previous school, I could see that Java is just not good for writing good, fast code.<p>That said, Java 8 did make me like Java a lot more when it came out, but they're starting to deploy new versions so frequently now I feel like 8 is the last version I will bother learning.
"James Gosling, the Father of Java, described it as a Blue collar programming language."<p>I wonder what can be considered a white collar programming language which is actually used a lot. Erlang? ES6 with ever changing front end frameworks?
I both love and hate it. I love the high quality libraries and ecosystem, reasonable performance, simple semantics. I hate the annotations and reflection magic, bloated frameworks, type erasure, lack of null safety, build systems. Luckily, it is possible to avoid some of that by not jumping on the bandwagon's standard stack. Leave that framework on the shelf, and Just Write Java. Unfortunately, many existing Java projects you come across in the wild are trainwrecks.
Which lib/framework to use today for a webapp backend development in Java ?<p>(I am senior dev, some past java7/8 core server experience, FE will probably be React and then mobile)
What kept me away from Java was mostly configuration rather than language itself. You had to manually place jars in some lib folder, have things like "classpaths" and lot of this shit was glued together using XML files.<p>But once gradle came into picture along with IntelliJ I totally moved to Java.
One thing I would really love to see is a better way how you manipulate strings. Variable interpolation would be nice and you wouldn't have to have all that ugly string concatenation all over the place.
There has been about a 7 year window of opportunity for Oracle to really push JavaFX as cross platform UI, but they insisted on making it hard to legally use even for desperate Java Swing developer. Almost every Java Swing shop I know is either still on Swing, switched to .NET or switched to web shit.<p>Why, why, why did they not make JavaFX on Android a first class citizen?
Why are the links larger than the body text on mobile? It’s so annoying trying to read this whole article. Especially when one of the links is pushing their commercial support of Java.<p>Good design and java rarely go hand in hand. These small details matter. I don’t think it’s a mistake that Ruby, JS, Rust, Elixir, etc attract people with good design sensibilities which is reflected in their blog posts, websites, and also API designs, documentation, etc.<p>But otherwise this articles content is not bad, I think we all know why Java and C++ are so popular. It’s one of the first questions every programmer learns their first year programming. This article is a good summary of why. The fact both C++ and Java got things like Lambdas and other modern stuff in recent years is great, but they are obviously incredibly late to the game. Which makes you wonder how long until the other good things will take. Maybe that whole backwards compatibility with decades of some questionable code being a dead weight dragging down the language is one of the reasons why people hate it? You can repaint a broken down house but that doesn’t mean it’s as good as the new house next door.
problem is it evolves way to slow that alternatives already emerged and are used by a lot of people who were looking for alternatives<p>so yeah, evolving in an empty ocean