As some of you may know, over the last year or so I’ve been spending more time with larger and larger Java-based server-side projects (including Quick Bit Notes, Twitmart, Litetext, and iSpykee). In this process, I’ve had to “catch up” to the Java state-of-the-art and get reacquainted with the Java culture.
Much of this has come with the great patience of my friend Mark Petrovic who has helped me immensely in this endeavor. It has been an overall very positive experience, to the point that Java is now my first choice starting point for server-side and web-app projects.
So here’s the rant:
What is it with Java tool developers that they like to “improve” their APIs in non-backwards compatible ways on a semi-regular basis?
Perhaps I’ve just been “lucky” but I’ve experienced this with many of the key packages I’m using, such as Jetty, Twitter4J, and Lucene. It’s almost like it’s part of the culture to break things, just to shake things up. Maybe it’s a “purity” thing and they always think their API needs to be cleaner and the only way to get there is to break it (again).
One of the biggest hassles that come with this culture is that it makes it really hard to come up to speed on a tool because you have to also study the full history of it, scattered across countless message boards, blogs, and websites (oh my!). When you run across examples showing use of the package, they often only work with the specific version of the package/tool from some point in the past. Of course these examples seldom state which version they were written for nor are they updated to bring them current to the latest version. Coming out of the blue, being new to one of these packages, it’s really hard to tell when the package diverged and in what way the rules changed.
It seems like every Java tool developer thinks their users are, or should be, spending every waking minute on their specific development-talk forum.
Is it just me? Am I really the only one who struggles with this?