Getting computers to understand

I think of storage as communication with the past, and by “embodiment” I mean somewhat unconstrained interactions with the physical world. The dates are when the wave began to be important; it’s interesting that they are about 25 years apart. Currently, the communication wave is in full flood, and the first signs of embodiment are starting to appear. Of course, old waves don’t recede: simulation continues to be an important class of applications. New applications are enabled to some extent by new knowledge, but mainly by Moore’s law, that is, by improvement in the cost/performance of computing hardware: processing, RAM, disk, and communications. This has been running at about a factor of 100 per decade. Sometimes, as with speech recognition or web search engines, the cheaper cycles or bytes are applied directly. Often, however, spending more hardware resources makes it possible to spend much less programming effort, as with applications that use web browsers or database systems as components. I find it much harder to predict what will happen in computing during the next 20 years than it was in 1972, when I thought it was fairly obvious [Lampson 1972, 1988]. Perhaps this is because I’m getting old, but perhaps it’s because embodiment is much more open-ended than simulation or communication. In addition, dealing with the physical world depends on many things outside the domain of computing, such as mechanical effectors, neural connections, or radio. And it requires dealing with uncertainty, which is still poorly understood. Nonetheless, I have chosen two problems whose solution will make a big difference both to computer science and to the larger world of which computing is now such an important part. One is an example of embodiment: cars that don’t kill people. The other is a technology that applies across the board: writing programs automatically from specifications. The second obviously has many applications, but the first demands major advances in computing that will also have many other applications. They share a common theme: getting the computer to understand something; in one case roads, in the other specifications.