Тем не менее, в этой статье мы предположим, что такие аналогии являются более смелыми, чем точными, и попробуем рассмотреть, почему ДНК может считаться субстратом для полноценного генетического программирования, но сама по себе достаточно далека от языка программирования и языка как такового.
ДНК является матрицей для синтеза белков и, в конечном итоге, предназначена для передачи генетического материала от поколения к поколению. Таким образом, генетический код может считаться работоспособным, если позволит носителю оставить многочисленное плодовитое потомство, которое при этом окажется не менее или более жизнеспособным, чем представители родительского поколения. Это задача, которая сформулирована достаточно широко, поэтому эволюция при всей успешности является «багородным» начинанием и обременяет своих детищ огромной базой унаследованного, закомментированного и нещадно сбоящего кода.
Синтетическая биология, в свою очередь, ставит перед собой значительно более четко очерченные цели, чем эволюция. Например, серьезнейшая область применения технологии CRISPR связана с противоопухолевыми разработками, притом, что сами раковые клетки являются плодом неизбирательного естественного отбора – отбор поддерживает их, поскольку им удается эффективно и быстро оставлять потомство, а также мимикрировать под здоровые клетки пораженной ткани.
Код ДНК более подобен естественному языку, нежели языку программирования, так как избыточен, быстро накапливает ошибки, полон сложных зависимостей, которые обусловлены контекстом развития организма, и вред или полезность этих зависимостей не всегда очевидны.
Широко известен пример с серповидноклеточной анемией — наследственным заболеванием, в результате которого человеческий эритроцит приобретает неправильную форму и оказывается в большей степени похож на полумесяц, нежели на пончик.
Предполагается, что эритроцит неправильной формы затрудняет протекание малярии и неудобен для проживания малярийных плазмодиев, благодаря чему носитель данного заболевания получает лишний шанс дожить до репродуктивного возраста, и лишь потом умереть от инфаркта. В зависимости от условий проживания и возраста индивида перед нами «и баг, и фича в одном кодоне».
При «тестировании» in vivo таких генетических модификаций естественный отбор не был стеснен сроками и требованиями к качеству, а скорее развивался в условиях, многие из которых можно сравнить с DDD. Продолжая аналогию с кровеносной системой, можно назвать предметно-ориентированным решением голубую кровь головоногих моллюсков. В качестве металла, аналогичного железу, в крови осьминога содержится медь. Согласно новейшим исследованиям, такая эволюционная находка оптимизирует насыщение крови кислородом в холодной воде и при низкой концентрации кислорода как такового.
Если же представить себе тестирование реальных биотехнологических разработок in vivo так, как тестируется программный код, здесь экстраполяция наталкивается на явные нестыковки и сложности, о которых, в частности, сказано в статье Брюса Шнайера и Ларисы Руденко:
Представьте себе биотехнолога, который пытается нарастить экспрессию гена, обеспечивающего нормальное воспроизведение клеток крови. Хотя, по нынешним стандартам эта операция весьма проста, почти наверняка успех будет достигнут не с первой попытки. В случае софтверного кода весь ущерб, который был бы нанесен таким кодом – это аварийное завершение программы, в которой он работает. В биологии же такой ошибочный код мог бы значительно повысить вероятность возникновения разнообразных лейкемий и уничтожить жизненно важные клетки иммунной системы.
Также авторы делают следующее немаловажное замечание:
В отличие от программного обеспечения, биологические системы невозможно «пропатчить» после того, как они отправлены в свободное плавание, хотя, исследователи и пытаются разработать такие патчи. Также отсутствует возможность «пропатчить» растения или животных, которые могут оказаться уязвимы перед такими синтетическими организмами. На этапе тестирования могли бы помочь строгие меры по предотвращению утечек биоматериала, но ни одна такая система не сводит риски к нулю.
Аналогично, очень сложно представить себе «кроссплатформенный» генетический код, который работал бы, например, и на Земле, и на Марсе. ДНК, значительная часть которой является некодирующей, очевидно обладает значительной информационной избыточностью, но при этом, как правило, не подходит для биохимической перенастройки для работы на других планетах или даже в условиях, комфортных для экстремофилов на Земле. Экстремофилы же, в свою очередь, смогли выжить на Земле в условиях, приближенных к марсианским.
Таким образом, значительная адаптация генетического кода к принципиально неблагоприятным условиям имеет место лишь на периферии биохимии, а для большинства экстремофилов губительны и типичные земные экосистемы.
Интересно, что еще Станислав Лем в «Сумме технологии» затрагивал важнейший аспект биологической информации – ее серьезнейшую обусловленность контекстом развития организма:
Знак предполагает существование информации (он является элементом ее кода), информация же существует только тогда, когда имеется ее адресат. Известно, кто является адресатом «Гамлета»… Но кто является адресатом хромосомной информации, содержащейся в яйце крокодила? Зрелый организм не является им, он представляет собой лишь некую позднейшую стадию передаваемого сообщения. Этот организм в свою очередь обладает адресатом; но где? Ни на Луне, ни на Сатурне крокодилы жить не могут; они могут жить только в реке с болотистыми берегами, воды которой дают им пищу; здесь же, найдя партнеров, они могут размножаться. Следовательно, адресатом генетической информации крокодила является именно данный район вместе со всей популяцией данного вида и другими организмами, поедаемыми им или поедающими его; короче: получателем генетической информации особи служит ее биогеоценотическое окружение.
Наконец, известно, что и четыре нуклеотида, составляющие молекулу ДНК, не являются единственно возможными. Уже созданы синтетические нуклеотиды, увеличивающие емкость генетического кода, а также синтетическая бактерия, способная производить аминокислоту, отсутствующую в других живых организмах.
Соответственно, ДНК отчасти может быть сравнима с машинным кодом, о чем на Хабре уже писали, но от исходного кода в значительной степени отличается, прежде всего, своей избыточностью, непредсказуемостью и предметно-ориентированностью. Поэтому совершенно логичным выглядит феномен технологии Cello, позволяющей транслировать исходный код в нуклеотидные последовательности ДНК. Желающие могут ознакомиться с репозиторием Cello на Github (используется язык Verilog).
Таким образом, аналогии ДНК с машинным кодом весьма условны, а аналогии с исходным кодом пока представляются неубедительными. ДНК в значительно большей степени напоминает естественный язык для общения живого организма с окружающей средой. Но значительная упорядоченность и расширяемость алфавита ДНК вполне располагают к созданию полноценного языка программирования на ее основе, а, возможно, и к созданию компиляторов. Возможно, такой язык будет сопоставим с ДНК как Java или Python сопоставимы с английским, либо заимствует из ДНК синтаксис, но частично или полностью изменит семантику кодонов. Кроме того, учитывая сказанное выше, полноценный биологический язык программирования должен обладать функцией self-healing и, возможно, гораздо большим потенциалом к снижению энтропии, чем присущ биологической жизни. Генетический код, реализованный в биосфере Земли, чрезвычайно интересен в качестве носителя информации и, скорее всего, при некоторой доработке и увеличении абстракции сможет поспорить в точности с низкоуровневым языком программирования.
Остается до этого дожить.