For a long time, I thought JavaLanguage was so self-evidently crap, that it was only being kept going by a life-support of hype and pump-priming by Sun, and naive universities and companies run by fresh-out-of-college-kids. And that one-day this system would catastrophically collapse. (Probably beaten by something equally lame like CSharpLanguage)
But now, I'm actually starting to get worried. That maybe JavaLanguage is close to winning a platform war and getting locked-in for a long time. (I'm in my mid 30s. So "a long time" could conceivably last until I retire as a programmer.)
Why is Java winning?
Of course, it's the libraries (but they partly exist because Java's AoP helps the manageability of large numbers of libraries
It's also AGoodIDE (Eclipse which is the uber-AoP)
Some other causes of Java's rise
And then there are probably some other interesting (lucky) contingent events.
- The Java / XML symbiosis.
: XML is such a pain everyone wants to use standard libraries to manipulate it. And Java got those libraries early, managed by a good / respectable free-software committe : Apache.
: At the same time, everyone got so lazy to write parsers for LittleLanguages (possibly because universities were side-tracked teaching GUIs and web-services and XML) that they use XML for all kinds of stuff where it isn't appropriate.
: Hence some PositiveFeedback : widespread XML creates need for Java's libraries, and wide-spread use of Java and it's libraries disincentivates alternatives.
Another analysis of the advantages of Java
Python is not Java : http://dirtsimple.org/2004/12/java-is-not-python-either.html
evolution in library / framework specification rather than language
formal process of specifying interfaces makes it possible to build frameworks and platforms :
: By the very nature of what something like OSGi does, it has to be specified in terms of interfaces. There are multiple platform implementations that load bundles, and of course there are many, many bundles, and services offered by those bundles. Without interfaces, there would be "no there there" -- nothing to exist or document.
This is echoing the architecture of participation thing really. Or rather, Java is a culture of participatory discipline in that it encourages ArchitectureAstronauts to come up with high-level interfaces that describe how certain large chunks of functionality should talk to each other; and then members of the community actually diligently sit down and implement these specifications. Even when they get burnt as Sun prototypes and drops one competing standard after another, someone still sits down and implements it all. It's this self-discipline in following orders by the community which is it's strength (and what makes it so off-putting to the TypesOfProgrammer who are attracted to Python).
The question is this :
must Python adopt Interface culture to compete at the scale Java culture works (large component libraries)
can there be an alternative, Pythonic way for groups to co-ordinate their efforts?
Discusison of inerfaces continues on PythonInterfacesAreNotJavaInterfaces.
(I started writing a comment which I didn't post but became PythonBlackBoardArchitecture)
And read the discussion on OptionalStaticTyping : for http://www.artima.com/forums/flat.jsp?forum=106&thread=85551 for more thoughts on how Interfaces are important to the platform war.
How to fight back
1) Python needs AGoodIDE (and one which is FreeSoftware).
2) Python has XML libraries.
3) Jython on top of JVM, IronPython on top of CLR
At the moment, the main use of these languages is to take advantage of the libraries on the two underlying platforms. These are transparent in that they don't really hide the nature of the underlying platform. (Though maybe that doesn't matter much.)
4) How can Python get more AoP?
- Every language war ever : :-) http://www.deftcode.com/archives/every_language_war_ever.html :-)
See also :