How do you make the code look like the design? First, Simonyi contends, you have to understand what’s 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 Simonyi’s view, software developers are doomed to fail because they need to do three jobs at the same time-only one of which they are well suited for. First, they have to understand the often complex needs of the client-the 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, it’s 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 it’s 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 code-with 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. “That’s 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.”