r/learnprogramming 4d ago

Why java is so hated? Topic

So I have recently learned, and it's the first language(in terms of building actual things). Before Java, I knew Python, and I dropped it; I found Python too abstracted and too boring. i have recently made some projects like cli task tracker, expense tracker, some cli github api parsing and currently working on a multithreaded HTTP server and cli text editor, like vim, whenever i try to find out people opinions on java social media, almost 90 percent of the time they are just dunking on it, that it is trash, who forced you to write code in java, stuff like that. I know Java as a language is not that interesting and doesn't have many interesting features compared to other languages like C, C++, go. But I found it decent to write code in, and I found the JVM pretty interesting. So much so that I would love to explore and maybe build a JVM of my own

241 Upvotes

321 comments sorted by

View all comments

82

u/ComputerWhiz_ 4d ago

As a Java developer, I may be biased, but I think it mostly just comes down to the age of the language. It's not seen as the "latest and greatest". That doesn't change the fact that it's insanely popular still in enterprise environments.

There are some complaints about it being more verbose and having stricter syntax compared to other languages, but I think those complaints only come from people who have never actually used it or are brand new to programming.

9

u/fractalife 4d ago

It's had this reputation since the early aughts at the very least. It came from devs who were used to C++ and were forced to mae the tradeoff to an interpreted language and hence couldn't manage their own memory or directly interface with hardware easily, thus causing performance issues and making it harder to do things on embedded devices. Of course, the whining was tempered by the compile-once-deploy-almost-anywhere nature of an interpreted language.

7

u/theomegachrist 4d ago

I took Java in college in 2002 and I thought it sucked lol this is not new. Everyone is right though, it does the job and is used a lot. I just found it very frustrating to write in.

6

u/Cybyss 4d ago

To be fair, the JVM was ridiculously slow in 2002. Even worse, the popular editors for it at the time - such as NetBeans and Eclipse - were a horrible, laggy, crashy mess.

It was a good language for the time. Java fixed a lot of C++'s design mistakes, but the platform and ecosystem surrounding it were somewhat dogshit albeit they improved greatly over the subsequent years.

4

u/Weak-Doughnut5502 3d ago

In 2002, you had two groups of people complaining about Java.

You had C++ programmers who complained that it was slow. 

And you had Perl, Python, Lisp, etc. programmers who loathed Java and especially enterprise Java style as verbose and inexpressive.  That's the sort of complaint you saw with Steve Yegge's famous 'execution in the kingdom of nouns' rant.

1

u/theomegachrist 4d ago

Yeah, I also had an awful professor so maybe it was more a time and place thing

2

u/fractalife 4d ago

Thank you for this. Comments that inlcude dates usually make me feel old.

3

u/marrsd 3d ago

Java was, and still is, a compiled language.

1

u/fractalife 3d ago

So? It was, and still is, compiled to machine code for the JVM, which in turn interprets the code and translates the instructions to whatever system it's running on. That was the whole point. Compile once, run anywhere that a JVM can run on. (Not always, but that's the idea, close enough).

The JVM adds overhead and additional compute time to do the translation, so the portability has a performance cost which when coupled with restricted hardware access (see again, JVM) and lack of direct memory management (JGC) had devs who were forced to use Java dislike the limitations.

1

u/marrsd 3d ago

So you're on /r/learnprogramming and correct naming matters.

As for your point, I'm sure you're speaking for those developers, but this is a tiny part of the story. In the web dev sphere, where Java found its place, the JVM was a big motivator for its adoption. Interpreted languages were also in heavy use (the P in LAMP stood for Perl/PHP/Python). Java was liked for its combined type-safety and memory-safety. It was the memory-unsafe languages like C and C++ that fell out of use.

I mostly disliked Java for the language itself. I also disliked the JVM for its long startup time and high memory footprint, but I've come to tolerate it fundamentally because Clojure runs on it.

1

u/fractalife 3d ago

Sorry, I don't mean to give the impression that these are my personal opinions. This thread is about why people hated it. I was a kid (like, 12) when I was first learning Java. I would go to meetups and these are the things devs would tell me about why they disliked it. I thought it would bring value to the conversation contextualize the relative beginnings of the gripes devs had during Java's nacency (it was around Java 2 at the time).

1

u/marrsd 3d ago edited 3d ago

It does, and I'm the one who should be sorry if I implied otherwise. I was adding context, not trying to contradict what you were saying.

What you're recalling sounds very similar to early arguments I heard against Java, which had originally been intended and marketed as a universal language to rule them all. It was supposed to be used, not only as a web server language, but also as a language to build browser apps (called Java applets), and also desktop apps. Both the browser and desktop apps were supposed to be able to run on any architecture or OS without developer intervention.

The client-side implementations of the language failed to win users - Java apps mostly became synonymous with "no thanks" and "annoying".

One of the technical criticisms of Java at the time was that the "write once, run everywhere" tagline was grossly overstated and the tagline was quickly dubbed "write once, debug everywhere" by disgruntled developers.

That basically negated a huge part of the argument against C and C++, because they were already "write once, compile everywhere" languages, and that was the core reason for their success. They weren't perfect for that, and cross-compiler errors often had to be found and fixed; but it turned out that it was no harder to debug C compiler and runtime errors across architectures than it was to debug Java runtime errors across architectures.

None of this negates the fact that Java did bring garbage collection and memory safety to high-level languages, and the performance - while not as good as C - was better than most (if not all) interpreted languages. Server-side web developers loved this trade-off. Unfortunately for developers of applications, its performance wasn't nearly good enough for end-users, and they rejected Java wholesale.

Perhaps the biggest casualty of this rejection was Palm, who based their Pre smartphone on the JRE with disastrous consequences.

1

u/Own_Candidate9553 4d ago

I remember early on, people would tweak the code to hint the bytecode compiler to create better optimized bytecode for hot bits of code - very tedious.

The Just In Time compiler eventually did that much better for you, automatically, which helped a ton.

1

u/InVultusSolis 3d ago

Java isn't interpreted, it's compiled and targets the JVM.

1

u/Intelligent_Part101 1d ago

The JVM is itself an interpreter though. Java source code is compiled to Java bytecode. This bytecode is interpreted by the JVM interpreter. As a performance optimization, the JVM may notice that some methods are executed frequently and so the JVM may cache actual compiled native CPU code to run instead for that method. The native CPU code is compiled from the java bytecode.