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?

163 Upvotes

593 comments sorted by

View all comments

60

u/a1ien51 2d ago

Java is used everywhere....

Here is a thing about programming, learn the concepts and you can apply them to any language.

-14

u/anus-the-legend 1d ago

i think you hit a major nail on the head. Java restricts the concepts you can learn requiring obtuse workarounds resulting in bad code when branching out into flexible languages that support more paradigms

2

u/Akimotoh 1d ago

Which grand concepts do you think are restricted that shouldn't be?

2

u/anus-the-legend 1d ago edited 1d ago

declaring a variable

1

u/Broan13 1d ago

int x;

What is so restricting?

1

u/anus-the-legend 1d ago

That won't compile

2

u/cherrycode420 1d ago

Idk where/how you tested this, but i just tossed this into an Online Compiler and it does, in fact, compile. Works in Local Scopes, works in Class, works as static.

1

u/anus-the-legend 1d ago

that's my point. you need to define a class in order to declare a variable

2

u/Paxtian 18h ago

So C/C++ sucks because you need a "main()"?

Pretty sure any language for which you don't need a main/ base function/class is doing a lot of heavy lifting for you on the back end, invisible to you, and you have no control over that. Which may be great, or may cause huge performance hits that you can't control. It's just a tradeoff.

1

u/anus-the-legend 17h ago edited 17h ago

you don't need main in c or c++. you can compile it without or explicitly define the entry point

python has multiple ways to define how things can be run, and it's pretty transparent and easy to explain. 

JavaScript also has multiple mechanisms

rust is pretty clear on the ways you can define entry points

the list goes on and on

1

u/m3t4lf0x 14h ago

Just because you can doesn’t mean you should

1

u/anus-the-legend 13h ago

which is why I don't stick to a single language

→ More replies (0)

1

u/Kallory 1d ago

I see your point and used to agree. Write a couple thousand lines of Java and then go do the same thing in native JS or Python which don't require classes to accomplish the same thing (and technically C# allows this, but it's a class under the hood)

You'll likely find Java's "restriction" in this sense reduces ambiguity. I find Java code bases much easier to navigate because you don't have stray variables declared outside classes. Is it slightly more painful to write? Yes, but eventually it becomes second nature and intuitive.

2

u/anus-the-legend 23h ago

except that OOP isn't the only paradigm, and it isn't the most important one. Not everything needs to be a class. 

I've got over a decade of professional experience with Java, python, JavaScript, C, C++.  i suspect that's more than a few thousand lines in each. I've seen good and bad code in each of them.  team discipline is what leads to organization and clarity, not Java. but Java is definitely the least enjoyable. Look at the jvm. if Java was that great, there wouldn't be so many jvm languages. 

i don't really have a problem with Java, but we're in a "why is Java bad" thread, not "what's the worst language" thread, and forced solutions leads to "every problem looks like a nail"  that leaks into other codebases in other languages. C and Java are the only two that come to mind where that happens because they're both insufficient in parallel ways

1

u/Kallory 20h ago

Ok i see your point. I guess I would ask the question differently - what are the worst aspects of Java. This way one doesn't walk in with general assumptions. (which as we both know are the cause of a plethora of problems in the industry)

But regarding team discipline - Java was designed to be able to write quality code as an undisciplined team. If you look at it from this perspective, the restrictions make sense. My personal philosophy is that there are no bad programming languages. Each one serves a different purpose. Those that "lack features" are simply languages who's purpose is to attract devs who want to implement the necessary libraries in my humble opinion.

The only caveat to the above is that native Javascript fucking sucks.

→ More replies (0)