“Properties are bad and should not be allowed in Java”
Wow… Once again, I’m impressed. The above is from a comment in this blog post. I remember admiring java for what it offered back then: innovation, garbage collection to the masses, clean APIs etc. More than 10 years have passed since my initial impression, and I can safely say now that this admiration has turned into despisement.
I’ve never denied that I am a .net fan, perhaps because it proved to be so much better than Java when it came out, containing (most of) the right parts from C/C++ while neatly offering what Java did and more. Not only that, but each version of .net and C# (my primary language of choice in the platform) offered an enormous amount of innovation.
It’s a fact that when .net came out, nobody cared much, apart from the Microsoft crowd. Everybody was talking about how Microsoft copied Sun’s invention and how C#/.net was a rip-off of Java. 10 years later, the .net platform is so ahead of the Java one, one can recognize patterns of Sun (and now Oracle) closely copying some of .net’s developments back to Java. That’s of course limited to stuff like Enums, Attributes (called Annotations), strings in switch statements and so, nothing really advanced (such as say, LINQ or DLR).
[more]
But, enough with the Java bashing. I don’t want to focus on that (for various reasons) and I only mentioned it so that I can pinpoint the blame. So, who’s to blame? The Luddites of the Java community that seem to hold innovation.
To be honest, I’m using .net as much as I can. I love it. I am not a fanboy, but I really enjoy working with it. Even when I’m forced to use other platforms, such as good-ole C++, PHP, Java, etc, I will first check whether a .net solution is feasible.
No matter what my preferences are, I still don’t want to see platforms I work with wain and become irrelevant. I want Java to become a modern language, I want it to copy the functional innovations C# brought to an imperative world. I want it to have proper generics. I want to have properties that simplify the development without sacrificing verifiability. I don’t want it to disappear; that would only make the fanboys happy (and really, who gives a damn about them anyway).
All in all, I want the Luddites to shut the hell up and to see Oracle ruling the Java world with an Iron Fist ™. Well, that sounded wrong. I mean an Iron Fist on the Java architecture teams, much like Microsoft does. Hate it as much as you want, but what allowed C# and .net to become modern and slick, were the genius minds of its creators and not the subgenius whiny little bitches that, while have no idea on how to properly design, support, extend and use a platform, actually demand that all innovation should cease. Just to be clear, I include myself in the subgenius crowd (just not on the whiny bitch one). I am smart enough to know that I am not smart enough to create a high performant language & platform and as such, I want the people who’ll actually do the work to be smarter than I am, so that I can get back to creating web-sites and crappy business applications we all hate (but also love to design and plumb together).
You give me new features? Great, I’ll sit down and learn about them and try to make the best of them, not whine about “how they killed the simplicity of my language”. This is what I think of the Java Luddite part of the community.
Hey, would you guys like some shiny new operator overloading? “Nooooo, it confuses and infuriates us; we don’t read component documentation anyways so we have to make sure that everything is dumbed down as much as possible, even if we have to do stuff like a.add(b.multiply(c).subtract(d)) where a+(b*c-d) would suffice”.
This goes on and on for about EVERY damn feature that’s to be introduced in the language. What about Properties? “Nooo, they are bad and should not be introduced. So says me, the anonymous internet commenter”.
Okay, but Closures sure sound nice and useful, right? “Ummm, I don’t know, they look scary. What’s wrong with writing a few extra 100 lines of code here and there?”
I can go on and on but in the end you will find that, in most questions like the ones above the answer is “X is considered harmful for the Java language”. It’s nearly impossible to teach new paradigms to these people, but apparently their voice is loud enough to keep java from becoming a truly modern language. Sorry, it’s not modern anymore, deal with it.
In the end, the solution is to release Java v2.0 which will do away with the stupid limitations Java 1.x has and will build on a more flexible model, with time saving features from other languages and correct implementations that were broken before (such as generics). For f***’s sake, copy Microsoft, Python and Ruby on that – you won’t have to feel shame for it.
You also don’t (and shouldn’t) have to make it fully backwards compatible – you can develop the two major versions in parallel for a while, releasing perhaps 1 or 2 more 1.x versions. That, together with an Iron Fist ruled team of Architects who can actually judge whether the voice of the community on a matter has merit or is simply a projection of the fear incompetent developers have (tm), is the only way to make Java relevant again.
I honestly look forward to it.