(August 5, 2005) - I’ve been around software for 20 years now. Looking back, I have mixed feelings about the progress we’ve made. The end results have been amazing but the process of building software hasn’t fundamentally changed since the 80s. In fact, I see us make some of the same mistakes over and over again. One of the common anti-patterns is over-relying on tools and frameworks instead of inventing new programming models.
Layers of abstraction are fundamental to software. Some layers are defined through programming models, e.g., machine language, assembly language, 3GLs, JSP. Others are defined through a combination of tools and frameworks, e.g., MFC and Visual Studio on top of C++. There is a limit to how high we can raise a level of abstraction through tools and frameworks alone. At some point, a new programming model is the best way forward.
Here are some examples: CASE tools on top of 3GLs never achieved the success of 4GLs; tools and frameworks for Web application development, from CGI + your favorite language to WebObjects to HAHT, were demolished in the market by page-based Web application development models such as ColdFusion, PHP, JSP and ASP.
What we have seen time and time again is that it is often better to come up with a new programming model than to keep pushing an existing model forward by throwing ever more advanced tools and sophisticated frameworks on top. Think of a building. Programming models are the floors. Tools and frameworks are the walls. To build a tall building you need to strike a balance between the number of floors and the height of walls. Beyond a certain point, an extra foot of room height adds very little to the quality of a room but increases the cost of the building substantially.
When should one create a new programming model as opposed to go with a framework and/or tool leverage? What is a programming model anyway? Tough questions, both of them… The first is impossible to answer perfectly or quickly. The second question is a little easier because you can often recognize a new programming model when you see it. One key observation is that you don’t necessarily need a new programming language, as JSP and ASP demonstrate. Sometimes, it is sufficient to create a domain-specific template or wrapper into which existing programming models fit. Also, new programming models may come with their own set of frameworks and tools.
I have some first-hand experience creating new programming models. At Allaire we defined the page-based Web application development model with ColdFusion and later helped the Java community get its act together with JSP and tag libraries. Later at Macromedia, we defined the model for building rich Internet applications (RIAs) with Flash and Flex, something Microsoft will try to catch up to with Avalon in Longhorn (now Windows Vista). In between, we did a lot of work on SOA programming models, though with the burst of the tech bubble we decided not to ship this as an independent product but instead contributed the ideas to Apache and to existing products internally.
Here are some thoughts on two programming models that I hope we can significantly improve in the next few years.
Rich Internet Applications (RIAs) You have to admit, we did take a step back in usability with the Web. We can build easily accessible applications quickly, but wouldn’t it be nice if we didn’t have to go through 10 screens to make an airline reservation?
What we need are applications that have the deployment characteristics of browser-based applications but have equivalent power and more interactivity than desktop applications. That’s what RIAs are all about. They bring complexity on two levels. First, computing happens on both the client and the server over a potentially unreliable WAN. Second, they aim to deliver highly interactive user experiences (UEs). Don’t blow that second requirement off. Research clearly shows that users respond better to these types of interfaces. Who wants to use old-style Web maps when you can go with Google maps or the Flash-based AbMap?
A good RIA programming model will protect developers from the details of location, i.e., the tasks associated with synchronizing data shared between the front- and back-end, invoking back-end services, dealing with online/offline operation, etc. It will also have an advanced rendering engine, preferably one that is cross-platform and device independent, and a presentation model that hides much of the hassle of resolution, screen orientation and internationalization. I’m very biased in making this claim but the only commercially sound approach to RIAs nowadays is with Macromedia Flash and, better, with Flash and Flex together. Microsoft Avalon is the closest competing technology. It has yet to ship. AJAX, contrary to what many believe, has been around since at least 1998 but didn’t have a cool acronym. AJAX + DHTML offer an alternative but there has been little success moving from specific cool apps to a generalized programming model. Java doesn’t cut it, primarily for UE reasons. There is plenty of room for improvement.
Don’t forget mobile applications. More than PC-based applications, they really need a makeover and there are a lot of dollars at stake. Microbrowsers are trying to find ways to bring AJAX + DHTM ± WAP to devices. Java has deep market penetration but poor UE. Brew has the best device integration but is similar to Java on the UE front. Flash Lite is gaining traction here because of the great UE it enables.
Composite Applications There is no question about it - you can build composite applications using Java, .NET or any other programming language for that matter, just as you can build Web apps using C++ and write admin scripts in Cobol. Why would you, though?
One of the cornerstones of SOA is that services can be implemented using anything. That’s great but traditional approaches for writing the glue code between services leave a lot to be desired. What we need are deeper and more declarative mechanisms for putting services together. BPEL and the WS-* standards are both too much and not enough. Do this: print all the specs and stack them together. Now, think about how much ad hoc work you had to do to build, deploy and operate your last composite app. Do you feel comfortable with where the industry is going?
Building, deploying and operating composite applications requires dealing with issues such as policy definition and enforcement, service evolution/versioning, system/deployment architectures and post-deployment management and monitoring. This goes into what traditionally has been considered to be the IT sphere of influence, often a taboo area for development. However, I deeply believe that a winning programming model has to begin to address these issues. Just consider some of the complexities. How do you maintain applications over time as services evolve? How do you debug them? When something doesn’t work right in a production application, how do you track down the root cause? If you don’t address these issues during the architecture and design phases you’re in for pain down the road.
Talk like this takes us into the realm of utility computing, whatever that means (definitions still vary). Perhaps this is what’s necessary to make building, testing, deploying and operating composite applications easy. There is plenty of innovation in this space. Unfortunately, much of it is in the form of add-on products as opposed to a comprehensive programming model-driven approach to the problem. This is bad news for customers who run the risk of experiencing the dubious pleasures of vendor lock-in.
My personal wish list for innovative programming models is longer, for example, covering ultra-scalable applications that run on large clusters (>= 32 nodes). I even think that we can do a lot better with the decade-old Web application model. Just look at some of the work going on with Ruby on Rails. As both a technologist and an investor I’m excited about the future.
About Simeon Simeonov Simeon Simeonov is a technology partner of Polaris Ventures and invests primarily in Internet, mobile and enterprise technologies. Prior to joining Polaris, Sim was vice president of emerging technologies and chief architect at Macromedia (now Adobe). Earlier, Sim was a founding member and chief architect at Allaire which went from a tiny startup to become one of New England's most successful IPOs. Sim's expertise covers the gamut from strategy definition and positioning to R&D execution to go-to-market and alliances development. He has played a key role in eight v1.0 product initiatives and eight M&A and spinout transactions. Sim's innovation and leadership have brought about category-defining products with significant market impact: the first Web application server (ColdFusion), a pre-cursor to Web services and AJAX (WDDX), the best open-source Web services engine (Apache Axis) and the first rich Internet application platform (Flash/Flex). Sim has a track record of partnering with entrepreneurs prior to company creation.
David Ryan wrote: Nice
article. I've linked to
some articles which you
might find interesting.
It includes a paper I
prepared on creating
evolvable programming
languages encoded in a
binary format called
Argot. The language is
still in early
development, but I
strongly believe that
solutions similar to it
is where future languages
need to move.
grumpynerd wrote: I won't
discount the importance
of Ajax and "RIAs" as a
deployment model -- even
as a kind of domain
within in which system
architectures could be
grouped. But these aren't
new programming models.
We use the same old
programming models to
build new kinds of apps.
Examples of Programming
Models:
0) Hardware based
programming (plugboards
etc)
1) Stored program
(program as data)
2) Assembly programming
3) High level language
programming
4) Structured
5) Functional
6) Object oriented
7) Aspect oriented
Mark Kroehler wrote: RIA
(Rich Internet
Applications) is a
marketing term Macromedia
(Flash, Cold Fusion)
conjured up as a way to
get people looking at
their development
products. Even googling
on the term only points
you back to one vendor.
Not exactly what I would
call a model...
boatboy wrote: Avalon !=
Ajax. Avalon will be a
system for declaratively
defining a rich ui. The
design will presumably
allow for what is called
a RIA here, but isn't
limited to that. More
analogous is Microsoft's
'Atlas' - which will
probably be released much
sooner, and be more
cross-platform.
swamii wrote: >>>
Microsoft will try to
catch up to with
>>> Avalon in Longhorn
(now Windows Vista).
Late != unsuccessful. It
matters little when
Microsoft controls the
browser and the operating
system. They could start
deploying RIAs (Avalon
web apps) tomorrow and
have broad support for it
in the browser and OS if
they wanted.
One thing's for sure: I
have yet to see a web UI
framework look as good as
Avalon web apps.
Aeroglass over the web
looks great. I wonder how
well it will be accepted
by the public.
owlstead wrote: Better
runtime environments and
IDE's will be more
important than any
programming language. The
way Java or .NET handle
components should be an
eye opener. What you want
is code you can control,
what does what you expect
it to do.
On the runtime part:
- plugins (see Eclipse
and OSGi technology)
- assemblies/libraries
(see .NET framework)
- VM support (garbage
collection, overflow
handling, exception
handling, bounds checking
etc.)
- runtime
information (reflection)
- supporting components
(application servers,
message services)
On the IDE part:
- parsing editors (see
Eclipse)
- code analyzers
(PMD)
- semantic links
from code to design tools
(needs a parsing editor
to function best)
- unit testing
I see a mayor shift
towards runtime
technologies coming up
ahead. I can see more
flexibility coming up in
how program...
gravyface wrote:
ColdFusion got it right a
long time ago. Sure, its
a commercial platform,
but being able to
leverage C/C++, Java, and
.NET and of course AJAX
and Flash through simple,
tag-based markup, really
speeds things up. It can
run on any major platform
too.
Jean-Luc Fontaine wrote:
I am amazed at the
complexity level that you
are writing about, when
there has been thin
clients (X Windows, ...)
for a long time, and now
NX which has the greatest
of potentials. Investing
in the network instead of
redeveloping your
applications is so much
more efficient and cost
effective!
Jeremy Pereira wrote:
Your web site truly
sucks. I'm sure the
story is great, but the
audio multimedia which is
on by default just makes
me want to hit the back
button straight away.
All the animated adverts
distract from the content
too.
PS the e-mail address is
a real one in spite of
the gratuitously
insulting user name :)
Colonel Panic wrote: I
guess when I think of
'models of programming' I
think about things like
Object Oriented or
Functional programming
categories. This article
seems to confuse the idea
of 'models of
programming' with actual
types of applications:
desktop vs. Web apps or
perhaps a fusion of the
two. Now one could
program either a desktop
or web app (or an RIA)
using either an
Object-Oriented approach,
declarative, functional
or even a combination of
them. Let's not confuse
the application with the
programming model (or
perhaps programming
metaphor would work
here?)
If the question is what
will the next model of
programming be (beyond
the current reigning
Object Oriented model)
then the answer could
probably lie in the
direction of Aspect
Oriented Programming.
RIA's may be implemented
usian an AOP approach,
but I d...
Sv-Manowar wrote: The
trend towards
RIA's/webapps has
traditionally been
restricted to those in a
database centric role,
but with the increasing
use of AJAX and the like,
the webapp is pushing
further into the desktop
application space.
Obviously the
centralization and
server-side nature of the
applications helps
deployment and
maintainance, but
developers are basically
trading the platform of
an operating system for
the platform of a web
browser, with all the
intricacies and
compatibility issues that
follow both.
Webapps are a good
direction to take for
data access apps, but
where the line becomes
less clear cut and
extreme amounts of
javascript/dhtml are
needed to achieve
behaviours, the apps can
become somewhat clunky
and difficult to use. To
me, it's essential that
the designers of today's
webapps realise the ...
ThinkTiM wrote: RIA is
not a programming model.
RIA is more of a type of
architectural
pattern...it is
definately not a
programming model like
modular programming,
object oriented
programming, etc...
Although I guess
"programming model" could
mean just about anything.
The author of the article
should not have mixed
something very specific
("framework") with
something very general
("programming model").
TeknoHog wrote: >>> What
we need is a parallel
programming
>>> language
that makes it easy and
natural
>>> to take
advantage of multi-core
>>> processors.
These have been around
for ages, but mainly for
scientific computing. For
example Fortran 90 and
later versions, but there
are also variants of C++
and others. Usually they
take advantage of obvious
parallelity in the data,
for example matrix
multiplication, and make
the processors handle the
separate bits without
bothering the programmer
with threads etc. It's
also the kind of
computation that takes
place in graphics cards
with their multiple
pipelines.
I don't see any easy way
to do the same for
general programming. For
example, separate threads
for user interface and
the actual processing is
a good idea, but a very
high-level one, not the
kind of thing that would
...
lheal wrote: I'm pretty
sure it will never be the
rage, but I like
Programming Language
Oriented Programming for
difficult problems that
don't seem doable in C/++
or something similar.
Most programs can be
written practally in most
languages, since all you
really need is "if",
"decrement" and "goto".
Some problems aren't a
good fit for a given
language. That's why
there's more than one.
Any program that breaks
its problem into chunks
is in effect creating its
own mini-language.
Whether you call it
Abstact Data Typing or
Object Orientation or
Functional Programming or
even Top Down Design,
what it comes down to is
dividing the problem into
manageable chunks and
working with those chunks
until done.
I wish all CS students
were taught from day one,
or maybe day fifteen, how
to create their own
programming language.
Usually...
an0n wrote: The best
programming models are
the ones from the past,
as usual. Lisp, Forth,
these languages created a
community of
best-practices that we
are all reinventing all
over again.
Ruby on Rails is great,
not because it's
something NEW, but
because it wraps up all
these best practices with
a friendly face.
Creating simple
domain-specific languages
is how talented
programmers do things
already, with powerful
languages like Lisp.
However languages like
PHP, Python, Java, TOOK
AWAY this ability because
language designers
thought it was
"unnecessary" or "too
complicated" for the
average programmer.
Along comes Ruby, which
gives you back some of
that power. And a
talented programmer took
it and "did the right
thing" by creating a
tight domain-specific
language. Now everybody
is so excited. Great,
whatever makes p...
moultano wrote:
Functional programming is
awesome, and I'm
thoroughly convinced that
it will take over just
about everything its
feasible for it to take
over. There is nothing
like the feeling of
writing a program, having
it type check, and not
having to test it because
you can look at the code
and tell that it proves
its own correctness.
charlie wrote: The
current generation of
SOAs, based on W3C web
standards, are
client-server centric
with a reliance on domain
name based URLs. This
fails for many obvious
reasons.
The next gen solves this
by working outside of the
box and introducing a
disruptive technology
based on a new model that
gives location
independence, transport
independence, and even
application independence
(ie., reuse existing
GUI-based applications
without need to retool).
UE-boy wrote: >>>>rich
Internet applications
(RIAs) ... something
Microsoft will try to
catch up to with Avalon
in Longhorn (now Windows
Vista).
But they are 2 years
behind surely? Vista
can't become the de facto
standard for desktop
apps, it's too late.
Flash 8 has stolen its
thunder - Avalon as the
new UI for Windows...I
just don't believe it any
more.
From Application
Virtualization to Xen, a
round-up of the
virtualization themes &
topics being discussed in
NYC June 23-24, 2008 by
the world-class speaker
faculty at the 3rd
International
Virtualization Conference
& Expo being held by
SYS-CON Events in The
Roosevelt Hotel, in
midtown
It's only taken Borland
two years but it's
finally dumped its
CodeGear tools division,
responsible for Borland's
hereditary JBuilder,
Delphi and C++ Builder
lines as well as its new
web ventures into PHP and
Ruby, said to be used by
7.5 million developers.
Embarcadero Technologies
is b
According to Sean Walsh,
President and CEO of
Skyway Software, 'Our
Skyway Community is
thriving and our members
are very talented. We
truly look forward to
their RIAs submittals and
Skyway Builder extensions
and are excited that all
of the contributions will
benefit the entire Skyway
Skyway Software announced
a strategic partnership
with SpringSource. In
this technology
partnership, Skyway
Software becomes an
application-delivery ISV
certified by SpringSource
and integrates Spring
into Skyway Visual
Perspectives, its
end-to-end application
development and delivery
Brian Stevens, the Chief
Technology Officer and
Vice President of
Engineering of Red Hat,
delivered his
Virtualization Keynote
'The Future of the
Virtual Enterprise' at
SYS-CON's Virtualization
Conference & Expo 2007
West in San Francisco.
'Virtualization is the
hottest subject today,
Red Hat is a trusted
open source provider.
Red Hat offers enterprise
customers a long-term
plan for building
infrastructures on the
quality and innovation of
open source. Combining
open source operating
system platform, Red Hat
Enterprise Linux,
together with
applications, management
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: