Why Java sucks : Highly subjective
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.