The Economics -- and Politics -- of Software Language Evolution
Joe Darcy has posted a very interesting blog on the similarities between his own experience as a Project Coin lead and what the leaders of the C++ standards team experienced as that language evolved. He titles his post "Project Coin: Solidarity with C++ Evolution". The use of the word "solidarity" reflects a team or band of soldiers who are under fire, perhaps significantly outnumbered, and facing attacks on multiple fronts. Indeed, if you've been following the reactions to the progress of Project Coin, in particular the reaction to the final list of JDK 7 features, it's easy to see how the Project Coin team would find justification and support in looking at what Bjarne Stroustrup and the C++ committees experienced (as stated in Bjarne's paper "Evolving a language in and for the real world: C++ 1991-2006").
Prior to reading that paper, the Project Coin team might recently have been asking themselves: "Is it us? Are we being unreasonable in some manner?" But Bjarne's experiences tell them "no, it's not you, this is just the nature of software language evolution, and community reactions to the necessities imposed by reality... you're the messenger, and they shoot you -- no matter what you do."
Here's a key quote Joe cites from Bjarne's paper:
As ever, there are far more proposals than the committee could handle or the language could absorb. As ever, even accepting all the good proposals is infeasible. As ever, there seems to be as many people claiming that the committee is spoiling the language by gratuitous complicated features as there are people who complain that the committee is killing the language by refusing to accept essential features. If you take away consistent overstatement of arguments, both sides have a fair degree of reason behind them. The balancing act facing the committee is distinctly nontrivial.
And what is Joe's reaction to this? An interesting presentation of the economics and politics of software language evolution:
Viewed over the long term, one goal to evolving a platform is trying maximize value delivered over time. This is analogous to a net present value-style consideration from economics. A feature delivered in the future is less valuable than having the feature today, but the value of choosing to do a feature needs to be weighed against the
opportunity costs of doing something else instead. Developers are chronically optimistic and eager to deliver something sooner rather than later, especially when the next release vehicle may be in the relatively distant future. As previously indicated, I too would prefer to see additional language changes as part of Project Coin in JDK 7. However, given the available resources, overcommitting to a large set of features is not responsible; either the large set won't get done in the end, it won't get done well, or the schedule would slip — all of which lead to reduced value too.
I myself have a generally sympathetic view toward what Joe is expressing. It's always easy for non-decision-makers to loudly criticize those who have undertaken the task of trying to advance a platform, and do so in a balanced manner that accounts for the real-world limits of resources and time. What a software language committee faces is not all that different from what an elected leader of a nation faces at times. No matter what you do, for a significant segment of the populace, it's wrong -- and what's going wrong for your particular society is all your fault!
If you'd like to express your own reaction to the proposed final JDK 7 features list, our current java.net poll provides you with a fast and simple opportunity to do that. Voting will be open through Thursday.
Or, if you'd like, post a comment below, or post a comment to Joe's post.
As I just reported in a little more detail over at Superpatterns, we released OpenSSO Express Build 8 yesterday, including features such as our new One Time Password feature, the Fedlet for .Net and a new task flow for enabling single sign-on to Salesforce.com.
Joe Darcy points out some similarities in the history of Java and C++ in Project Coin: Solidarity with C++ Evolution:
Recently I read with interest Bjarne Stroustrup's HOPL III paper Evolving a language in and for the real world: C++ 1991-2006. Despite the numerous technical differences between Java and C++, I was struck by some of the similarities in community involvement and expectations in the evolution of both languages. Selected excerpts from the paper are in block quotes below...
Simon Brocklehurst is seeking a few seconds of your time, to help with "Testing JavaFX Applet Deployment":
With the release of version 1.2, the JavaFX platform is starting to become a viable choice for developing real-world, browser-based rich internet applications (RIAs). However, there are questions to be asked about deployment. In particular, it's important to know what are the chances that people will actually be able to use a JavaFX app without having problems getting it to run.
In order to begin to answer this, I'd really appreciate your help in running a little test...
In today's Weblogs, Roger Kitain writes about Contexts and Dependency Injection (JSR 299) and GlassFish:
Version 1.0.0.PREVIEW3 of Web Beans (the implementation for JSR 299 Contexts and Dependency Injection For Java EE) now uses the annotations from JSR 330 (Dependency Injection For Java) and it is available in GlassFish V3. In this entry, we'll look at a simple JSF 2 application that uses Web Beans and the JSR 330 annotations. There are other features available in this release of Web Beans which will be discussed in subsequent blog entries.
Masoud Kalali asks So you want to develop a rich client application on top of NetBeans RCP?:
I was involved with development of a RCP application based on NetBeans platform and now I find few minutes to share some of the experience with you.
All standard coding and best practices are applicable here. Use project management systems like Trac or any project management system that you know. Never start a project without a project management system. Use coding standard, unit testing, desing and implementation documents versioning, design discussion sessions and so on.
Sahoo describes Using a REST Console to administer OSGi runtime in GlassFish:
What are our options to administer OSGi runtime in GlassFish? We have already talked about
a) a command line tool, and
b) a web console.
We now have a third option. Recently I came across a REST based console being developed by Filippo Diotalevi. We already have all the necessary support in GlassFish - the REST console requires OSGi/HTTP Service and we have an implementation of the same in GlassFish. So, I thought I would give it a try and I found it a smooth ride.
In the Forums,
p3p0 wants to Connect to multiple databases with Glassfish v3: "Hi friends. How do I can connect to more than one database in the same EJB? I need to take some values from database A then after some process update in database B, update database C too and finally update in database A. Databases B..."
vkpanditis seeing a class not found exception in axis2: "I am using Axis2.1.5 and axis 2 eclipse plugin for service generator. I am including all the jar files for the imported classes for the creation of the aar file and deploying the aar file in axis2. However, I get a Class Not Found Exception at..."
sebete asks about Text2d with non-standard font: "Hi, here i'm again. I was thinking about using some non-standard fonts in my project, adding my ttf as a resource in my .jar. But when i tryed to construct my Text2d I realised that Text2d constructor only take the name of the font, and nothing..."
Our current Spotlight is Terrence Barr's annoucement of 4 New Screencasts: LWUIT, JDTF, JSR 290, and JavaCard: "Our documentation team has put together four brand-new screencasts on current subjects. They are 5 minutes each in length and a great way to get introduced quickly to the highlights of each topic. I encourage you to have a look..."
Our Feature Articles include Jeff Friesen's article Introducing Custom Paints to JavaFX, which shows how you can leverage undocumented JavaFX capabilities to support custom paints in JavaFX Version 1.2. We're also featuring Biswajit Sarkar's Using the Payment API for Microcredit and Other Applications, which describes how to apply the Payment API (JSR 229) in JavaME applications.
The latest Java Mobility Podcast is Java Mobility Podcast 86: Mobile Service Architecture 2: Introducing New Features in Mobile Devices: "Kay Glahn from Vodafone Group R&D and Erkki Rysa from Nokia share the new features in MSA2 in this abbreviated feature from JavaOne."
Current and upcoming Java Events:
- September 9-11: Java Power Tools - Canberra
- September 11-13: 2009 New England Software Symposium: Fall Edition
- September 14-16: The Ajax Experience
- September 16-19: 2009 JVM Language Summit, Santa Clara, CA
- September 18-20: 2009 Pacific Northwest Software Symposium
- October 5-9: Java Power Tools - Brisbane
- October 19-23: Java Power Tools - Sydney
- October 23: Strange Loop Conference - St. Louis
- October 24: Florida Linux Show 2009 Orlando
- December 11-12: 4th IndicThreads.com Conference On Java Technology, Pune, India
Archives and Subscriptions: This blog is delivered weekdays as the Java Today RSS feed. Also, once this page is no longer featured as the front page of java.net it will be archived along with other past issues in the java.net Archive.