Friday, October 29, 2010

code as content; code as a vector of change

First came symbolic speech. Thousands of languages and dialects blossomed, and the words of some, the shamans, those believed to have direct experience of a spirit world, seemed to possess magical potential.

Then came writing. The great variety of spoken language began to be replaced by preservation approaching permanence, joined shortly by the rigor of peer review and explicit criticism, and the magical potential of the words of the shamans, became invested instead in interpreters, the priests and scribes.

Perhaps presaging what was to follow, a variant of writing, plays, developed into instructions to be performed by acting companies.

Then came machine code, a variant of writing that controls the operation of hardware designed to process such instructions. Very early on that machine code gained conditional branching, the ability to perform different sets of instructions based on the value of some numerical/logical expression. At that point it must have already been apparent to a few that something like machine code would eventually surpass conventional writing, by virtue of its potential to directly control the actions performed by machines. At about the same time, a process of increasing abstraction began, whereby machine code was wrapped in assembler code, which was itself wrapped in higher languages, more closely resembling conventional writing.

Thus far, the impact of computer code on what these days passes for natural language (speech having already been molded by thousands of years of close association with writing) has been to facilitate its production, dissemination, and consumption, but that's only a small part of the whole story.

Computer code, embedded in machinery, has the potential to render meaning tangibly, as real physical performance, with real consequences, good or bad. Given that the design and production of machinery is itself becoming increasingly automated, the question becomes one of what you want the machines to do, and not do, and how those desires can be represented in code.

For example, I can say that I want to preserve what remains of Earth's original biological diversity, while at the same time reducing the dependence of agriculture on petroleum, but in that form it is merely a feeble wish, displaced by the next thought. I can write a treatise explaining why we ought to do what we can to preserve what remains of Earth's original biological diversity and free agriculture from dependence on petroleum, and it may stir others momentarily, but it takes more than that to make any real difference, and if I were to be asked exactly what I'm talking about in practical terms my answer isn't likely to satisfy those whose livelihoods would be effected by any such initiative.

If, on the other hand, I express my intention in the language of machine design and control logic (computer code), the implications, not only of the basic design but of various approaches to managing the system, can be explored through simulation, and that expression goes a long way towards constituting a detailed plan for its own implementation. It's all just code, even the design for the physical machinery, but in a form that makes the decision to go forward with it almost as easy as the decision to flip a switch, at least as compared with a vague call for the desired end results.

Such a project would be too big for any individual, of course, so tools that facilitate collaboration on such projects are needed. Some such tools already exist; others remain to be invented, and much effort is being expended in this direction, even if those involved don't see their work in such grand terms, with the potential to achieve change that could never be achieved through conventional political means alone.

No comments: