Space tourist and billionaire programmer Charles Simonyi designed Microsoft Office. Now he wants to reprogram software published in MIT Technology Review, Jan 8, 2007 by Scott Rosenberg
Simonyi believes he can solve a host of stubborn problems that have always plagued computers by offering everyone who uses them, and the coders who program them, a higher-order view of software.
Studies regularly report that two-thirds of such projects encounter major delays, significant cost overruns, or both. … Every year, according to a 2002 study by the National Institute of Standards and Technology, software failures cost $59.5 billion. But the price of bad software can also be measured in human misery–and even in lives lost. … One formulation of this problem is known as Wirth's Law, after programming expert Niklaus Wirth: "Software gets slower faster than hardware gets faster."
Simonyi's ambition is to unstop that software bottleneck–characteristically, by going meta. He's developed an approach he calls intentional programming (or, more recently, intentional software), which he hopes will overturn programming. If Simonyi has his way, programmers will stop trying to manage their clients' needs. Instead, for every problem they're asked to tackle–whether inventory tracking or missile guidance–they will create generic tools that the computer users themselves can modify to guide the software's future evolution.
The difficulty of coördinating a team's work inspired software engineering's most famous dictum, known as Brooks's Law: "Adding manpower to a late software project makes it later."
This was the backdrop for Simonyi's 1977 dissertation, "Meta-Programming: A Software Production Method." Simonyi proposed a new approach to "optimizing productivity," in which one lead programmer, or "meta-programmer," designed a product and defined all its terms, then handed off a blueprint to "technicians," worker-bee programmers who would do the implementation.
In 1981, Simonyi moved to Seattle to start the new-applications group at Microsoft, which until then had sold programming languages and operating systems. He was 33, but that made him a grown-up among Microsoft's striplings (Gates was then 26 years old, Steve Ballmer 25).
Moving to a position at Microsoft Research, Simonyi began to define the concept of intentional programming, or IP for short. Intentional programming would add an entirely new layer of abstraction to the practice of writing software. It would enable programmers to express their intentions without sinking in the mire of so-called implementation details that always threatened to swallow them. … [I]ntentional programming called for a sort of code factory called a "generator," a program that takes in a set of relatively high-level commands and spits out more-detailed working code. The goal wasn't so much to ease the labor of programming as to let programmers clear their brains of trivialities so they could actually be creative.
Simonyi had been a company man for more than 20 years. But in 2002, he left Microsoft and launched an independent company. He walked out with a patent-cross-licensing agreement that let him use the concepts and ideas of his intentional-programming research but did not permit him to take any of his old code with him. He would have to start writing a new code base from scratch.
Intentional Software's strategy borrows from a trend in programming known as "domain-specific languages" or DSLs–little programming dialects tuned to the needs of specific disciplines. Simonyi praises DSLs but says they don't go far enough. They're hard to create and therefore costly; you end up needing more than one (for a medical billing system, you'd need at least a medical and a financial language); and they're incompatible with one another. Intentional Software's system is like a factory for multiple DSLs that can talk to one another.
Here's how it might work: Suppose an international bank wanted to develop a new system for managing transactions in multiple currencies. First, the bank's own domain experts would define the system's functionality, using their customary terms and symbols and identifying the most important variables ("time" or "value" or "size of transaction") and the most common procedures ("convert holdings from one currency to another" or "purchase hedge against falling value"). Then the programmers would take that information and build a "domain specific" program generator that embodies that information. A separate software tool would allow the domain experts to experiment with different sets of data and ways to view that data as easily as businesspeople today rearrange their spreadsheets.
We should be able to design functions and data structures–which intentional programming represents as "intentional trees"–and let the generator modify the code accordingly.
The visible fruit of Intentional's work to date is a nifty tool called the Domain Workbench, which stores a program's vital information in an intentional-tree database and then offers you many different "projections" of that information. In a demonstration Intentional gave at two conferences last fall, the Workbench–using a feature called the Kaleidoscope–took a series of code fragments and displayed them in a dizzying variety of formats. It didn't matter how the syntax of the code had been specified; you could view it, and change it, using whatever notation you preferred. You could edit your program as traditional bracketed and indented code, or switch to outline form, or make it look like a schematic electrical-wiring diagram, or choose something called a "railroad diagram," a kind of flowchart notation derived from old-fashioned train maps. Each view is a translation of the underlying tree–which you can also examine and edit.