Today's master computer programmers are a bit like digital Debussys and Dvoraks, crafting intricate "scores" that get microprocessors and memories to perform all manner of complex calculations.
Metaphorically speaking, there are the Bachs and Hadyns who create elaborately structured, fugue-like programs; there are the John Coltrane- and Miles Davis-like jazz programmers who can whip up their improvisations at the keyboard, and, of course, there are the heavy-metal hackers who bring more passion than technique to their programs.
Regardless of individual style, programmers are the people who make the computer world--the air traffic control systems, the automated teller machines, the telecommunications networks--go 'round.
But the musical metaphor in computation may soon be passe. Beethoven and rock 'n' roll programming will ultimately give way to the programming metaphor crafted by Charles Darwin: evolution. Tomorrow's state-of-the-art software won't be written; it will be grown. Instead of composing programs, future hackers will be breeding them.
"I think of it as being like a software brew master," says Danny Hillis, designer of the Connection Machine supercomputer and a pioneer of such "evolutionary programming." "This (approach) gives us the potential to get computers to do things that are more complicated than we understand."
An evolutionary program, for example, would be able to sort through massive computer databases more effectively than traditional software programs. It would leverage the computational resources of the machine rather than requiring hours of laborious thought by the programmer. In other words, evolutionary programming should be easier on the brain.
The underlying concept is simple: treat the computer as an environment and the programs as organisms that can be evolved over time. Instead of writing instructions, the designer imbues the program with certain "traits"--software genes--and then defines the environmental constraints within which these organisms will evolve; for example, memory availability. Preliminary efforts reveal that "evolved" programs can be far more efficient--and less expensive to develop--than handcrafted ones.
"We all find programming very frustrating," Hillis has said. "The dream is to have this little world where we can evolve programs to do something we want. We punish them and wipe them out if they don't do what we want, and after a few hundred thousand generations or so, we have a program that ideally behaves the way we like. We can play God, but all we have to do is define the puzzle for them. We don't have to be smart enough to figure out the way they solve the puzzle."
Indeed, as computers have become cheaper and more powerful, churning software organisms through millions of generations is a snap. What takes nature millions of years with carbon-based life forms can be a matter of minutes in software on silicon. Much of this work is a direct spinoff of research into "artificial life," or software that is designed around the metaphors of biology and behavior.
With high-speed evolutionary programming, however, artificial life moves from the domain of provocative research to the realm of the invitingly practical.
"It's an idea whose time is actually overdue," asserts Steven Levy, author of "Artificial Life: The Quest for a New Creation" (Pantheon, 1992). "But it's scary for a lot of people, particularly in programming. This whole technique goes against what programmers do; it's counter-intuitive. It turns the keys of the car over to nature."
Ironically, Levy's most successful previous book described the history and subculture of "hackers," software wizards whose virtuosity could make computers figuratively jump through hoops. Now, Levy says, "the programmers are hitting a point where they can create other programmers." Instead of endlessly writing, rewriting and "debugging" their programs, Levy says, successful software designers will have to learn how to build digital "terrariums" with creatures that can co-evolve into useful, functional programs.
In a sense, Levy asserts, this next generation of programmers "will be creating partners as much as programs." This, in turn, will demand a new breed of programmers. Instead of individuals who make sure that every "i" is dotted and every "t" is crossed before a program actually runs, evolutionary programmers will focus instead on broader themes of environments and constraints. They will be more like gardeners than composers or engineers.
As a result, evolutionary programming will create software that has been tested by the rigors of evolutionary forces, giving it a robustness that many traditionally programmed systems frequently lack.
Of course, on the down side, the chances are that humans may not understand the software that evolutionary programming has yielded--much as we don't yet understand the genomes and molecular biologies of even simple plants and animals. But that's one of the choices we will have to make: Do we trust our complex systems to human designs whose frailties we can grasp? Or do we trust them to systems built by evolutionary forces we don't fully understand?
Either way, the future of software on computers looks an awful lot like the way Darwin described the history of life.