Technology Review writes about Charles Simonyis solution to the growing complexity of software:
Simonyi is attempting to solve one of the most fundamental problems of software development, typically expressed as making the code look like the design. If he succeeds, users will be able to create high-level designs of what they want their programs to do, which might resemble flow charts more than lines and lines of code. From these designs, code will be created automatically.
How do you make the code look like the design? First, Simonyi contends, you have to understand whats wrong with the current practice of programming.
Programming today is the opposite of diamond mining, he claims. In diamond mining you dig up a lot of dirt to find a small bit of value. With programming you start with the value, the real intention, and bury it in a bunch of dirt.
In Simonyis view, software developers are doomed to fail because they need to do three jobs at the same timeonly one of which they are well suited for. First, they have to understand the often complex needs of the clientthe insurance specialists or accountants or aircraft designers for whom the software is being built. Programmers must try to soak up knowledge that their clients have spent years accumulating. If not a wholly impossible task, its certainly an inefficient use of their expertise.
Second, programmers must translate these client needs into algorithms and interfaces that the computer system can understand. Simonyi sees this as the core task of the programmer. But today its done poorly: when the programmer has completed the software, there is no way for clients to modify it or even to understand how it reflects their contributions.
Third, in order for the computer to execute instructions properly, programmers must write perfect codewith the precision of a machine. Despite constant claims from software companies about the superiority of their development processes to their competitors, the fact is that bug-free programming is impossible, since we are not machines. A study at Carnegie Mellon University recently found that programmers average 100 to 150 mistakes per 1,000 lines of code.
Simonyi wants to rid the programmer of the burdens of all of the third and a large part of the first and second tasks. He seeks to not only automate the dronelike parts of programming but also make the programming interface so intuitive that the insurance specialists or accountants or aircraft designers can see their contributions and make improvements by bringing their own expertise to bear, without the programmer as intermediary. Once programmers are freed from the inappropriate tasks that now burden them, they will be able to concentrate on the task for which they are uniquely trained: the design of the program itself.
The real question is, what are we trying to do with this [piece of] software? Simonyi says. Thats what intentional programming will allow us to concentrate on. When you want to create a wonderful system for health care, you should be concerned with the problems of health care and how to solve them. But the way we write software now, the understanding of those problems is lost, because the programmer needs to be concerned instead with how to sort numbers, or how to store data on a disk.
What, exactly, would a machine for writing software look like? It would itself be software. But its function would not be to solve the end problemto perform some new home or office task. Rather, it would be a software generator, causing a particular piece of software to be written. Telling the generator what program to write would be accomplished through an easy-to-understand interface, sometimes referred to as a modeling language.
The most widely adopted modeling language today is the Unified Modeling Language…a system for creating diagrams. Its intended to let managers of large software projects visualize their designs and make sure they meet the clients requirements before programmers sit down to write code in programming languages such as Java or C++.
Simonyis vision, and the reason he started his company, is to take the idea of models and go one step further: to link the model and the programming so tightly that they eventually become the same. Programmers and users will be able to switch between many contrasting views of the model they are creating, and revise programs at will simply by tweaking the models. Its something like an architect being able to draw a blueprint that has the magical property of building the structure it depictsand even, should the blueprint be amended, rebuilding the structure anew.
This is quite amazing – it will be a major leap in what has become a bottleneck in making the most of computing technology – software development.