All gigantic systems are crappy, no matter what their underlying language/paradigm is. Slightly less crappy is a win.
All gigantic systems are crappy, no matter what their underlying language/paradigm is. Slightly less crappy is a win.
I'd bet you are dealing with over-engineering, which is a cultural issue within the Java/J2EE community. And perhaps a lack of closures (I prefer those over list comprehensions, since they are more general) which make java needlessly verbose.
You can do procedural programming in Java, but you'll have to make all of the functions methods on some dummy class. This is cumbersome, which is the real complaint here. The "everything is a class" mentality is both an issue with the language and an issue with the community, but we tolerate it because they still make useful programs.
Everyone needs a little "re-education" or assimilation in order to switch languages and not write puke-tastic code in languages you don't use every week. A seasoned Java programmer will likely have no trouble writing correct Python code, but you have to wait for a few dozen sleep cycles before the programmer will write idiomatic Python code.
1) A lack of closures, which, as you point out, turns every obviously functional problem into a ridiculous object model.
2) A culture that creates libraries that suffer from over-abstraction, over-engineering and that tend to model a technical aspect of a problem rather than what a non-expert end user of the library would find intuitive.
I couldn't disagree more. Languages are as they are designed to be. Erlang is FP and Java is OO by design.
It does not have "mandatory OOP" but it remains as mainly imperative OO-language with some FP-goodness. C# is the same, Java - not.
Honestly though, this misses the point. If your language forces you to use an unsuitable paradigm, it's time to use another language if you can.