Playing it Cool

Before the ink dried on the ruling against Microsoft Corp.’s proprietary implementation of Sun Microsystems Inc.'s Java specification, Microsoft was already brainstorming new approaches for delivering advanced programming language features to its captive clientele.

Before the ink dried on the ruling against Microsoft Corp.’s proprietary implementation of Sun Microsystems Inc.'s Java specification, Microsoft was already brainstorming new approaches for delivering advanced programming language features to its captive clientele. Initially, it seemed as though the court was forbidding Microsoft to develop proprietary Java extensions, but in the months following the ruling, the court clarified its position, reopening the door to a proprietary Microsoft implementation of Java. During the brief time that the Java door seemed firmly shut to Microsoft-only development, Microsoft began incubating the idea for an alternative to Java, code-named "Cool."

Cool may be the most appropriately named Microsoft technology: Management has been quite cool -- downright frigid -- about releasing any details of the project. Other than floating the possibility of a new language to its partners, Microsoft has said very little. Depending on which leaks you believe, Cool is an alternative implementation of Java, a completely new language, or simply a primordial ooze of development ideas, talent and resources from which no product has yet surfaced. I tend to think it’s the latter. First, Microsoft already has an alternative Java implementation with its proprietary extensions to support WFC. Secondly, I don’t believe Microsoft would develop a completely new language without a lot of input from its partners and the development community, who, after all, are going to determine its eventual success or failure.

If Cool is, in fact, an idea mill, it would not surprise me if a new language were to emerge from that mill. To help ensure that any new language born in Redmond will meet our enterprise needs, I’d like to add my input and that of our readers to the fray.

The most obvious question prompted by Cool is do we really need a new programming language? The short answer is yes. Software development may be the only engineering discipline whose quality has gotten progressively worse with age. Programming languages are a big factor in that decline. While daily programming tasks now include modern ideas, such as object-oriented development, event-driven programming, distributed objects, persistent objects, stateless computing and Web delivery, most of the popular development tools are variations of old languages -- C and BASIC -- with some bolt-on features.

The industry’s need for a better mousetrap, however, does not guarantee success for a new development product. Do a quick poll of your fellow developers and ask if they would be willing give up C++, Java or VB to learn a completely new language, on the promise that they could immediately improve quality and productivity. The developers I know would rightly ask how it would improve their marketability. Microsoft understands this need and has a remarkable record for ensuring a market for its development tools.

Once we agree that a new, next-millennium language might be beneficial, the natural question is how should Cool be different from today’s programming languages?

Internet awareness. Cool should follow Java’s lead and support TCP/IP protocols; package code so it is easy to send over the wire; allow -- but don’t require -- code to run in a safe sandbox within a browser.

Generic programming. Templates are C++’s greatest contribution to modern coding, as well as Java’s biggest omission. Templates allow general solutions to algorithms and containers that can be reused for any user-defined types, while incurring no performance penalty over hand-coded solutions. Templates in C++, however, arrived late in the language’s lifecycle and seem like a kludge. Cool should create an elegant template model from the beginning.

Metadata. Most popular programming languages are terribly weak in describing metadata for objects. Within an object definition, few languages go beyond providing the types of the member variables. Within a Cool class definition, one should be able to declare the type, range, persistence and solution-specific metadata for each member. Relationships between classes should also be declared in the class description and enforced by the compiler. Adding metadata to a simple class enables caching, streaming, database persistence, transactions, stateless objects and better optimization.

Problem-oriented syntax. With templates and pre-compiler macros, C++ provides many of the features on my wish list. The solutions, however, are ugly. Syntax and semantic complexity will continue to keep C++ from being a well-received enterprise language. Cool’s syntax should encourage programmers to think in terms of the business problem they are solving, not in terms of the language they are using.

Its time for Microsoft to take the lead in development tools ideas, not just market share. Companies such as IBM, Xerox and HP have contributed to the evolution of software development through serious research investment. Microsoft, however, often seems to create development products with the major goal of thwarting competitors. Now that Microsoft has snatched many of the best language developers on the planet, Cool is an opportunity to show what they can do. I hope Microsoft decides to give them the chance. --Eric Binary Anderson is a development manager at PeopleSoft's PeopleTools division (Pleasanton, Calif.) and has his own consulting business, Binary Solutions. Contact him at