Programming Language Lifecycles - Where's Java At?
By Robin Sharp
March 11, 2002
There is a programming language lifecycle. Understanding and predicting this lifecycle is tremendously important for IT directors
and technical architects. It is even more important for those with a vested
interested in the language succeeding, to know when to switch to a new language.
|
"Those with the most to lose are the slowest to recognise change"
|
|
Many languages have been through lifecycles. Languages have met purposes,
and languages have continued to fulfil purposes.
But those with the most to lose
are often the slowest to recognise change when it occurs. Most people simply
follow the herd, but vendors and companies who are sufficiently aware can take
market leading positions.
The older you get the faster time flies. Having been involved in the lifecycles
of several languages, I'm beginning to recognise some of the signs and wonder
where
Java is.
Often the time to change is when you least expect to.
I was involved in the end of the 'C' lifecycle, and involved at the
beginning of
the C++ lifecycle. I remember sitting at a desk in 1988 thinking "These C
stuct pointers
are such a pain"; six months later I was handed Borland's C++ pre-compiler
at a conference.
I was also involved at the end of the C++ cycle and beginning of the Java lifecycle when I
adopted the Beta versions of Java back in 1996.I remember programming on a
trading floor
in 1995 thinking: "These C++ libraries are such a pain"; six months later I
found
the Oak project (which later turned into Java).
|
"New languages must compete with older languages"
|
|
The stages of any lifecycle are based on the natural principles of growth,
maturation
and decay. Whilst these stages are not a judgement on the language, they do
reflect
a general community opinion.
The same processes of natural advantage and mutation operate in the world of
programming
languages in the same way that they operate in the biologic domain.
In the case
of languages,
the main forces are efficiency of expression vs. profitable adoption.
New languages must compete with older languages; if they are general purpose,
functional,
expressive and marketed then they stand a chance of being adopted.
Interestingly,
it is the
application market that drives language evolution. This is because the application
market is
where the profitable adoption is most significant. Beyond that, Investment
Banks are
often at the forefront of profitable adoption because with such high profits, they can afford to
pay for
maturation costs.
I have divided the lifecycle into the following stages:
Conception
Adoption
Acceptance
Maturation
Inefficiency
Deprecation
Decay
Conception
A language is conceived to meet a requirement that other languages do not
meet.
Countless languages have been written but of those C++, MFC, Java have been
backed by budgets.
Adoption
Languages are adopted to make the programmer more efficient. This is driven
by
the programmers because they are bright and don't like mundane coding.
Languages
have API's back into the libraries of those they are replacing.
Acceptance
Once the market sees that tools are sufficiently bug free and early adopters
have made profits, there is a general acceptance of a language. Green field
projects expose requirements and ideas for tools, and libraries are
conceived.
Maturation
Languages, libraries and tools mature. They are capable and deliver
profitable
solutions. There is an increased demand for functionality, rather than
efficiency,
in order to reap profits. Standards bodies attempt to control the spread of
ideas.
Inefficiency
Development has become slow as libraries become more inefficient. The rush
to
provide functionality has created a market that is subtly
fragmented
by vendors implementing standards differently. There is a large increase in
the
number of case tools and code generators.
Deprecation
Developers start to understand that it is costly to develop using the
language.
Frustration begins to set in, and designers take a deeper look at the issues
causing the inefficiencies.
Decay
A young pretender appears and challenges the leader. Lean, mean and fast, the
new
language has apparently come from a research department of a large
technology
company. Marketing departments lock horns and invariably the old order is
overthrown.
|
"A relationship with general economic cycles"
|
|
Interestingly, I have noticed that programming language lifecycles have a
relationship
with general economic cycles.
Competition between languages takes place when a language has become
inefficient.
At the beginning of the upturn in an economic cycle, resources are scarce
and development
is required. It is then that the more efficient languages win out.
Going
into
a recession, resources are cheap, efficiency and expressiveness are not high
priorities,
and languages become bloated and inefficient.
C, C++ and Java were all taken
up by the
early adopters at the start of an economic upturn.
Fundamentally a new language is smaller, lightweight and more efficient.
The choice
between an old and a new language is often one between a ready made, but
inefficient
architecture and architectural building blocks.
So where does that leave Java?
|
"A young pretender will emerge from a research project"
|
|
Certainly we are now getting into the
Inefficiency
phase of the Java Lifecycle. J2EE and EJB form a ready made architecture
that is
expensive to develop. It would be hard to see small companies justifying
the
current development costs when we come out of the downturn in a year or so.
I believe that a similar event will occur as with previous language-shifts: a young pretender will appear from a
research
project, probably as early as the beginning of next year. As with the last shift, the new
language will
adopt the hard-learnt application semantics from the previous languages.
For
C++ this was OO, for Java this was libraries and standardised API's. For the next language, the
clear
application semantics 'discovered' by Java is the bean/EJB semantics of
properties, events, homes and sessions.
.NET from Microsoft has several bean-like properties built into the
language, making
it a potential contender. Like Java's adoption of C++ syntax, C# has adopted
Java's
libraries. However, I believe Microsoft made a strategic error in adopting
Java's libraries, and not building bean/EJB-like semantics deeper into the
.NET
language. They could now be leveraging this functionality to automatically
persist
and deploy beans.
I don't really see C# as being significantly better than
Java
to challenge it on that basis.
Similarly, I believe Sun made a strategic error in sitting back and not developing a
Java++
language that builds bean/EJB-like muscle into the language rather than fat
on top
of it, as EJB does.
Given the history of language evolution, the shift from C to C++ marked a
requirement
for extensive libraries to be made available. Having said that, both C++ and
Java made
an effort to reuse the existing code base of their predecessor.
|
"Component-Oriented Languages"
|
|
One of the most promising areas of research is the design of the so called
'component-oriented' languages. These differ from object-oriented languages
in that they offer messaging, properties, events, sessions and homes all
built into the language.
Importantly, they also distinguish between definition of the components and
the
components implementation. This means that it will be possible to define an
application without actually saying what will be rendered into the technology;
for example how it is presented or how it will be persisted.
Whatever happens next, the next few years are going to be interesting.
About the author:
Robin Sharp is the Managing Director of Javelin Software
().
He can be reached at
Talkback:
Post a new message
Message Index: Like Moore's Law.... Laurence Vanhelsuwe
Totally agreed to Mr. Vanhelsuwe Sidney Fortes
Agreed robin.sharp robin.sharp@javelinsoft.com
Why no mentioning of scripting languages? Jack Herrington jack_d_herrington@pobox.com
2cents Joubin joubin@inch.com
The Messages: Like Moore's Law.... Your article contains an interesting concept, i.e. that of lifecycles of programming languages, and the "survival of the fittest" over time.
Lest people get the impression that every 10 years we will have new languages to play with, your article hints at a roadblock for this scenario: libraries, and a general (exponential?) increase in complexity built-in to the language. Niklaus Wirth "knocked up" Pascal in a few months, C++ took quite a bit longer. Java has taken years (chiefly because of library design and implementation, and JVM work). Future languages will not pop out of the ground like mushrooms. Future successful programming languages will be astronomically costly software systems to invent and develop.
Experienced programmers like myself who 10-15 years ago could have toyed with the idea of designing a better language in one's bedroom, so to speak, have no hope in hell today. Language evolution is slowing down, not speeding up. Gone forever are the 60s and 70s where one or two individuals could design and implement a new language, and make it fly in the real world.
Nowadays, the libraries are the Achilles heel: without great libraries, no self-respecting Java programmer is going to abandon Java to go to a "better" language. Great libraries, as Sun knows all too well, cost not only fortunes to develop, but also many, many years.
My opinion is therefore that we are approaching a horizon where man-designed programming languages will be born less and less frequently. Maybe it's time for computers to start designing these things for us? ;-)
Laurence Vanhelsuwe Scotland Sat May 11 11:00:07 BST 2002
Totally agreed to Mr. Vanhelsuwe Just wanna add my 2 cents to Mr. Vanhelsuwe. Like Dr. Stroustrup says in his book,"A general purpose language will never be the best one for a specialized area", there are trade-offs and wiser is the IT manager who can analize and decide which programming language is going to be used for a specific project. I believe that if we take this "programming language war" personally, we are just contributing for failure in our next projects. Sidney Fortes Sr. Software Engineer - Miami, FL, US Mon May 20 16:51:50 BST 2002
Agreed I agree with what you say about programming languages slowing down. The jump from C to C++ and C++ to Java and Java to C# has been one of modification.
In the later articles I describe how I think these modifications create qualitative shifts. For example component orientation adds certain features, and domain orientation doesn't really add to the language (per se) at all, but to its usage.
robin.sharp robin.sharp@javelinsoft.com UK Mon Jul 01 11:04:36 BST 2002
Why no mentioning of scripting languages? completely centers around the C, C++, Java, C# line of language development. This is only one thin sliver of the language tree.
What about the exciting work being done in Python, Perl 6, Ruby, Javascript and the other interpreted languages. Jack Herrington jack_d_herrington@pobox.com Bay Area, CA, USA Sat Sep 07 22:33:04 BST 2002
2cents Thank you Mr. Sharp for sharing your insights. I found the correlation between economic and language cycles quite interesting.
Regarding Mr. Vanhelsuwe's remarks: I say **Reuse!**
For example, I clearly agree w/ the paper's prediction regarding emergence of CO languages. If you think about C.Orientation, you realize that it has little to do with 'libraries' (i.e. functionality) and everything to do with development (thus the new CO language), and the packaging, assembly, deployment, etc., of these functionalities in an **adaptive** manner. (This, BTW, is the whole point aparentlly completely misunderstood, and flawed, EJB specs.)
The 'pretender' needs only a clear mind to grasp the patterns and devise the language that builds on top of an existing OO infrastructure. And being a 'lone pretender', there is little incentive to warp the vision to accomidate alliances, market realities, etc. (Issues which Sun clearly faced when developing J2EE.)
I.e. The 'next step' will be an abstraction effort, as opposed to a grounds-up effort, and should be properly mapped to the transition of building _suport for OO_ on top of procedural (C->C++), as opposed to defining a native object system (C++->Java). (This distinction in language transitions, BTW, is a point that Mr. Sharp failed to address in his paper.)
I further agree with Mr. Harrington regarding the apparent blinders regarding scripting. Even though I certainly do not envision a purely scripting future, it is imo CLEAR that in the future we will have Adaptive Component architects, and Scripting assemblers: A 2-tiered development world (comprised of few talented Engineers and great many handy Mechanics) addressing the reality of levels of understanding and capabilities of software developers -- this is a point that Microsoft clearly understands quite well. You don't need deep understanding of software to use .Net. But clearly you require a very deep understanding if you use EJBs.
The days of 'artisan' computing are nearly over. And the 'model T' is just over the horizon.
Peace. Joubin joubin@inch.com
Tue Oct 29 19:56:40 GMT 2002
Post a new message
Related Articles:
Component-Oriented Software
The State of Web Services
Research Projects
<< Back to Programming
|