JavaLanguage (ThoughtStorms)

ProgrammingLanguage that I don't like much. Why do I hate this stupid language? JavaNamespacesForIdiots


Update, September 2004 : I wonder if I'm wrong about Java

Not that it doesn't suck to have to write, of course. It does. But I'm concerned by the degree to which Java is basically taking over. When I try to explain why Java is so popular my usual answer is "it's the libraries, not the language itself" People choose Java because there's already such a large community of people writing libraries for everything you can think of. So the platform is very healthy, and all those libraries can be combined.

Which is all very true. And merely an example of run-away PositiveFeedback plus ReedsLaw as all those libraries can be combined in various ways.

But then Java advocates are always on about how Java scales better for large scale systems. And my usual answer to that is "pshaw! Go read SituatedSoftware. And anyway, I can't see any real reason why Java scales up better than any other ObjectOriented language like, say, (picking entirely at random :-), PythonLanguage.

But now I wonder ... what about all those libraries? Is it only run-away positive feedback? Or is there something about the language that encourages libraries to flourish? Could there even be something about the restrictions that make it more likely that libraries can be used together, which in turn gives ReedsLaw a helping-hand, which in turn feeds back into the exploding popularity of the language.

It's not that I can think of any particular reason this might be so. But there just is the evidence right in front of my eyes ... Troubling.

See also : TheArchitectureOfParticipation, ProgrammingLanguagePlatformWar


The old stuff ...

Oli said (over on TypesOfProgrammingLanguages, but refactored here) : *While I may have gone off Java as an appropriate language in which to develop bespoke web applications ... it's still a beautiful OO language if that's what you need. *

Clearly, I approve of the first statement. What do you think of replacing it with? Can you recommend that alternative to local authorities or are they locked-in to APLAWS / Java for the next generation?

Beautiful language? Java is not a beautiful OO language. SmallTalk is a beautiful OO language. And by all accounts so is RubyLanguage. (PythonLanguage can be, but isn't necessarily OO so purists will complain.) One of the insidious myths of our time is that Java defines OO and that Java techniques, and the patterns that are needed to work with it, are what counts as OO.

What Java is, is a minor variant on C++ with a decent garbage collector. As such, it's an OK systems programming language (as long as the system you want to program is the JRE); and can be nicer than C++ or C for C++ programmers writing desktop applications. Everything else is controversial.


But really I'm a rank amateur at Java dissing compared to the beautiful rhetoric of JackHerrington of the CodeGenerationNetwork :

The reality is that the history of Java is a litany of failure. It never worked on toasters. So they tried Applets. Now if you read "Bitter Java" Applets are listed as an anti-pattern. So they tried the desktop with Swing, and NOBODY shipped any of that. The only shipping Swing apps are Java IDEs.

So they tried the Web Server, and have basically hyped that to the point where they showed a perceived success. Sun was talking about Java 'Enterprise Applications' on the server when there was no justification or history behind it. Publishing white papers that said that Java scaled better than PHP when there was no evidence to support that, and when in fact, it was quite the contrary in reality.

Now that Microsoft has come along with .NET you see Sun trying to swing the Java community back to being interested in mobile devices. So this optimal 'enterprise language' is now the best for small 'mobile computing' applications and games programming.

We have come full circle! This toaster language grew wings and became an amazing enterprise applications language, but then back to being a toaster language. Without ever making substantive changes to syntax! Quite amazing.

*Seriously. You can't just go around quoting the Sun Java hype machine and spouting their silliness about being scalable, or being the 'optimal enterprise application development environment', or the language being capable of doing things other languages just can't. It's all just hype and as engineers we should look past the hype and work on FACTS. We owe that much to our customers. *

(http://blogs.law.harvard.edu/philg/comments?u=philg&p=1948&link=http%3A%2F%2Fblogs.law.harvard.edu%2Fphilg%2F2003%2F09%2F23#a1948))

Via PhilipGreenspun dissing Java : http://blogs.law.harvard.edu/philg/2003/09/20#a1762))

I'm not just repeating the above because it's beautiful. There's also an interesting point. BjarneStroustrup, suggests that the virtue of C++ is that it's a small language that keeps all the specifics in libraries. (Maybe http://www.artima.com/intv/elegance.html) Maybe) Java's ability to be a great toaster language and enterprise server language is that it's inherited that philosophy. (Compare GrowingAProgrammingLanguage)

The spirit shared by C, C++ and Java : http://www.artima.com/cppsource/spiritofc.html


SteveYegge on RubyLanguage and Java's big failing : lack of literals


In those same comments to PhilipGreenspun above, I said :

Java is the peacock's tail of programming tools. It doesn't exist to make life easier, it exists to filter out the unfit and reveal the smartest, hardest working programmers. (HandicapPrinciple)

I'd "hire" Java programmers in an instant. Just, having hired them, require them to build in Python.

As to the posts about Java vs scripting scalability, consider this : AolServer and TCL scale to a pretty large number of users. Given that web traffic is distributed according to a power-law, the number of sites that need to scale larger than any scripted solution can handle, is miniscule.

*Writing these kind of exotic systems requires special techniques and tools, but so does writing massively parallel scientific applications. I'd suggest both are areas that you might choose to specialize in, but aren't a necessary part of everyday web / internet work. And tools for them probably don't need to be part of the core curriculum. *

See also SituatedSoftware, for this argument taken to it's logical conclusion, application sizes distribute according to a power-law, so only a few applications need to be really big.

-- PhilJones


2008 : It's over in enterprise "web" applications : http://andigutmans.blogspot.com/2008/03/java-is-losing-battle-for-modern-web.html

Java by it's cover : http://www.paulgraham.com/javacover.html

Hundred year language : http://www.paulgraham.com/hundred.html

Why it's better than .Net : http://www.manageability.org/manageabilityWiki/WhyJavaIsBetterThanDotNet

BruceEckel on it's future : http://mindview.net/WebLog/log-0055

A "Java hataz debunked" piece which is pretty well debunked itself in the comments. : http://www.sys-con.com/story/feedback.cfm?storyid=46095

Verbose : http://www.cabochon.com/~stevey/blog-rants/lisp-wins.html