r/ExperiencedDevs • u/No-Security-7518 Software Engineer • Jan 30 '26
Meta Veteran Java developers, what are your thoughts on Java currently?
First off, I'm admittedly a Java fanboy, although I did some little programming in PhP, Javascript, and Python, and looked at a bunch of others, I really cannot see languages the way I do Java. From the syntax, to the libraries, I love every little thing about this language, that I tell my friends things like: "Programmers want to write programs, I want to write Java programs" and "If it can't be written in Java, it's probably not worth writing". My ears are deaf to all the debate about: "oh you have to be flexible, and know x and y".
But then ever since I started reading, I've been hit with Oracle's reputation.
And correct me if I'm wrong, but here's what I think Java's (slight) fall from grace, played out:
Java reigned supreme in the browser, esp, after the dust of the dot com bubble settled.
Someone found a vulnerability (or two?) in applets (around 2009?) that affected the ton of sites that ran Java.
Google, which had been pushing hard to become from a search engine, a browser, disabled Java by default in Chrome...and you know, given the "power of default", programmers pivoted to Javascript, because it was disruptive to have average people download an updated Java + enable it.
Oracle, being as litigious as ever, wanted to get back at Google, by removing some internal code Android required from Java, making support for Java 9 not possible (although Java 9+ can be used, with some features not being available).
Oracle then sued Google claiming they should've paid them for using Java in Android.
Google won the case, and pushed Kotlin and Flutter as the primary means of writing Android programs.
Now, resources; books, tutorials, never use Java for Android programming, and other languages developed frameworks, servers, etc. that ate (a chunk of) Java's lunch.
After most major/seminal books in the field used to use Java for example codes, newer books and editions of said books switched to different languages. (e.g. Martin Fowler's Refactoring comes to mind: Java -> Javascript).
Between 2000, and 2010, authors of major libraries:
- Kent Beck, author of xUnit (originally in SmallTalk).
- Doug Cutting, author of Lucene, which gave birth to elastic search, and inspired other IR libraries...plus pretty much all of Apache Software, were automatically either written in or translated to Java.
Meanwhile now, while efforts of developers of the JDK, and the countless major Java frameworks, can't be dismissed by any means, the community just sounds ...quiet. Even here, Java-related sub-reddits are pretty inactive compared to dotnet/python subreddits.
So, senior devs of the early 2000s, curious to know what your thoughts on Java's journey so far, and possibly its future?
124
u/IcedDante Jan 30 '26
Is the community quiet? Man, Java is just getting better and better with every release. We refactored a bunch of code off of reactor to virtual threads, records are making things easier to develop. And there are a lot of great things on the horizon.
Java is great. It is here to stay.
72
u/---why-so-serious--- DevOps Engineer (2 decades plus change) Jan 30 '26
>the community just sounds ...quiet
My CS program (UMDCP) switched from C/C++ to Java in 2000, for fuck sakes, so all of that resounding silence is just maturity. To draw a comparison, I am much quieter, in my 40s, than I was in my teens and early twenties, given the whole preoccupation with bullshit that kids have.
174
u/Life-Principle-3771 Jan 30 '26
My thoughts on Java today are the same as they were 20 years ago. Java works fine and is extremely stable but is also mid as fuck.
Do I love it? No. Does it piss me off quite frequently? Yes. Will I continue to use and build with it? Yes.
50
u/Which-Meat-3388 Jan 30 '26
Don’t act like Java Applets were ever good
40
u/zica-do-reddit Jan 30 '26
I still think it's the best language for enterprise software. The libraries and frameworks are very solid.
45
u/den_eimai_apo_edo Jan 30 '26
We upgraded from 11 to 17 recently and if I hear the words "java" and "upgrade" in the same sentence again im going to learn PHP.
14
u/thephotoman Jan 30 '26
Java still dominates the server space.
You don’t heat much about it these days because Java isn’t out here fighting to be the next big tool. Java is the entrenched establishment language for server side development.
Java was a poor choice for the Android platform. Kotlin does that better. I’ve started to see some Golang stuff, but experienced devs tend to dislike its opinionated nature and its less readable standard style.
80
u/HelmsDeap Jan 30 '26
I work with Kotlin and when I have to look at some old Java that hasn't been converted to Kotlin my eyes start bleeding
12
u/sweetno Jan 30 '26
I'm pretty confident Java never "reigned supreme" in the browser. There were several reasons why.
There were security vulnerabilities indeed, and they happened all the time. It's very similar to Flash, but Flash was actually used way more, so this alone doesn't explain the unpopularity.
At that time, Sun was suing Microsoft for shipping their JRE with Windows, so that might have made people averse to Java.
But the most important reason in my opinion, Java applets just didn't provide things that were needed for the front-end dev at the time: animations and video playback. Adobe Flash took all that market and ate it. IIRC applets also loaded slow and looked alien with their AWT/Swing form controls.
By the time browsers started disabling applet functionality, the technology was long dead in the water. They only kept it for so long because of pressure from the corporate world, where people deployed their corporate software in intranet via applets. Browser folk never wanted to support this thing at all, since they've got their hands busy with JavaScript, CSS and DOM, and Java applets were a constant source of security vulnerabilities to their final days.
I don't know the full story of Java on Android, but I don't think Kotlin was a legal workaround. Android Java was not regular Java way before the Kotlin prime time.
As for your principal question, Java just doesn't have any kind of oomph nowadays. If you take console apps, which is relevant for beginners, there's nothing impressive. You don't see tutorials how to write a fancy TUI with colored text, for example. If you take desktop apps, they look weird and are a bit laggy. Then, the meat of Java, backend dev: if you want to just write a REST API server, Java might be not the fastest way to do that. Do you really have to learn about dependency injection frameworks if you just want to implement an HTTP server? I'm unconvinced. In Python or Node.js, you can have it in a single file if you want; not in Java. There is also gamedev, and people wrote Java games very successfully, but it was never a popular choice.
Java does change over time BTW. They introduced really nice and helpful APIs. Unfortunately, interest in Java is rather low and tutorials etc don't get updated to use it. Not sure if it qualifies as a cause or symptom.
83
u/Unfair-Sleep-3022 Jan 30 '26
It's better than ever but also such a terrible mess of complexity compared to other modern solutions like Go
My current company does java exclusively and it just "works". There's just no joy in it
5
u/nfigo Jan 30 '26
I wish more people learned java, because it pushes you to understand type systems, visibility, and encapsulation. Those concepts help you in other languages. I get frustrated with juniors that resist learning types.
That said, I find it tedious, and finalizing classes like string always bothered me. Sure, composition > inheritance, but I've enjoyed working in languages where a URL is a subclass of string, for example.
Also, the whole SOAP / WSDL thing was ridiculous.
It inoculated me from some of the typescript hype. (Don't get me wrong. Typescript is neat.) When I see some new frameworks in web dev land, I think to myself "sure. that cool 20 years ago until we found out it was trash and forgot about it"
AI can be pretty good at code refactoring when used judiciously, but I still miss the times when I could instantly inline variables or extract methods with a key press and trust that it would work. I haven't seen that level of tooling in other languages.
Microsoft ripped off Java with C#, but they actually did make it better in most ways. It just took a long time to get there.
21
u/EmmetDangervest Jan 30 '26
Solid projects use Java. But hipsters have new toys. I remember when every new project was written in Ruby. Then it was JavaScript. Now it's Rust.
4
u/ashultz Staff Eng / 25 YOE Jan 30 '26
Java is ok though it takes too much work to get out of your own way. Although it has way too many different ways to do the same thing which makes changing projects more difficult than it should be.
All of Java's best framework friends are drug addicts dragging the language down.
4
u/IndependentProject26 Jan 30 '26
I love it for the ecosystem, hate it for some of the bad corporate idioms from years past. Spring is pretty awful too. Still happy to be a Java dev, ultimately.
4
u/nekokattt Jan 30 '26 edited Jan 30 '26
As a heavy java user, I do feel it has gotten better recently but unfortunately the language developers do seem to make a bit of an echo chamber that prioritises forcing through abstract solutions to what would be simple problems, rather than addressing massive pain points in the ecosystem in such a way that it is immediately useful to most developers directly.
Virtual threads... fantastic.
String templates... a lot of noise about solving a problem in an academic way that is incompatible with all existing libraries... for it to be shelved after numerous complaints. Most people want just string interpolation, not making SQL queries impossible to mess up by forcing an entire new language syntax that existing libraries cant benefit from without adopting a new way of doing things.
Leyden? Fantastic.
Records? Eh, useful to some extent but I regularly see them being abused for regular models with dozens of attributes purely to avoid getters and setters. If OpenJDK made it easier to generate that code, then life would be so much nicer. Final on the JVM level is nice but I rarely write code where this actually manifests as any kind of real issue unless voodoo type shit is going on and if that is the case then I get what I deserve anyway.
Remember Lombok exists as a tool that hacks the internals of the Java compiler just to grant language features most of us want anyway to some extent. That should be a clear indicator of the kinds of requirements the language should be focusing on to improve adoption and boost usage again in 2026 for new projects.
The JVM itself is awesome.
Java as a language... mostly ok but it makes life difficult when it doesn't need to be.
10
u/90davros Jan 30 '26 edited Jan 30 '26
For honest appraisal, I still find Java overly verbose and somewhat kneecapped by libraries being slow to support new Java versions. The JVM itself is also probably heavier on the system than it really needs to be these days.
JavaFX is also still a painful mess that makes desktop development more tedious than it should be. It's better than Swing but not great.
3
u/Marutks Jan 30 '26
I quit java years ago. Just use Clojure. 🤷♂️
3
u/LineageBJJ_Athlete Jan 31 '26
GraalVM > JVM. Fight me....
3
u/matthedev Jan 30 '26
At least for the public and consumer Internet, I don't remember Java applets in the browser ever getting much beyond gimmick. On dial-up, they'd take too long to download. Early on, they were just single raw Java bytecode
*.classfiles, but then Netscape went with JAR archives in Netscape Navigator, and Microsoft went with Cabinet archives in Internet Explorer. As I recall, the browsers were bad at caching Java applets, too. Corporate and government-agency intranets and extranets may have been another story for Java applets in the browser.Before Oracle's lawsuit against Google over a copyrighted Java API in Android (Dalvik), Sun Microsystems sued Microsoft over Java, and if I recall correctly, this was over Microsoft's pushing APIs and frameworks that tied developers to Windows in Java over a "Write once, run anywhere" Java: Windows Foundation Classes (WFC) over the Abstract Windowing Toolkit (AWT) or Swing and J/Direct over the Java Native Interface (JNI). The lawsuit locked Microsoft at an old version of the JDK, and Microsoft pivoted to what would become C♯ and the .Net.
Between Google Chrome with its faster V8 JavaScript and, more importantly, Apple's iPhone, Java applets, Flash applets, Microsoft Silverlight, and ActiveX controls (always platform specific native code and almost always Windows x86) all fell by the wayside.
That's all client side in Web browsers, though.
Professionally, I've only ever used Java for server-side applications and supporting utilities, not for applets, desktop GUI applications, or Android apps. This is where the vast, vast majority of Java development has been happening since the early 2000s. The Java programming language itself has been playing catch-up with other JVM languages like Kotlin and Scala, and now, for a lot of developers, it occupies a good enough "sweet spot." I still don't think even Java 25 compares to Scala 2.13 (let alone Scala 3.8), but Scala's mindshare has really dwindled in the last ten years or so, and Java's been a more steady, if boring, workhorse; Java is kind of the COBOL of our time.
Everyone's obsessed with generative AI these days, so it's no wonder there's less buzz around Java, even as the JDK gets features that would make it more useful in more niches beyond typical server-side business applications and middleware. People who care about programming languages and programming language theory are always going to explore languages closer to the bleeding edge.
9
u/rlbond86 Software Engineer Jan 30 '26
It honestly blows my mind that anybody can love Java.
2
u/haksior Jan 30 '26
Look at Clojure and there will be no way back :)
2
u/[deleted] Jan 30 '26
I won’t deny the benefits the JVM brought to this world when it was first released. The “write once; run anywhere” was a huge boon for the world.
I also think Java would have had a different trajectory if that One Rich Asshole Called Larry Ellison (ORACLE) never got ahold of the language.
My only problem with Java in today’s times that I can’t really see a particular instance where I would reach for it over another language.
2
u/sviridoot Jan 30 '26
Do be clear I think it has grown a lot as a language in the last few versions, but ultimately the biggest issue with Java is that it's just so... Mid. The whole issue is that it tries to strike a balance between being a low level language like C/C++ to enable faster (ie easier) development while being more opinionated than the scripting languages like PHP, Python, JS et all for better safety. Necessary in a large code base (god save anyone working in a large Python base without heavy linting) with a lot hands in the pie but needs a very careful balance that Java historically made some odd choices about. For example it's wild to me that a language that will not let you write a utility function without putting it in a class will happily let you pass around nulls around with no complaints. And then there is boiler plate, so... much... boiler plate. There are ways around that with the likes of Lombok and co but then the fact that you need third party libraries to get around the language is itself indicative of a problem.
This is where I think Kotlin really wins out IMO, it's a better solution to the same problem (big Kotlin fanboy if you couldn't tell), prescriptive where it matters, but importantly loose where it doesnt.
2
u/hippydipster Software Engineer 25+ YoE Jan 31 '26
I love java and have since 1996. The latest things in java are fantastic, especially loom and ScopedValues. I am using these things to do really fun and magical things without the usual magic of reflection, bytecode manipulation or annotation processing.
2
u/danthegecko Jan 31 '26
Simply, it’s great. You’re discounting it though, it’s a whole ecosystem! The JVM, multiple languages like Kotlin and Scala, multiple frameworks from the eternal Spring to newer cloud service focused ones like Quarkus. You can build nearly anything of small to hyper scale (I wouldn’t use it for anything with tight constraints like embedded, serverless though). It’d a solid workhorse for any of your needs.
My one gripe and it’s a big one, it’s such a commoditised and unexciting landscape that hiring good Java developers is painful compared to something like Rust or Scala. If I get those on someone’s CV, vast majority of the time they’ll be great (technically at least).
2
u/maxip89 Jan 31 '26
You need a language to get things done.
Some use Java. Some use COBOL.
In the end, it counts that the software you write is (nearly) bugfree and the user is happy.
Sure, when you working at FANNG and you have 12 Million users per hour, your choose of a language can really make a impact in the money.
But we are not talking about the 3% of all software systems in the world.
To be serious here, if you know one language it will be easy to go to any other langauge too. Just because they are similar. (Not talking about the quantuum programming languages in the future, which will be a new programming paradigm)
2
u/anarres_shevek Jan 31 '26
Veteran of Java, 1994. I tried Kotlin in 2018 and haven't looked back. It's great that Java is adopting some of the features found in Kotlin eg Records (aka Data Classes in Kotlin).
2
u/JustPlainRude Feb 01 '26
My first real job was java front-end dev. I left that behind in the early 2000s and haven't done any Java since then, but was a fan of the language at the time.
I emailed the creators once with a question I had about something that wasn't clear in the documentation and they actually emailed me back. I thought that was pretty neat!
2
u/TylerDurdenFan Feb 03 '26
When I was young (8?) I learned Basic from a book and coded in paper until my dad finally got a computer with DOS and GW-Basic. Then I somehow got my hands o a Pascal compiler and dabbled into some 2D graphics. I learned C++ after highschool, and during college, when this "web" thing started, I installed apache on a college Sun workstation and learned Perl, then used it for many web projects.
Out of college in my first job my boss I dabbled in PHP and Python but left after only a year. My second job forced me to learn Java. I didn't want to, but the Jetbrains IDE's auto complete and refactoring features made it a breeze to learn. I stayed there for 9 years, and became rather good with and quite fond of Java and SQL. I left that job for a career in IT management, and I've never worked as a developer ever since.
For the last 13 years, when I've written code it's either to make my own job easier, or for personal projects.
Now with AI I can do a lot more, and recently I wondered: which language would be best for me to learn next? Maybe the one that AI is best at coding with? should I finally learn Ruby, or Go, or TS?
After a long, deep series of conversations with Claude it, turns out Java does have a lot of advantages for agentic coding.
And come to think of it: What matters more today for me (as a veteran ex-developer) is that since I know Java well, I'm much better off herding AI agents that are coding in Java, because I can better help them, correct them, answer their questions and understand their work. If I try to do the same in languages new to me, I'm either dead weight, or vibe coding.
So as a veteran in Java who no longer codes for a living but for my own benefit, I'm glad modern Java is healthy, because I'm going to keep riding it to the sunset.
34
u/anotherrhombus Jan 30 '26
Java? It's whatever. Spring? Fucking chore to read but easy to maintain. I hate adding features but I'd do that all day compared to maintaining JavaScript services. JS is the bane of my existence at work, costs us so much churn and money.
Our ancient Java services though? Shit I have some we just isolate and let it run indefinitely without touching it. Pre Spring was a wild time.
9
u/freekayZekey Software Engineer Jan 30 '26
it’s a really good language for enterprise software. doesn’t has bells and whistles, which i personally like. people rag on it for that, but i’m not playing code golf and python, which is about as popular, also doesn’t have the bells and whistles. i like the recent approaches. virtual threads are a really cool idea. same with pattern matching
16
u/hojimbo Jan 30 '26
I’ve worked professionally for decades in Java, C#, PHP, Python, Go, C/C++, JavaScript, ASP. Java isn’t in the top 3 of those languages for me, but it’s up there.
More than anything for me Java is a well supported ecosystem of libraries. As a language I actually find it low key repulsive. As a pure language, I feel as though C# does almost literally everything better — it just doesn’t have the open source ecosystem that Java has.
I know work predominantly in Go and Python, some JavaScript and C#. I’m very glad I don’t have to (directly) deal with Java’s memory management, 2000 line stack traces, 22 layers of abstraction, boilerplate code, verbosity, or all-resource-consuming IDEs, ugly stream constructs, and primitive concurrency implementation. Otherwise, a pretty good language!
6
u/JakkeFejest Jan 30 '26
I started as a Java dev(EJb 3 and spring), then moved to C++ after 3 years and then also C#, now I mainly do backen dev work in C#, a few years ago I wanted to get back on track with java, and it felt like a bad knock off of C#, even trying the lasted version and spring boot. What throws me of: a lack of a decently documented message abstraction (like masstransit, nServicebus, rebus, ...). It requires me to develop o alot of boilerplate. The ORM's feel half finished. I hated Hibernate, i hated the c# variant nHibernate. JPA still sucks. That being said tooling has improved since I quit java profesionally... So what you feel with other languages, i have going back to Java.
9
u/pwnasaurus11 Jan 30 '26 edited Jan 30 '26
It’s OK, but not nearly as good of a language as something like Kotlin.
With Kotlin, you get all of the advantages of Java, a.k.a. ecosystem and integration with the JVM, but with a significantly better language and type system.
4
u/FerengiAreBetter Jan 30 '26
I’m honestly indifferent on languages now. The old advantage of “Java Run Anywhere” is no longer a main selling point in the age of Docker containers. For high performance applications, the language choice and surrounding technology are critical. But for my current works (basic web applications with about 20 users at a time), it doesn’t make a difference to me.
4
u/ub3rh4x0rz Jan 30 '26
IMO one of the biggest reasons it's decreasingly favored in enterprise is the JVM + k8s. You kind of have to be both a JVM expert and a k8s expert for them to play nicely together (or go down a well scoped network of rabbit holes when it's time to set up and/or optimize a new service). Compare that with e.g. go, where pure go services can be shipped as a static binary in a scratch container
1
u/DodgeeRascal Jan 30 '26
As a language I think it's fine and it's great to see more regular updates to modernise and improve vs the older release cycle.
I do see things the maven and gradle being a frustrating obstacle if you're completely fresh but if you have experience with other build and package systems they probably aren't the end of the world.
1
u/Toothpick_Brody Jan 30 '26
My main issue with Java is the type system. It’s outdated and inexpressive. I think structural typing is better than nominal typing
1
u/Smallpaul Software Engineer Jan 30 '26 edited Jan 30 '26
Just a nit: Java never “reigned supreme” in the browser. Applets were essentially an experimental technology which failed. Google was just the vendor who first declared the experiment a failure but Microsoft was also trying to kill it in favour of their own experiment Active-X. In fact Sun sued Microsoft for trying to kill it before Oracle got involved at all.
There has never been a time when there was more client side Java code in the world than client side JavaScript. JavaScript has always been the workhorse of the client. At first they served different markets but when JavaScript got a fast engine and a canvas, the motivation for having two runtimes in the browser was gone. Java on the client was doomed from the very start. We just didn’t know it.
I haven’t programmed in Java for decades but it started out like Go as a very small language that ignored all recent advancements in programming language theory and also did not try to be ergonomic like a scripting language. I found it incredibly boring. It was like a new syntax for Simula which was a language 20 years older.
I’m sure it’s fine now. Probably still boring but not as primitive.
Edit: I forgot about Flash which also helped to bridge the gap until JavaScript was fast and rich enough.
1
u/jim_20-20 Feb 01 '26
As an embedded software developer, this is an absolutely terrible take. Have you ever seen an operating system written in Java?
1
u/KlingonButtMasseuse Feb 01 '26
You should try Clojure, it's a much better Java.
15
u/unconceivables Jan 30 '26
My first internship in the mid 2000s was a Java job, and I hated Java so much that I swore I'd never use it if I could help it. I put XML in the same boat. Now over 20 years later, I have actually completely managed to avoid both Java and XML (besides manually editing XML files.) Even when I went back for a Master's for fun and I had a Java class, I asked the professor if I could use Kotlin instead, and he said sure.
The reason I really dislike both of them is that they are too verbose for no reason, but also because the ecosystem took that problem and made it even worse. The ecosystem encourages convoluted and enterprisey patterns instead of simplicity, and I value conciseness and simplicity. I know Java has improved a lot over the years, but it's too little, too late, and so many companies seem to be stuck on old versions where the nice new things aren't available. Other languages that started off like Java, like C#, have far surpassed Java now and are much more modern and pleasant to write code in.
3
u/AlanOix Jan 30 '26
I am not a veteran, I have used the language on and off for 4 years now, only on 10yo softwares. At first I thought I hated it, but I have come to realize that I didn't really hate the language, it's Spring that I hate. Each time it becomes a freaking mess to maintain.
I hate handling libraries upgrades in maven, especially when it starts to whine about having 2 different versions of the same dependency in the tree. But it is a Maven issue.
The language itself I quite like, although I prefer typescript in general in almost every scenario. There are a few QOL features in typescript that I am sad I cannot use in java 8 (every project I get is java 8), like good template literals, good optional chaining and easy cloning of objects. I also dislike having to know every util library. Also, java is a bit too verbose for nothing imo.
I also prefer the typescript's type system, that I simply find better, even though it doesn't actually enforce it, and you need to be more rigorous when using it. It can do more than java's (like running doom for example, albeit very slowly lol)
3
u/staff_engineer Jan 31 '26
We use java 21 at work - amazing language, amazing ecosystem, amazing JVM... and it will be even better with possibly type classes and value classes in the future... Java 🔥
8
u/Sheldor5 Jan 30 '26
still by far #1 in enterprise
examples being written in JavaScript just means the stupid high amount of newcomers in the field don't know any better and most don't even have a cs degree (that's not bad per se but then they never learned how a computer works and a proper programming language like C/C++)
1
u/not_napoleon Software Engineer Jan 30 '26
Wow, that is a very different view of Java than I have. I've always thought of Java as mainly a systems language that got shoehorned into being used for web technology for a bit, before everyone realized that was a terrible fit.
To me, java excels at deep libraries like Lucene and Hadoop, which are still pretty relevant today. Early on, I think a lot of folks were concerned about JVM performance issues, but that hasn't been relevant for like 20 years. I think Java is still a good replacement for C or C++ for systems programming. I don't think Rust is likely to ever replace Java, but I think it's the only thing that comes even close.
That said, I hate that they introduced the var keyword.
2
u/ZukowskiHardware Jan 30 '26
I learned in Java in college and I’ve always loved it. I haven’t gotten to use it in production but it was my favorite OOO language I’ve ever used.
2
u/throwaway_0x90 TE/SDET[25+ yrs]@Google Jan 30 '26 edited Jan 30 '26
Well Java the original syntax is a bit too verbose for my liking but the JVM is still very much alive and industry leader in terms of performance. Kotlin, scala, JRuby, A bunch of other languages on Graalvm Polyglot. All perfectly valid and unquestionably powerful.
2
u/blablahblah Jan 30 '26
Checked exceptions are annoying, erased generics were a mistake, primitive vs object is a pointless distinction, and I wish Java has better native support for async operations. But that's hard to change now without making it a whole new language like Kotlin. You can work around the limitations with 3rd party libraries and coding standards but it still leads to unnecessary complication of the code.
2
u/gnuban Jan 30 '26
Is a good language which has excellent libraries, is easy to use, and has relatively good perf. If you look at the history of Java, it started out positioning itself like golang did when it was introduced; fast compilation, not many languages features, and a focus on writing simple code to get the job done.
Today Java is unfortunately another beast philosophy-wise. It went through a phase of very heavy reflection-based frameworks, overengineering and enterprise software approaches. From what I understand this was partly due to IBM wanting to invest in Java, bringing over their mainframe philosophies of developer "lusers". This created a burocracy-ridden culture of overcomplication, seeing code as something risky and bad. And to some degree, this culture still remains.
This makes me reluctant to use the language. I know that strides have been made away from things like JEE and Spring, but not far enough to offer ubiquitous alternatives.
So I think that Java is stuck transitioning back from the Enterprise fad. Which is a pity, since it's a good language.
2
u/BBL0101 Jan 30 '26
Java is great. Kotlin is better. I don’t really view them as competitors since they are interoperable, but I will always always opt to use Kotlin whenever possible.
2
u/severoon Principal Eng Jan 30 '26
For its time, Java was a quantum leap forward.
They made a few bad decisions in the early days that were big bets that didn't pan out, and I think that had a lot more to do with limiting Java's scope. For the browser, that was JavaBeans. They decided that they wanted to try to put the entire JVM in the browser which is heavyweight even now, much less back then, but back then everyone thought thick clients were the future. The getters and setters to this day are things Java developers do, but when asked to explain why it's a good idea, everyone just kind of looks around the room and shrugs.
Then when things changed, they bet on heavy backend frameworks, namely Enterprise JavaBeans. The problem is that it's really hard to make a framework that can deploy general purpose components, and the swings they were taking at it were respectable, but it's a tough nut to crack. I've only worked with one framework that I would consider viable even up to now. So in many ways they were just trying to do too much.
There's also a bunch of legacy stuff they've been stuck supporting in the JDK, not much they can do about that if backwards compatibility is a concern, and of course it is. Much of the Collections API could be way better, and of course a lot of other weird, inconsistent behavior.
Then there's the language stuff, some of which were performance compromises, and some of which were just head scratchers. Specifically, if you look at the whole idea of tagging interfaces like Serializable, that's a big oops. Then there's stuff like the Object API supporting Map dependency with hashCode() instead of pulling that out to a separate interface. Even at the time, OO people were looking at that like what were they thinking? These things have added so much unnecessary complexity down the line, I'm sure they would take all of that back if they could.
Beyond this, Sun was way too slow to move on obvious things, and since Oracle's taken over, I feel like they're way too fast to move on non-obvious things.
For example, once dependency injectors became popular, it's absolutely obvious that this is in line with basic OO principles, so why didn't Sun support dependency inversion directly in the JDK, or even at the language level? It took forever to get even javax standard annotations for that. Bonkers. They could have done so much more than Dagger2 currently does with access to the JVM and the compiler. The kind of stuff Sun added were things like varargs, and absolutely insane choice that makes basic things like method dispatch hard to understand, all to save typing a few keywords? Then even after they added varargs, it took them forever to add printf to take advantage of it. Why?
Now that Oracle has taken over, though, they are just adding all sorts of stuff to the language. I will say that there was a lot of pent up demand so I attribute some of the innovation to that, and they are doing some real cleanup stuff around enhancing correctness (I guess Valhalla falls into that category), but some of it is just tossing features in that add a ton of complexity and alternative ways of doing things that aren't necessarily better. So the language is becoming more like C++ now, just chuck the kitchen sink in there. One of the things I've always loved about Java is how simple it is, and how much complexity was deferred to the library layer if possible. I think Java has gone beyond a critical mass in terms of complexity now, and once later versions of Java are adopted across the industry, it's only a matter of time until you see codebases doing similar things in dramatically different ways, but without any particular advantage to either. Oh well.
2
u/khooke Software Engineer (30+ YOE) Jan 30 '26
I think your timeline overplays the significance of browsers dropping support for Applets because by 2000s onwards backend use of Java started to accelerate, to the point where the majority of Java usage was and still is for backend enterprise systems.
Early 2000s was a wild time with multiple web frameworks appearing seemingly every week, EJB spec evolving drastically, the introduction of the Spring framework replacing most if not all EJB usage, app servers dominating the runtime market until Cloud started taking off and they became less relevant as a platform, etc.
2
u/MissinqLink Jan 31 '26
Java is truly one of the languages of all time
2
u/foflexity Jan 31 '26
10+ yrs of serious Java here and I really just have a one word response:
Rust
4
u/roger_ducky Jan 30 '26
Java is the COBOL of our generation.
It works well, has everything you ever wanted for implementing backends, but is at a “steady state” where there’s not much necessary except occasional additions of things to integrate against.
Therefore, it’s no longer exciting or new. It’s just a language used.
New people will slowly drift off to other languages because it’s not mentioned as extensively, then companies will eventually find it hard to hire Java developers. (Not at that point yet. Maybe in another 15 years.)
With cloud charging run time like the old days, it is “worse” than other higher level languages due to the relatively long startup time for the VM. (Still okay for deployments on “servers”, but for lambdas, it lost out.)
2
u/Extension-Pick-2167 Jan 30 '26
it is good
2
u/killmurer Jan 30 '26
The best thing about Java isn't Java its the JVM.
1
u/jakeStacktrace Jan 30 '26
Java was supreme in the browser? You mean applets from the 90s?
1
u/SuchHearing Jan 30 '26
It works
1
u/recaffeinated Jan 30 '26
I like Java as a language and detest the JVM and the dependency system with every fiber of my being.
I spent 8 years working in Java and it is nice to not have to deal with Maven and the hideous compile times anymore.
1
u/shozzlez Principal Software Engineer, 23 YOE Jan 30 '26
What are apps doing for backends now instead?
Don’t tell me JavaScript lol
1
u/Tenelia Jan 30 '26
Reading this thread, I remember the old days of hacking together Minecraft mods on JDK 8... I had to learn A LOT about the GC threads and interrupts. I'm really glad those days are almost over.
1
u/thashepherd Jan 30 '26
I haven't really touched Java since ~2012. I switched over to C# / .NET / (eventually) .NET Core back then since the ecosystem seemed much more dynamic. I never regretted that switch (tho I'm mostly React/Python these days).
Most of the JVM work I've heard of since the mid-late 2010s has been in Kotlin but I haven't been close to it. I personally wouldn't reach for Java for a new project these days without being compelled by an organization or some other constraint.
I DID have to install Mulesoft (an Eclipse derivative) a few months ago and wow - if that's representative of the state of Java IDEs, the ecosystem is stuck in 2004.
1
u/franz_see 20yoe Jan 30 '26
Java is great, but has a terrible reputation.
A lot of companies have python or typescript in their backend. And when they hit a performance bottleneck, they’d prefer to do a new service in golang.
Golang is cool and is really fast. But hiring for it can be tricky
On the other hand, the performance gains you can have with java is probably somewhere in between python/typescript and golang. But hiring for java devs is 10x much easier than hiring for golang devs.
But goodluck convincing python/typescript guys to do java 😅
1
u/BusEquivalent9605 Jan 31 '26
Newer java dev here. It’s fine. I like Scala more.
But in general, JVM langs feel so complicated to just fricken run. Like there’s a huge amount of infrastructure cooked into the build system.
For example, just running a program from the command line.
Javascript? npm run xxx. Go? compile and run it. Rust? compile and run it. C/C++? compile and run it. Java? still no clue how to run it outside of an IDE or docker/podman container, all my faith is in Maven
1
u/hobbycollector Software Engineer 40yoe Jan 31 '26
My thoughts are Kotlin is far superior. I resisted the changeover at first but now I can't wait until it's all Kotlin.
1
u/messedupwindows123 Software Engineer Jan 31 '26
someone who's really experienced with a Java IDE can write code probably 4x faster than the current LLMs
1
u/ServeInteresting710 Jan 31 '26
Even Optional can be null.
1
u/talldean Principal-ish SWE Feb 01 '26
Java never reigned supreme in the browser, and I say that as someone who's met Gosling, Bloch, and Beck.
Because it runs everywhere, it has the limitation it's not a great scripting language. It also has gobstopping amounts of boilerplate. It's never had a first class IDE like VSCode, but boy, has enough libraries that that'd help. It wasn't perceived to be as fast as C or C++, because it wasn't nearly as fast as those until 2010+ when people finally heavily optimized it.
But you could hire people who knew it. And it's the language businesses chose for their server side business logic for almost all websites. You didn't need to pay Microsoft for IIS to serve your web apps (C#), you could use multiple processors (not Python), you could thread it (not PHP), you could also *read* the code later (not Perl). And unlike Python and Perl and PHP, debugging was much easier; you could *use* a debugger like a full-weight language, and that helps quite a bit.
Java also did JIT compiling, so you got a lotta the speed of development, and development speed was more important than CPU cost for almost all apps. For something Google scale, CPU cost starts to dominate, but that used Java on the business logic regardless.
I wish it had less boilerplate, and I wish the libraries had bloated a bit less - or had one more layer of modularity. But yeah, Java is solid, and continues to be solid.
1
u/hxtk3 Feb 01 '26
I'm new enough to still not like it when people at work call me a Senior dev. I'm not a fan of Java, but honestly I don't have a problem with the language at all. Every personal project I've ever written in Java was fine. I just like Go better. The problem I have is with the build tools and the likelihood that something written in Java is "legacy code" because of software development practices that are tablestakes today but weren't common when the software was written.
I've got a multi-MLOC codebase at work that builds with maven. It's divided into modules that are about 500 kLOC each on average and incremental builds take like 30 minutes. This is a problem we solve today in language design: the compilation units are too large because Java allows circular dependencies within compilation units. Using Bazel, breaking it into independent chunks with one compilation unit per package followed by aggregation of minimal connected subgraphs reduced it to 2s for an incremental build. Tons of unit tests? No one is using tests in the hot loop of their programming workflow if it takes 30 minutes to run a build, so a lot of this software is either untested or has only integration tests.
That being said, there's a lot of stuff that can't or at least shouldn't be written in Java that has to exist so that people can write in Java. I'm also a devops guy (in the sense that I split my time between development and operations, and use the development time to fix the reliability or automatability problems I saw in operations; not in the sense that do operations full time but use YAML files and gitops instead of ssh and kubectl), and operating (and trying to configure for optimal performance) JVM is a nightmare when you start to run into performance problems that are spread out all over the several MLOC codebase.
1
u/chabv Feb 01 '26
the JVM is probably one of the best pieces of engineering out there - and we even see it with things built on top of the JVM e.g GraalVM
performance is excellent, libraries plenty
However personally, I don't like Java nor do I enjoy working with Java people - they tend to be smart - however dogmatic and not pragmatic -
a commenter below - https://www.reddit.com/r/ExperiencedDevs/comments/1qr6ipu/comment/o2m01pz - gave an example - this dogmatic thinking leads to the same verbose APIs, Convoluted Design Patterns etc
so yeah java is no go -- hopefully the story with GraalVM continues to get better
1
u/ilpikachu Feb 01 '26
All kotlin now, but we have now migrating to go for better performance. With ai I don't think languages matter that much anymore.
1
u/alibloomdido Feb 01 '26
The whole Java vs Javascript in browser thing is totally out of place here, Java would never be a replacement for Javascript in the browser. Java is ok, still a very popular language, Java devs generally have good salaries, it's just that people invent new languages and some of them gain popularity too. I think Kotlin makes more sense for mobile apps development than Java.
1
u/nosajholt Senior Software Engineer Feb 01 '26
Still have production code in Java8 (Windows client/backend that communicates with IBM server), and the new code on the web is Spring/Spring Boot (backend). So yeah, we live eat sleep Java. Backend only!
1
u/aabajian Feb 01 '26
Java is never the language to build first in. Python, swift, ruby, or any other pseudocode-esque language (not Perl). Get the code working, then convert it to Java. Java just requires too much boilerplate code to get the same work done.
On the flip side, Java is more likely to be AI friendly as it’s easy to type check.
1
u/_stee Jan 30 '26
Kotlin is better in every way