By criticise, I mean expressing a negative emotional response to, which can be characterised by an unusual “I hate Java” response. (Can you really hate a programming language?) The response might be due to previous experience with Java, but I’m guessing not. Having looked at Java without ever having used it in a large scale project (and here I don’t mean having pissed and moaned for a few weeks while other people did work) does not qualify you to comment.
In the unlikely even that the authors of the kinds of comment I’m talking about actually have some experience with Java, unless they have criticism that is a) to the point or b) doesn’t consist of “it isn’t (the same as) my preference”.
Being to the point when criticising programming languages is difficult; one typically needs a specialisation within the field of programming-language design in order to comment on the way particular programming languages implement different things. Examples of valid criticism are difficult to come by as the talk section for Wikipedia’s Criticism of Java article testifies. An interesting aside: academic interest in programming language design may provide tools to avoid pitfalls like using “ZOMG” in discourse you expect to be taken seriously and making a fool of yourself by stipulating personal preference as universal truth. This latter point segues nicely into the next paragraph.
“In language X you can do Y” comparison arguments are simply fallacious. Claiming something is great because it allows you to easily do stuff that is difficult in elsewhere isn’t an argument — what is difficult for you is easy for me and vice versa. Recently, the [now deleted] IntelliJ JEE Hello World tutorial has been passed around as satire. While the tutorial itself presents everything all at once in a pedagogical way, those mocking it fail to grasp the point of JEE; JEE is a vast framework that will allow one to do many, many things reliably and relatively consistently. Sure, this comes with an overhead, but so does any large-scale framework (of which there are precisely zero (0) comparable frameworks — .Net comes close and is similarly and unjustly derided).
I use several dynamic, “cool” languages daily — those typically held up as the antithesis to the “stupid” JEE approach — and the thing I note is that they typically don’t make for resilient code that can be trusted out-of-the-box, rather they provide the kind of feeling I get from PHP in general. In order to create something remotely comparable to the JEE Hello World in such languages, I could spend several months and find I’ve wasted my time in the end as it is provides the same “ugly” abstractions as JEE without any of the breadth and depth. Realising this will save time and energy; one don’t need to spend time messing about creating code that attempts to simulate things that already exist elsewhere.
And that time can be usefully applied to learning useful skills — like functional programming — that can be applied in a “cool” hobby language as well as Java . So that’s all win then.Epilogue: If working with Java feels like you’re limited and not pushing code regularly enough — not doing “real programming” — that’s because you equate real programming with writing a lot of code because you’re accustomed to implementing common patterns and not having the helping hand of convention. This is a really cool way of creating technical debt and learning how to create unmaintainable spaghetti. Of course, if you’re that spiky haired, next level ninja™, feel free to ignore what I’m saying. And please don’t work where I work.