Another Java Disaster: Jobs
jroller.com
jroller.com
It's so easy to embed a Jetty web server in Java and just solve your problem from the basics, I'm always astonished at the work that goes into getting these frameworks to do the job for you.
Java is a fine language and I still enjoy programming in it. The problem is that a large portion of the professional community is very obsessed with these huge frameworks, libraries, and convoluted design patterns. I often faced a lot of opposition trying to simplify our Java platform at my previous job. In the end we were able to completely replace jboss with a simple tomcat instance, which is vastly simpler and much quicker/easier to develop with.
I think it may have even influenced my decision to use Machinist instead of factory_girl as my fixture replacement in Rails.
As one commenter already put it, so much of Java frameworks are overly engineered. Which begs the question as to why do so many implementations at so many corp situations I've been in have developers under engineering usage...
I take it business probably sees over engineered goods as "less work" for developers to code. This perhaps allows the hiring of "lesser qualified" engineers...hm...
There are some cases this makes sense for (scientific computing, machine learning, etc), but I think nirvana in the community is being able to write an app via XML configuration files.
In fact, it seems downright dangerous, because it encourages changing implementation directly on a production system rather than forcing changes through a change-management process.
Agree on the Quartz though. Oracle uses it for all the scheduling within it's all the applications. It has some jdbc connection leakage that Oracle wouldn't fix and it will require restart of your app almost every week.
Relaible software that you don't have to maintain is really valuable.
But, they say, if it's written with frameworks then it's written in a "standard" way. You don't want to sift through a bunch of "cowboy code!"
I have never seen this work in practice. Framework spaghetti is every bit as opaque as badly written uncommented crap code. At least the latter tends to be concentrated in one place, rather than shotgun-scattered all over a bunch of weird .XML configuration files and different projects all over the place.
I routinely find myself asking: "what problem does this solve?"
"But it's enterprise!"
Edit: just remembered the best term for what afflicts the Java community: architecture astronautism.
Not that this excuses the mad world of enterprise Java applications....
The enterprise Java conventions are even worse, like a convention for mandatory getters/ setter.
Good framework in a good language can save a lot of work even for a big complex application.
Extreme programmers are bad enough, but at least they encourage things like minimal interfaces, test suites, and pair-programming to stop the API becoming unreadable.
I'm not kidding here. I got fed up with Java about 5 years ago and taught myself Rails and Ruby, but I kept programming in Java largely because of work requirements. Every time I got to write nice, clean POJOs, life was pretty good, and I felt productive and enjoyed coding for long stretches. Every time I was deep in frameworks (spring, struts, hibernate, etc), I felt like checking email or HM or just going home.
I like Rails, but even then I find myself fighting with the framework eventually. I'd say with Rails, the trade-off is easier to stomach - I get so much out of Rails that I'm not as unhappy when I have to figure out how rails does something. With Java, I'm even more tempted to just use the lowest level I possibly can, in the belief that the up-front cost to productivity will be offset when I need to do something that isn't easy with the existing frameworks. Another factor in all this is mental space. I can keep the core language in my head, but I can't possibly keep all the frameworkish stuff in there, and in Java, even if you find an article on using spring to do something, the example never works (strangely, in Rails, it usually does).
The problem is... I still do need these things in Java as well. It does feel a little dumb to write my own MVC framework. I like auto-generating the dev database from annotations. I don't like Spring, but Dependency Injection actually is pretty damn useful for swapping out different implementations of a constant interface. I could go with something else, I guess...
This is a tough one, and it's typical of complexity creep. Each individual decision makes sense, but after a thousand little tiny pieces of complexity are added, you step back and realize you have a monster on your hands.
BTW, I would like to point out that design patterns are just syntactical/mental constructs for programmers to do something in a less expressive programming language. For example, the Visitor pattern makes very little sense if you have functions as first-class values, i.e. closures. Same for the pub-sub pattern if you have used a programming language which support dataflow variables.