A programming API represents a documented contract between a function that provides some kind of computing service and those who wish to use it. In Java, once an API is used there is a physical contract between the two that the compiler and JVM enforce. If at some point in the future the author of the API wishes to make changes, they are limited in scope; if the author renames methods or removes arguments, programs that are bound to the previous signature will no longer run. The change can be published with the new version of the class library or framework so that users can upgrade their code; however, in many cases this isn't a viable option. It may be that the system that used the old API is no longer being worked on by a development team and is considered stable, or that the release cycle of the now broken system is dependent on other circumstances that prevent it from being upgraded.
No API can be got right the first time, irrespective of how many specifications, architecture meetings, and examples take place prior to its release. The whole idea of launching a set of class libraries and Javadocs onto the world as being the eternal way of doing something goes against the whole philosophy of agile programming. One of the principles of extreme programming is that a good program is built flexibly and in a fluid state; at each stage the feedback loop of usage and reconstruction means that the right solution is arrived at by accident rather than by design. This is akin to evolution, whereby variations in a species arise by random mutation and are mixed in offspring to create new individuals. The fittest varieties survive whatever the environment provides and the cycle continues, allowing the species to adapt and evolve.
The Java language has maintained its API over many releases so a program that is compiled on 1.2 will run unchanged on a Java 5 runtime environment The benefit of this is that older Java programs remain functional on modern JREs; however, it comes at a price. The language now contains a plethora of deprecated classes and methods, new features are sometimes sacrificed to ensure backward compatibility, and the evolution of Java is hindered and held back. The class java.util.Date, for example, has more public deprecated methods than non-deprecated ones. Not a lot has changed in the domain model of Dates since the Gregorian calendar was introduced in 1582, and this ratio of legacy to current API is a sign that code change is a natural flux that occurs during its usage.
In nature the extinction of a species is not a gradual thing but comes in waves. Punctuated Equilibrium describes an effect whereby the environment remains fairly static for a while and then a huge amount of change occurs in a small amount of time. These boundaries are mass extinctions that not only cause many species to die out, but are also the event that allows others to flourish and fill the void left by the departing ones. To a certain extent Java benefited from this back in 1995, when it was born out of a combination of the best ideas of C++ and Smalltalk; the catastrophic meteorite striking at the time being the Internet and demand for heterogeneous networked computing.
What worries me 10 years later is that I don't believe Java is evolving fast enough, and that strong typing to antiquated APIs are holding it back. XML won over a slew of competing technologies for program-to-program communication transport because it is text based, allowing it to be read by heterogeneous end points (as opposed to alternatives like CORBA IDL or other binary RPCs). XML is also flexible in its typing, because tags can be declared as optional and new tags can be introduced in a message without breaking callers using the older format. While Java has done well as an enterprise language in the application server space, this is largely due to the fact that the big names of IT backed it rather than any inherent feature of the language. Languages such as Ruby and Perl have grown tremendously in the past few years and now command a sizeable portion of application development.
If Java is to remain at the forefront of technology for the next 10 years, it must find a better way to evolve. It needs to find a way of decoupling API calls between internal code and external blocks, perhaps even introducing soft typing calls across program boundaries or having flexible message transport across modules. While XML parsing functionality is now included in a Java runtime by default, it feels very shoehorned into place when compared with how .NET has done the same integration. Older languages like COBOL or RPG, as well as Visual Basic, include the concept of structures into a program definition that can be externalized, and having Java include a slew of JARs and runtime bolt ons to do simple XML parsing seems a missed opportunity to embrace the technology.
Becoming strong enough to do battle with Microsoft, the T-Rex of computing, may have fared well for Java in the past, but at the expense of what it has now become and how quickly it can keep up with change and the legacy it has created. I fear that unless a fundamental change to the language is made that allows more flexibility in binding between functional units, between and across JVM boundaries, Java will be a victim of the same fate as the behemoths it fights in the IT tar pit. Survival against change - whether in nature, technology, or business - is determined by ones ability to adapt. Java needs to move forward by being more agile. As the language grows with more and more APIs and divisions, it runs the risk of losing sight of the finish line, while smaller and nimbler technologies become more ubiquitous. When the next IT meteor strikes, Java must be the fastest to adapt if it is to survive and grow over the next 10 years.
About Joe Winchester Joe Winchester, JDJ's Desktop Technologies Editor, is a software developer working on development tools for IBM in Hursley, UK.
Byron Estes wrote: I
wonder if this discussion
might be more productive
if someone offered a
particular concrete
situation they
encountered that reflects
the limitations that they
feel are holding Java
back. If the author
reads this, I would call
on him to supply a
specific instance that
would allow us to get
away from opinions, and
rhetoric. Discussing an
example in this way
(...more likely a series
of examples) will
probably help us get
closer to understanding
each others points.
Given that understanding
we could then expand back
out to more broader
discussion of he subject.
Thoughts?
mel martinez wrote: I
personally kind of hate
comparisons between XML
and Java. They are two
totally different kinds
of tools that are used in
totally different ways.
To suggest that XML (a
spectrum of markup
languages) is somehow
'more flexible' than Java
(an OO programming
language) is meaningless.
They are both flexible
and both rigid in totally
different ways. An xml
schema can be just as
rigid and inflexible in
the face of future
changes as a strongly
typed java interface
signature. The
correlary to the
deprecated method in a
java api is a long list
of 'optional' attributes
in a tag definition. I
would suggest that the
vast majority of problems
that 'limit flexibility'
in Java (or any
programming language)
have more to do with
design patterns - too
many anti-patterns and
not enough use of good
patterns....
Joe Winchester wrote: The
point about strong typing
vs. weak typing is not
trying to bring back
memory spaces as a way of
passing program
arguments. Typing is
good for the compiler,
however it is too
inflexible. XML has a
benfit in its design
which is that the data
and the meaning of the
data are combined, so it
can be partially
complete, pieces ignored
by the receipient if it
doesn't understand it.
I'm not advocating XML as
a transport between Java
program modules, I just
think we need something
less brittle than what we
have now that can't
accomodate change. This
is similar to how the
Java XMLEncoder is
superior to binary
serialization, because it
can deal with updates
without everything
breaking
mel martinez wrote:
Somehow, I doubt it is
the fact that java is a
strongly typed language
will be the determining
factor in its long-term
success. There are much
bigger issues, primarily
whether java is percieved
by customers to be an
appropriate tool for the
solution of their real
world problems. The
number of deprecated
calls in some of the APIs
does not in my experience
jump to the forefront of
things to consider when
comparing development
tools and languages.
Yes, it is symptomatic of
some things that are
going on, but it isn't
imho a deal breaker with
most folks. The fact is,
the quality of
development tools
available and the
ubiquity of experience of
developers with a
language and the
associated tools will
tend to be the
predominant factors.
I'm not saying here that
java is destined to
succeed (whatever ...
Gary Renner wrote: I
could not disagree more
with this article. Maybe
you have to be as old as
I am to remember the days
before strong type
checking. The lack of
strong type checking in
assembler, c and basic
lead to very slow
development process due
to bugs that would have
easily been detected in
java, Modula 2, or
Pascal. To me, you are
advocating a change back
to the bad old days.
Elimination of strong
type checking will not
solve the problem of
brittleness of code.
Even eliminating type
checking completely will
not solve the real issues
that impede software
state of the art. To
reach the next state in
software development, we
have to be able to stand
on previous developers
shoulders - that means
reusability and
modularity. What is the
biggest impediment to
reusability? From my
perspective, it is the
proli...
Jim Babka wrote: At some
point in the evolution of
any API, you hear someone
calling for a do-over.
They say, "it's too hard
to evolve," or "nobody
uses those methods
anymore." While there
might be the best of
reasons for changing,
incompatible changes to
any API cause much more
confusion and strife than
living within the
boundaries of
compatibility.
If such a thing occurred
to Java, it would kill
the language. All the new
cool features would go
into "Java 3", while the
entire corporate world
stayed on Java 2, and
thus the tools would also
remain on Java 2 (it's a
chicken-and-egg problem
that we've seen numerous
times before).
Eventually, anyone who
got fed up with the lack
of new features in Java 2
would decide to move to a
new language, and the
lack of tools for Java 3
would be a big strike
against it.
No, painful ...
Byron Estes wrote:
Certainly, maintaining
interfaces that supply
services to support many
applications is not easy
and they do evolve over
time. This form of
distributed computing has
advantages that do not
come without a cost, but
I would contend that the
problems the author of
this article is citing
are as much or more a
problem with how we
design the interfaces as
they are with the
implementation. I agree,
that you'll never get the
interface right the first
time and yes it will most
certainly change over
time. What I am talking
about is tight cohesion
and loose coupling.
Nothing magical, but not
always practiced. My
experience has been that
as long as you keep the
services loosely coupled
and start with some
flexible command pattern
super classes, that you
can deal with lots of
these issues. Is it
perfect, no. ...
Yakov Fain wrote: >The
class java.util.Date, for
example, has more public
deprecated methods than
non-deprecated ones.
IMHO, Sun should come up
with a light-footprint
version of JVM that does
not support deprecated
version of methods. This
JVM should not replace
the existing one, but
present an option to the
recently developed Java
applications
rolsen wrote: Rhe buzz at
the last software
conference I attended, a
conference previously
full of Java developers
and talk, was all about
Ruby. The web is filling
up with talk about the R
word. Yesterday an old
friend of mine IM'ed me
to say that he had a new
job and his boss wants
him to do this Rails
thing and did I think it
was for real.
Not Gone Yet wrote: >>
Survival against change -
whether in nature,
>> technology, or
business - is determined
by one's
>> ability to adapt. Java
needs to move forward by
>> being more agile
Java's popularity might
be declining, but the
concept of its JVM sure
isn't. And I'll be using
Java for a considerable
amount of time in the
future anyway.
queZZtion wrote: ||| If
Java is to remain at the
forefront of technology
for the next 10 years, it
... needs to find a way
of decoupling API calls
between internal code and
external blocks, perhaps
even introducing soft
typing calls across
program boundaries or
having flexible message
transport across modules.
|||
It will be interesting to
see what Sun itself has
to say in response to
this. I am assuming JDJ
has invited a response?
This is the story of a
Mac application developer
(okay - it's about two of
them) who set out on a
quest to find an
application development
tool based on Java so his
boss would let him
develop on the Mac
platform, which he loved.
There was only one catch
- he had to find a tool
th
SOA is mostly associated
with technologies such as
BPEL, SCA and Web
Services. But does SOA
really imply these
technologies? In this
session we will show how
you can use the service
oriented approach while
staying inside the Java
world. jBPM is a powerful
lightweight framework th
Any large Java source
base can have insidious
and subtle bugs. Every
experienced Java
programmer knows that
finding and fixing these
bugs can be difficult and
costly. Fortunately,
there are a large number
of free open source Java
tools available that can
be used to find and fix d
One of the things I
really enjoy at the
moment is the recognition
and adoption of agile
programming as a fully
fledged powerful way to
deliver quality software
projects. As its
figurehead is a group of
very talented individuals
who have created the
agile manifesto
(http://agilema
Sun Microsystems
announced it has entered
into a multi-year
agreement with On2
Technologies to add
comprehensive video
capabilities, using On2
Technologies TrueMotion
video codecs, to Sun's
JavaFX, a family of
products for creating
Rich Internet
Applications (RIAs) with
immersive
Conference in San
Francisco. Dvorak held
forth on a number of
topics, including the new
AMD/Intel lawsuit, the
viability of Java and
Sun, the value of (or
lack thereof) of
corporate PR, and whether
or not a new book about
Silicon Valley is really
worth reading.
SUBSCRIBE TO THE WORLD'S MOST POWERFUL NEWSLETTERS
SUBSCRIBE TO OUR RSS FEEDS & GET YOUR SYS-CON NEWS LIVE!
Click to Add our RSS Feeds to the Service of Your Choice: