| By Simeon Simeonov | Article Rating: |
|
| August 28, 2005 12:00 PM EDT | Reads: |
13,987 |
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 making 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, and 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 going 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 each come with its own set of frameworks and tools.
I have some first-hand experience in 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 & Flex, something Microsoft will try to catch up to with Avalon in Longhorn. 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
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 that 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 it 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 and with the new capabilities in CF 7.0. As both a technologist and an investor, I'm excited about the future.
Published August 28, 2005 Reads 13,987
Copyright © 2005 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
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.
![]() |
ike 09/14/05 11:19:57 PM EDT | |||
When you mention Ruby on Rails are you really talking about RoR, because that's very much a framework and not a model, or are you talking about Ruby which arguably varies in some significant ways from other programming languges? From the standpoint of being able to build powerful applications quickly, the onTap framework appears very similar to Ruby on Rails actually by providing a lot of the same tools... But as you say, they are just tools layered on top of an existing programming model. |
||||
- AJAX World RIA Conference & Expo Kicks Off in New York City
- Ulitzer’s Amazing First 30 Days in Public Beta
- "Government IT Expo" to Highlight Cloud Computing and SOA
- Will Ulitzer Dominate News Content on The Web? -Gartner
- Clear Toolkit 4: The Road Map
- Creating Adobe AIR Native Menu with Flash CS4
- Ulitzer Responds to Published Reports
- Ulitzer vs. Ning - a Quick Review
- Adobe AIR: Creating Dock and System Tray Icon Menus
- Social Media Terrorists
- AJAX World RIA Conference & Expo Kicks Off in New York City
- Web Services Using ColdFusion and Apache CXF
- Adobe Takes LiveCycle into the Cloud
- Ulitzer’s Amazing First 30 Days in Public Beta
- Adobe Creates a Sandbox in the Sky
- "Government IT Expo" to Highlight Cloud Computing and SOA
- Will Ulitzer Dominate News Content on The Web? -Gartner
- The Role of an RIA in the Enterprise
- Clear Toolkit 4: The Road Map
- Creating Adobe AIR Native Menu with Flash CS4
- The Next Programming Models, RIAs and Composite Applications
- Constructing an Application with Flash Forms from the Ground Up
- AJAX World RIA Conference & Expo Kicks Off in New York City
- CFEclipse: The Developer's IDE, Eclipse For ColdFusion
- Personal Branding Checklist
- Adobe Flex 2: Advanced DataGrid
- i-Technology Viewpoint: We Need Not More Frameworks, But Better Programmers
- The Asynchronous CFML Gateway
- Building a Zip Code Proximity Search with ColdFusion
- Web Services Using ColdFusion and Apache CXF






































