Hacker News new | ask | show | jobs
by strictfp 1368 days ago
This is why I left Java. Everything "looks nice" on the surface with annotations, but you loose the flexibility of code and a lot of the available tooling. Plus you need to be a real expert to debug issues and solve problems; understand framework architecture and read reflection code. You can't just put a breakpoint in there and start debugging. It's optimizing for the wrong thing.

The bad news is; this culture is permeating somewhat into Rust now that more Java devs are moving over.

This whole attitude is IBMs fault. They tried to get into the Java market by applying their big iron terminal thinking to create Java EE.

Java under Suns management was a lot more like golang today; pragmatism, fewer language features, and focus on writing code.

5 comments

Java EE was created by Sun themselves, it was reborn from a Objective-C framework for OpenSTEP called Distributed Objects Everywhere, better get your history straight.
Interesting. I can't find any sources for the IBM story, but I thought I read it here on HN. I found at least one similar comment; https://news.ycombinator.com/item?id=30538784 .

So you're saying it was just Sun and not IBM?

Yes, unless you consider Wikipedia info possibly bogus.

"By the time DOE, now known as NEO, was released in 1995,[1] Sun had already moved on to Java as their next big thing. Java was now the GUI of choice for client-side applications, and Sun's OpenStep plans were quietly dropped (see Lighthouse Design). NEO was re-positioned as a Java system with the introduction of the "Joe" framework,[2] but it saw little use. Components of NEO and Joe were eventually subsumed into Enterprise JavaBeans.[3]"

https://en.m.wikipedia.org/wiki/Distributed_Objects_Everywhe...

Interesting. I'm not arguing, but I'm very interested in this history, because I was personally bit by Java EE.

The EJB wikipedia page says that IBM developed the first version

> The EJB specification was originally developed in 1997 by IBM and later adopted by Sun Microsystems

, and there's also some other references online about "San Francisco" being folded into EJB;

> The San Francisco Project (SFP) basically failed, with much of the technology being folded into other efforts, notably Enterprise Java Beans (EJB) in 1998.

https://redmonk.com/jgovernor/2005/11/07/time-for-ibm-to-res...

https://en.m.wikipedia.org/wiki/Jakarta_Enterprise_Beans

Might it have been a combination of both?

I'd love to get a deeper analysis of the history.

Java EE might have been one of the most colossal time wastes foisted onto well meaning developers in all history.

I think that played played a huge part in the rejection of these heavy frameworks we saw in the early to mid 00's, and some of early Agile's (XP) resistance to complexity and speculative development. And also why Spring became a thing. Now we view Spring as the heavy and complex beast!

Yeah, might have happened like that.
The article is talking about Quarkus, a framework that uses the same annotations but which generates Java code at build time. So there's no reflection and you can navigate with your IDE or debugger into the framework code to understand what it does.
The things you hate about working with Java, that you mention in the first paragraph, are the basic things that Java devs have to do, or actually any dev in any language.
In a sense this is about the fundamental difference between frameworks and libraries. So to a certain extent, you're right. But there's extra complexity in not knowing why some annotation was picked up. With any API call you know you're trying to register something and can debug into it. With an annotation project you're sometimes stuck at "nothing happens".

Which is also true for node projects I guess :D

And the metaprogramming comment stands IMO.

Any dev has to be a real expert and read reflection code to debug issues?
It makes me laugh how people mention that C# or Java has "magic", which is just the lack of understanding a feature of the language, but in the same breath says that Rust doesn't have this problem. I rather be able to debug a C# attribute than a Rust one.
Usually C# don't utilize AOP so much like Java, so language attributes are acceptable
Seriously, the speech is from the 2000?