In the beginning was the code, and the code gave life, and the code was life

← back to the blog

Credit: Randall Munro, Used under CC BY-NC

The oldest gene we possess carries the information to make something called the 5S RNA, a component of the ribosome. This molecular machine is responsible for translating a DNA sequence into a protein sequence. The reason this is critical is that chemical properties of DNA are pretty simple: it's more or less just a carrier for information. Proteins on the other hand, have astoundingly complex chemistry: they can synthesize or break down sugar, create pigments to give us a specific hair colour, give us or prevent cancer. In short: everything.

DNA and protein present the grandmother of all chicken-and-egg problems: one simply cannot exist without the other. DNA depends on specific proteins to replicate, while protein cannot replicate at all and depends on DNA to make more copies of itself. The answer to this apparent paradox comes from the intermediary between these two: RNA. RNA carries information in the same way as DNA, but is someone less stable and more prone to error. However, it can also do a limited amount of the fancy folding-and-chemistry that proteins can. It can be - in the right circumstances - both word and action.

Life has exactly one requirement: information capable of making copies of itself. At some time in the very distant past, a molecule that was likely RNA or something related to it, carried the exact chemical properties needed to spam copies of itself. It was both word and action. As this molecule made copies which sometimes contained errors, it became increasingly sophisticated, and the word and action functions eventually became abstracted out to more specialized subcomponents.

This history appears to be repeating itself. The physical world is hard to deal with, but once the process of translating simple signals into pixels, robotic movements, or 3D objects becomes codified, the signals can rapidly become more and more complex. Eventually, they become sophisticated enough that the it defies naive logic: how can the mere expression of language actually do something? And yet the language needed to turn a sperm and egg into a human being requires orders of magnitude less code than the micro-SD card in your phone.

There's an unsettling corollary to all this, which is: what happens when software becomes too sophisticated for our human brains to grasp it? Biology certainly exists in this space: most scientists working in the field study only a tiny part of a grand system, or an immensely simplified model of a complex system. Arguably software already exists in this space, as programmers tend to work only at the very top of a rickety pile of abstractions.

The truly disturbing part is that life becomes more sophisticated through random change and selection of minute improvements. Programmers think of themselves as smart, but even random change, followed by selection (forking, community growth, adoption of technology by the masses) ought to be enough for software to move forward. Merges are even a kind of sex, allowing improvements that occur in different places to find each other. Will we get to the point where we simply write tests and let the computer randomly generate solutions until it finds the optimal one? (Now, that's TDD for you). Is it inevitable?