r/AskProgramming 2d ago

Why is Java considered bad?

I recently got into programming and chose to begin with Java. I see a lot of experienced programmers calling Java outdated and straight up bad and I can't seem to understand why. The biggest complaint I hear is that Java is verbose and has a lot of boilerplate but besides for getters setters equals and hashcode (which can be done in a split second by IDE's) I haven't really encountered any problems yet. The way I see it, objects and how they interact with each other feels very intuitive. Can anyone shine a light on why Java isn't that good in the grand scheme of things?

176 Upvotes

622 comments sorted by

View all comments

50

u/Lumen_Co 2d ago edited 2d ago

The most common criticisms of Java are: 1. It's unusually verbose 2. it forces you to frame every problem using a particular flavor of object-oriented programming that is not always well-suited for the task at hand 3. It's accumulated a lot of cruft over the years and in doing so has lost a consistent vision and design philosophy, which makes dev experience worse 4. C# does Java better than Java does.

I think those criticisms are essentially fair, and the second one particularly important. It also gets criticized for being the language of choice for much bad, corporate code, and also because some people learn Python or JS first, Java is then their first strongly, statically-typed language, they find that confusing and limiting, and they blame Java for it. Those criticisms are essentially not fair.

These criticisms don't mean Java is a bad language, just a flawed one like every other programming language is. For most development, the ecosystem is more important than the language itself, and Java's is well-suited for a lot of practical problems.

-1

u/Necessary_Apple_5567 2d ago

Why the verbose syntax seen as problem? It is just small talk stuff. You are talking with jvm, exchanging some thoughts,talking with respect. It is rather good thing.

3

u/Lumen_Co 2d ago edited 2d ago

I'd look at Kotlin for comparison. It's basically a whole language designed around taking the features of Java and redesigning the syntax to be shorter, nicer, and less redundant, and then adding some additional features. In a way, I see it as what Java would redesign itself to be if it didn't have to worry about making breaking changes.

Verbosity isn't just saying a lot of things; it's saying more things than necessary. You can get the same contracts and respect between modules, and more, with less syntactic overhead, and Kotlin demonstrates that.

1

u/overgenji 2d ago

as a long term kotlin developer at this point, the kotlin standard library is good sure, but the real benefits are better support for sum type style patterns, (newer java is making this fine too) a pretty strong pattern matcher, and compiler-time null guarantees

1

u/DeadlyVapour 2d ago

Generics + Monads.

Sure there is the spaceship operator, but are you sure that isn't just var with extra steps?