Why Java sucks : Highly subjective

Java was the first language I learned properly. I cobbled together stuff in BASIC for a few weeks, but for Java I bought 2 books and programmed a lot of stuff. That was 4 years ago, I was young, not so experienced, and Java was God to me. It was cool, it had GUI libraries, and lots of people used it. And the WORA concept was quite cool to me then.

But since about a year, Java is slowly moving from Cool to Crappy in my dictionary.
Some how the whole thing seems to be a plot to let mediocre programmers take over the world, cobbling together 'stuff' in their spiffy IDEs. ( Yes there is some good software, Azureus is one that I have experience with )

To me the very fact that a language needs an IDE to get any big stuff done is a big turn off.

Tools


Every shitty small task needs a framework. Bloated pieces of shit with so many classes and fancy UML diagrams that it gets boring to even learn them.

And there are so many IDEs and so many addons that I'd probably waste a lot of time finding the perfect tool, before I started coding.

Code Noise


Java programmers seems to have this penchant for Really.Long.Names.In.DeeplyNestedPackages.

Design Patterns seem to be a half-hearted cure for the disease that is Java. I mean how many other languages do you know where people actively use the term Design Pattern. You have these big classes, with big names that basically convert one thing to another. Like AbstractFactoryDecoratorSingleton ??

Then there is the need to type a lot of stuff for something which should be simple. Where other languages have print, Java has System.out.println. I don't care about preserving your heirarchy! I want to print quickly. Where other languages have open("file") Java has


try {
f = new FileReader("./words.txt");
} catch (FileNotFoundException e) {}
BufferedReader in = new BufferedReader(f);


Even C/++ is not that bad. Even assembly is better considering its level

Java also has too many acronyms. JNI, EJB, JEE, AOP, ORM, JDBC, DAO. This again is due to Java's corporate nature. You should have realised by now that I'm quite against corporate programming :). I mean isn't Swing much cooler than SWT/AWT.

Less Code, more on How to Code


Apart from the Code Noise, Java programmers are forever arguing about the (de)merits of Agility, Aspects and Models.

Inflexible


In Java almost everything needs double or triple wrappers and lots of passing around. Supposedly for security, but most probably to prevent lousy programmers from messing something up. There are so many things you can't do. Considering the context that Java aims for, in web services and desktops and games rather than mission critical application, I'd thought that keeping things simple and flexible would be much better. I'm not saying dump the type system, but simplify the APIs, lose the structure, drop the formality. I think Python and Ruby have done this very well. The only bit of humour in Java seems to be 0xCAFEBABE.

Give me duck typing any day.

BEFORE YOU COMMENT, THIS IS SUBJECTIVE, MIND YOUR LANGUAGE. You can call me a egoistic ignorant moron, but not something which would make a profanity filter shudder.