I agree with your assessment, Miramon.
There’s a TON of terrible code written in Java… because there’s a ton of code written in Java. Java doesn’t intrinsically have bad code, but rather enables it (whereas there are probably developers who can write bad java programs, who simply could never get those programs to work AT ALL in other languages). This, however, is not a fault of a language. You can certainly write perfectly good, efficient code in Java.
Regarding the notions of abstraction and verbosity in the language, as you allude to, this was all an intentional design decision by Sun when they made the language… and really, it’s one of Java’s greatest strengths. It’s WHY it has become the “industrial” programming language.
Java often gets faulted for having so much “boiler plate” code… for requiring code that isn’t really focused on the core functionality of the application being made. But in many cases, I think this is an empty criticism. Most of the time, you aren’t writing that code anyway. It’s being generated by the IDE. Likewise, most of the time you don’t even need to see a lot of it. But the verbosity of Java was a conscious decision by Sun, because they wanted to make Java into a language that moved away from many of the programming practices that were used in languages like C++, where every programming house effectively used complex type defs and macros and crap to turn C++ into their own custom language.
Generally, if you know Java, you can pick up any piece of Java code in the world and quickly grasp what’s going on in it.
And nowadays, Java is fast as anything else in terms of execution performance for almost anything you are gonna do. While you could technically make more efficient processes by writing them in C, MOST of the time the average programmer is gonna make less efficient system. And if you are making a complex system, you’ll almost certainly be able to develop it in a much shorter time in Java than pretty much any other language.
Again though, it’s just a tool that any competent software engineer really should have in his belt… along with C and C++, probably a language like LISP or Scheme, and maybe something like Python or Ruby or Perl. And should be able to learn any language that gets thrown at them.
Re: javascript… ya, I’m not a fan of javascript. And I think a lot of folks confuse the terribleness of javascript with java.