An idea that rocked my world at SciBarCamp was the understanding that everything should be expressed as code.
This realization was the outcome of two sessions. In one session, Andrew Hessel gave a fantastic talk about synthetic biology, i.e., the direct synthesis of biological organisms, by coding their DNA. One of many fascinating things about the talk was the point of view, which wasn’t so much that of a biologist, as that of a computer programmer. A nice example of this point of view is provided by the BioBricks Foundation:
Using BioBrickâ„¢ standard biological parts, a synthetic biologist or biological engineer can already, to some extent, program living organisms in the same way a computer scientist can program a computer. The DNA sequence information and other characteristics of BioBrickâ„¢ standard biological parts are made available to the public free of charge currently via MIT’s Registry of Standard Biological Parts.
In another session, Mark Tovey spoke about open source objects (I don’t remember Mark’s exact terminology), and pointed out that using suitable fabrication technology it becomes possible to express objects as code.
In both cases, expressing something we don’t ordinarily think of as code means that all the social and technical processes of software development can be applied. In the ordinary way of thinking it doesn’t make sense to take the “diff” of two objects, and version control (with merging!) would be cumbersome at best. By expressing objects as code, these and many other operations become trivial. Libraries, APIs, and high-level domain specific languages can be built. Widespread distributed collaboration becomes possible. The open source process can be applied. A creative commons can be constructed.
This circle of ideas gives rise to many wonderful questions. What are the right sorts of abstraction when you’re expressing objects as code? Biology? Movies? Music? What sorts of libraries might we build? What’s the lisp of biology? The LAMP stack for music?