Most of the larger Java projects
I've seen have been, in fact, GUI front ends to other tools
(e.g. Eclipse). Java is very good for GUI's, not because of the
language, but because of its libraries.
On the contrary, Java has had very little success on the GUI side.
Eclipse may be an exception, but it deliberately eschewed the standard
Java Swing components, and went its own way. Personally, I don't
particularly care for it as a development tool, it's very heavy, but
its success is largely attributable to its ability to front a huge and
diverse collection of enterprise tooling, much of it written in Java.
Which brings us to the area where Java has thrived over the last
decade, on the server side: enterprise middleware, high end workflow
products, business orchestration tooling, fault tolerant middleware,
messaging infrastructure, etc. The vast majority of the new tooling
in this space, from TIBCO, IBM, BEA and SUN (since absorbed by
Oracle), as well as new entrants, has been written in Java, and the
new products have been displacing the previous generation of tooling
that was written in C/C++.
Depending on what you're targetting, Java's distribution model
(with one jar file for all platforms) may be an advantage or
a disadvantage (the "write once, debug everywhere" syndrome).
Whether you choose Java, C# or C++
for such projects depends on a lot of issues: Java is clearly
the least powerful langauge of the three, but distribution
issues may make it preferrable.
I think the vendors of enterprise middleware would not agree with your
assessment. The movement from C/C++ to Java was motivated largely by
convenience, the convenience of using a language that offered
reasonable support for character encoding standards, that offered
support for calendars and dates, that supported threading and garbage
collection, that offered reflection and with it made configuration
easy, that didn't suffer from the security holes opened up by off-by-
one errors, that offered a simpler programming model, that was well
supported on UNIX. Of course, ease of deployment and distribution
were part of it.
A lot of the open source projects seem to be open source just to
show off how poorly they are engineered
.
You mean the boost libraries
Seriously, I've only looked at a
small subset of these libraries, but my experience is bad.
Constructing an inverse t distribution doesn't work, the results of
const boost::math::students_t dist(dof);
const double t = boost::math::quantile(dist, y);
are pathological. banded_matrix doesn't work, multiplications go away
forever as the dimensions go up. This wouldn't be quite so irritating
if there weren't all those comments on the web about how boost was
developed by the best programmers in the world, people who are really
good don't need that. In numerics, you have to test everything, you
can't release code that doesn't work. Anyway, I agree, there is bad
free software.
Historical reasons also lead to e.g. using your own string class.)
In the case of Apache Xerces, I believe the introduction of XMLCh was
recent, motivated by the lack of standardization of wchar_t and the
need to support 16 bit wide unicode encodings. Anyway, you'll see
lots of use of
XMLString::transcode(elementName)
in XML application code.
-- Daniel