To make progress, we must invent novel software methodologies. We must understand what kinds of languages are appropriate for describing amorphous computational processes. We must isolate appropriate primitive computational mechanisms and develop powerful means for combining and abstracting them.
Previous work in massively parallel computing systems may provide some
guidance in these investigations. For example, wizards of cellular
automata and fine-grained parallel processors have devised remarkable
algorithms that marshal immense resources effectively. They have
also developed significant linguistic support for describing these
algorithms.
Amorphous computing presents a greater challenge, because its
mechanisms must be independent of the detailed configuration and
reliability of the elements. For example, smart paint should be able
to determine geometric properties of the surface that it coats without
initial knowledge of the positions of the paint's computational
elements.
Another source of ideas may be research into self-organizing systems,
which has exhibited how some coherent behaviors of large-scale systems
can ``emerge'' from purely local interactions of individual elements.
Amorphous computing may exploit similar phenomena, but it is not our
goal to study the principles of self-organization per se. As
engineers, we want to construct systems so that they end up organized
to behave as we a priori intend, not merely as they happen to
evolve.
Although the programming methodology for amorphous computing can be partially explored in simulation, real intelligent materials must be developed and demonstrated. This is technically challenging, because the available power-distribution and communication technologies require precision interconnect to be robust.
Amorphous computing needs to be demonstrated on a few convincing applications. For example, we could construct a ``sensitive room'' by painting the walls with paint that incorporates computation, light sensors, and vibration sensors.