Friday, February 22, 2008

Layering and Branching

Representations form natural layered structures, with the representation of one system being the target domain of another, and so, as shown schematically here:

A common family of layers in computational representations connects entities in some target domain with numbers, the numbers with collections of bits, and the bits with physical structures of some kind. Here's an elaborated example of this, starting with sticks, in a target domain at the top:

This diagram shows branching, as well as layering: for a given target domain there can be more than one possible representation domain. For example, numbers can be represented by elements of a data type (double) in a language like C, or by voltages in an analog machine. Elements in a data type can be represented by blocks of bits, and bits can be represented by very different physical structures, like magnetic cores, at left, or circuits with more than one pattern of circulation of current, at right.

The usefulness of representations is greatly increased by these two kinds of structure, layering and branching. Layering means that representations often can be devised and thought about without knowing or caring about most of the layers in a structure. Thus I can use numbers in a program without knowing or caring how the bits used to represent the numbers are implemented.

Branching works with layering to create vital flexibility. In my career the actual representation of bits has changed completely, from magnetic cores to nests of tiny transistors, but as a programmer this change affects me only secondarily, through improvements in cost and performance. The investments in software I and many others made were not lost, even as the hardware structures used to represent them changed utterly.

Although this example doesn't show it, there is upward branching as well as downward branching. Upward branching shows up when the same representation domain is used with more than one target domain. Clearly, lots of things can be represented by numbers with addition as a combining operation, for example. Thus upward branching signifies multiple use of representations. Mathematical (and computational) structures get much of their usefulness from the fact that they can be used to represent lots of different things.

Layering and the Organization of Disciplines

Looking at bundles of layered structures one sees a tree with branches (or roots) at top and bottom:

The branches at the top radiate into all the corners of human endeavor, from management to chemistry, and beyond. The roots of the tree extend into the wide variety of physical structures that are used, way down at the bottom of all the layered structures, to implement the representations above them. The traditional discipline of computer science focuses on the structures in the trunk of the tree, largely independent of the branches above, that distinguish different applications, and at the same time largely independent of the roots below, that distinguish various possible technologies of implementation.

Mathematics also inhabits this middle zone, studying structures that are largely independent of their applications, above, and certainly independent of the layers below. Indeed, mathematics is different from computer science, or vice versa, largely in the demand in computer science that its representational structures actually be implemented, that is, that they be grounded, or at least groundable, in physical structures.

(Telecommunications is also in the trunk along with computer science and mathematics. A good part of this field concerns communication in a way that is disconnected from the content of communications, as worked out in layers above the communication system, and from the implementation, worked out in layers below, where it is worked out that a system is built from electric wires, or from optical fibers, or from radio transmitters and receivers.)

The fact that the disciplines can be sorted out in this way, by reference to layered representational systems, does not mean that there are important advantages in doing so. The success of tight collaborations between computer scientists and scientists in other disciplines, like those that have led to the explosion of computational biology, suggests the value of understanding multiple layers at the same time, in devising new and more useful representations. Looking down from traditional computer science, there have also been important gains in blurring the traditional software-hardware boundary, in devising implementations that are sensitive to attributes of programming languages, and vice versa.

Donald Campbell, in his "Ethnocentrism of the disciplines and the fishscale model of omniscience", 1969, showed how very simple organizational processes lead to disciplines withdrawing from boundary areas. Computer science may stand to gain even more than other disciplines from fighting this tendency, and actively developing its boundary areas.

No comments: