March 20, 2006 (Computerworld) Twenty years ago, software engineer Fred Brooks famously observed that there was no silver bullet that could slay "the monster of missed schedules, blown budgets and flawed products." Today, the creation of software might seem as expensive, trouble-prone and difficult as ever.
And yet progress is being made. While there is still no silver bullet in sight, an array of new techniques promises to further boost programmer productivity, at least in some application domains.
The techniques span a broad spectrum of methods and results, but all are aimed at generating software automatically. Typically, they generate code from high- level, machine-readable designs or from domain-specific languagesassisted by advanced compilersthat sometimes can be used by nonprogrammers.

![]()
Gordon Novak, a computer science professor at the University of Texas at Austin
![]()
Novak's users construct "views" that describe application data and principles and then connect the views by arrows in diagrams that show the relationships among the data. The diagrams are, in essence, very high-level flowcharts of the desired program. They get compiled in a way that customizes the stored generic algorithms for the user's specific problem, and the result is ordinary source code such as C, C++ or Java.
Novak says he was able to generate 250 lines of source code for an indexing program in 90 seconds with his system. That's equivalent to a week of productivity for an average programmer using a traditional language, he says. "You are describing your program at a higher level," he says. "And what my program is saying is, 'I can tailor the algorithm for your application for free.'"
Novak says he intends to expand the system to allow construction of larger programs and eventually to turn it into a commercial product. "I hope to move programming up a level, from the writing of code to programming in terms of abstractions, such as physical models, financial models and so on," he says.

![]()
Douglas Smith, principal scientist at Kestrel Institute
![]()
Specware Features
A programmer starts with Kestrel's Specware, which is a general-purpose, fifth-generation language that specifies a program's functions without regard to the ultimate programming language, system architecture, algorithms, data structures and so on. Specware draws on a library of components, but the components aren't code. They are at a higher level and include design knowledge and principles about algorithms, data structures and so on. Smith calls them "abstract templates."
In addition, Specware can produce proofs that the working code is "correct"that is, that it conforms to the requirements put in by the user (which, of course, may contain errors). "Some customers want that for very-high-assurance applications, with no security flaws," Smith says. Kestrel does work for NASA and U.S. military and security agencies.
Specware is essentially a productivity tool for programmers, producing several times as many lines of code as is actually written by the programmer. But Kestrel has something at an even higher levela language called Planware that's specifically for creating scheduling applications. Smith says users at the U.S. Air Force, who know about airplanes, runways and air bases but not software, used it to create an aircraft scheduling system.
"It's a language for writing down problem requirements, a high-level statement of what a solution should be, without saying how to solve the problem," Smith says. "We think it's the ultimate frontier in software engineering. It's what systems analysts do."
In the future, Kestrel will enhance its techniques by incorporating some of the concepts of aspect-oriented programming that deal with issues that cut across programs, such as activity logging and authentication. When users make a policy change related to such cross-cutting issues, it can entail expensive code changes at many places in a system. "I want to allow programmers to write policies at a very high level and then have them automatically enforced," Smith says.
"How to put cross-cutting issues into designs is one of the most important things going on in software engineering right now."
CODE EXPLOSION
The whole history of computer science has been toward increasingly high-level languages machine language, assembler, macros, Fortran, Java and so on and we are working at the extreme end of that, says Douglas Smith, principal scientist at Kestrel Institute.
The higher the programmer goes, the less code he needs to write and the less he needs to know about algorithms, data structures and hardware.
When Kestrel and the U.S. Air Force developed a mission-scheduling application, analysts using Kestrels Planware language were able to produce 17 lines of Specware code, 74 lines of Lisp code and 189 lines of assembler for each line written in Planware.
Gary Anthes
LINES OF CODE
LANGUAGE
LANGUAGE DESCRIPTION
2,500
Kestrel Planware
6GL domain-specific requirements-modeling language, partly graphical, partly textual
43,000
Kestrel Specware
5GL general-purpose functional programming language
186,000
Common Lisp
3GL programming language
472,000
Assembler
Obtained by disassembling the compiled Common Lisp code. Code can be proved to be correct per requirements.