I, for my sins, am now programming in Java. By now I have a lot of experience programming with a pretty large number of programming languages. Java, C++, C, Basic, Visual Basic, SQL, Python, Perl, php, Matlab, etc.
While I have to admit to having a prejudice against Java as YAPL (Yet Another Proprietary Language), I knew that in all likelihood I’d be working in it for some time, and I did my best to reserve judgement and find what is good in the language.
By now though, I think I’ve gotten good enough in Java to have an informed opinion. While Java has its strengths, and it could certainly be worse (it could be visual basic for example), I’m generally unhappy with it. I think the big problem I have with Java is it marketed to be used in application domains where it simply isn’t right choice. I suspect that for medium sized projects, free projects, projects which require a heavy network integration or should run as an applet, it’s probably a good language. For certain problems I would even believe that it’s the best choice.
But for large, complex projects, in particular projects in which you want to sell a binary and not sell a source code, forget it, Java’s a nightmare. But I don’t want to get into an encyclopaedic discourse of the ills of Java. I actually just want to use this forum to vent my frustrations with the language, and keep a kind of running diary as problems cross my mind. I suspect it will be useful when I need to explain to someone why I don’t care for a language. Normally when I get involved in such conversations my frustration is to palpable for me to explain my concerns lucidly: I’m to busy trying to get my head above the frust.
For today, let me just gripe about how Java has too many advocates. I suspect that this ill, along with most of Java’s ills, stem from the fact that java is owned by a corporation which expends a lot of money and energy trying to brand the language, generate a community, and in general get people feeling all tribal about being a Java programmer. Consider this blurb on the back of “Killer Game Programming in Java” which has on it’s back cover blurb “As a result [of poor documentation] Java has become a second-class citizen to C, C++, and assebly language when it comes to hardcore game programming. This book changes all that…”
Ugh. That’s just typical of the Java world. The book jacket isn’t trying to sell a book, it’s selling Java to a problem domain. The fact is Java isn’t the right choice for a “hardcore” game. My understanding of the term “hardcore gaming” is pretty much, by definition, to be “resource intensive”. That means efficiency and complexity (both algorithmic and code-complexity) are an issue, and that’s where Java just isn’t a good choice. Not only that, but games tend to be commercial undertakings, which means selling binaries and license management etc, which means obfuscation, which means you can’t break your code down properly into modular units and libraries. Generally if it’s really computationally intensive, you want to manage your own memory…
Now, I have to use Java for a 3D application. I have no choice. So I’m happy to have the book and I’m sure it will be useful to me. I’m also sure that there are a number of applications for which Java’s 3d apps are a good choice (smart phones, web apps, free software projects), but trying to convince the reader that the only thing keeping Java from being as good a platform as C++ and assembly is the documentation, well that’s just disingenuous shilling. The Java community is like the P.T. Barnum of programming communities.