DNA from Eye of Coder

 


Many years ago, in 2008, a programmer researched DNA and how the cell works and wrote a software-related analogy for the process. It was a great overview, especially because he translated a lot of the biological terminology into concepts that engineers could understand. I kept thinking about the article afterward and wanted to add my own spin to it. The author didn't really do anything wrong—the article is excellent—but I personally wished he had reduced the software analogy to a paragraph or two that an engineer could quickly visualize. As for the underlying biology, I am not a scientist, so I am certainly not trying to refute or replace his explanation.

The article ends with an analogy that I particularly enjoyed: DNA is not a computer programming language, but there are some interesting similarities. We can loosely imagine a cell as a computer running its own system. Each cell contains essentially the same DNA, but different cells use different portions of that information. When a cell needs to produce something, information in DNA can be transcribed into RNA, and that information can ultimately be used in the production of proteins. That description immediately made me think about how I would model the same process as a software engineer.

I would loosely analogize DNA processing to a combination of persistent storage and executable system configuration. Imagine something like a VMware virtual machine. The VM image contains persistent information describing the system, but that information isn't merely sitting there as passive storage. The running virtual machine provides an environment in which processes can execute and use the information contained within the system. DNA similarly contains important information about how the cell is constructed and operates, while cellular machinery can access particular portions of that information when needed. The analogy obviously isn't exact—DNA itself isn't literally executing software—but thinking about the system this way gives an engineer something familiar to work with.

Now imagine our DNA virtual machine has something resembling a cron task. When triggered, the task reads a particular section of stored information and creates a message that is sent elsewhere for processing. I think of that message somewhat like a web-service request. DNA remains in the nucleus, so rather than moving the DNA itself, the cell creates an RNA copy of the relevant information during transcription. Messenger RNA, or mRNA, can then carry that information out of the nucleus. In the software analogy, DNA is the persistent source information, transcription creates the message, and mRNA is the message traveling to another component of the system.

Continuing the analogy, imagine the cron job running periodically. It launches an application that reads the required information from DNA and produces our web-service message. On the receiving side, cellular machinery uses the mRNA instructions, along with molecules such as tRNA, during translation to assemble a protein from amino acids. Proteins can become structural components of the cell or perform many other cellular functions. Obviously, cells do not contain VMware, cron, web services, or application servers, and the timing and control mechanisms are considerably more complicated than this analogy suggests. But that isn't really the point. As an engineer, I find it useful to temporarily remove some of the biological terminology and think about the flow as stored information → triggered processing → message → translation → resulting product. Once I can visualize that basic mechanism, I can go back to the biology and understand the actual machinery in considerably more detail.

Note: The five-minute cron interval is completely arbitrary and exists only for the software analogy.

Reference: David S. Goodsell, The Machinery of Life (1993).

https://berthub.eu/

https://berthub.eu/articles/posts/amazing-dna/



Comments

Popular posts from this blog

JVM Notebook: Basic Clojure, Java and JVM Language performance

On Unit Testing, Java TDD for developers to write

Application server performance testing, includes Django, ErlyWeb, Rails and others