ДНК глазами кодера

или

если ты молоток, то всё кругом похоже на гвозди.

'Одна из крутейших вещей, которые я читал в последнее время.' -- jwz

Оригинал текста на английском.

Перевод выполнен MUT.RU.

При копировании перевода ссылка обязательна.
 

Это лишь некоторые размышления программиста о ДНК. Я не генетик. Если вы нашли ошибку, пожалуйста сообщите по почте (Берту Хуберту) по адресу ahu@ds9a.nl.

Я не пытаюсь навязать свой взгляд на ДНК - каждое наблюдение довольно свободное. Спросите откуда я взял всё это? Из головы и из книг.

Обновления

3 января 2008:
Много добавлений пришло после добавления страницы в Reddit.com, Я сейчас систематизирую и объединяю предложенные изменения. Пожалуйста продолжайте присылать обновления!

23 сентября 2006:
Небольшое изменнеия в количестве генов. Еще несколько изменений было прислано в последние 4 года. Я попытаюсь добавить их на страницу.

16 июня 2002:
Добавил маленький кусочек в проблему зависания и рак. Я думаю это новый взгляд, но не уверен. В списке того, что надо сделать: повторное использование кода через альтернативный сплайсинг.

18 мая 2002:
Между тем специалисты по генетике прочитали статью нашли и исправили некоторые ошибки. На днях я добавил информацию о клетке как конечном автомате, о форке и форкбомбах.

24 мая 2002:
Немного ясности по OPN внесли отличные люди с #bioinformatics. Добавил несколько картинок, чтоб украсить страницу. Добавил немного в раздел основная догма.

Исходный код

Здесь. Это не шутка. Хотя мы можем задуматься насчет лицензии. Возможно мы должны спросить разрешение у: Крейга Вентера. Исходник можно посмотреть через прекрасный набор perl скриптов 'Ensembl'. Человеческий геном занимает порядка 3 гигабайт, его можно ужать до 750 мегабайт. Довольно удручающе, сравнимо по размеру с 2.8 браузерами Mozilla.

ДНК не похожа на исходник на C, более похожа на скомпилированный байткод для виртуальной машины под названием 'Ядро клетки'. Сомневаюсь, что есть исходник этого байткода - то, что вы видите это всё, что у нас есть.

Язык ДНК цифровой, но не двоичный. Если двичный код имеет два значения в арсенале 0 и 1, то ДНК имеет 4 - T, C, G и A.

Тогда как цифровой байт занимает 8 двоичных знаков, 'байт' ДНК (называемый 'кодон') имеет три знака. Каждый знак может иметь 4, а не 2 значения, т.е кодон ДНК может иметь 64 различных значения, в отличии от 256 значений байта.

Пример кодон ДНК 'GCC' кодирует аминокислоту Аланин. Комбинация аминокислот называется 'полипептид' или 'протеин', это химически активные вещества необходимые для существования всего живого.

Читайте также http://www.ultranet.com/~jkimball/BiologyPages/C/Codons.html.

Позиционно независимый код

Библиотеки динамического связывания (.so в Unix, .dll в Microsoft) их код не может использовать статические адреса внутри т.к. Он может располагаться в различных участках памяти в разных ситуациях. В ДНК тоже есть что-то подобное, это 'переносимый код':

Около половины генома человека составлено из переносимых элементов или прыгающих ДНК. Впервые открытые в 1940ых Барбарой Мак-Клинток при изучении специфических образцов наследования цвета кукурузы, прыгающая ДНК относится к идее о том, что некоторые отрезки ДНК непостоянны и "переносимы", то есть, они могут переместиться между хромосомами.

http://www.ornl.gov/hgmis/resource/people.html

Условная компиляция

Из 20,000 - 30,000 генов человеческого генома, большинство клеток используют лишь малую часть, которая имеет значение, клетка печени особо не нуждается в коде ДНК который создает нейроны.

Но поскольку практически все клетки хранят полную копию (дистрибутив) генома системе необходима директива #ifdef чтоб исключить лишний код. И именно так всё и работает. Генетический код полон #if/#endif директив.

Вот почему 'стволовые клетки' так популярны прямо сейчас — эти клетки имеют возможность преобразоваться во что угодно. Код не был обработан в соответствии с директивами #ifdef.

Говоря более точно, стволовые клетки не включают в себя всё — оне не являются одновременно клетками печени и нейронами. Клетки подобны конечным автоматам, изначально являющимися стволовыми клетками. В течении времени жизни клетки, она клонируется ('fork()') несколько раз и специализируется. Каждая специализация может быть расценена как выбор ветви дерева.

Каждая клетка может принять решение (или ее побуждают) о своем будущем, которое делает ее более специализированной. Эти решения сохраняются при клонировании в факторах предписания и в пространственном расположении ДНК ('стерический эффект').

Клетка печени, хотя она и несет в себе необходимую генетическую информацию, не сможет функционировать как клетка кожи. Есть некоторые предпосылки к тому, что возможно 'размножить' клетки 'вверх' по иерархии, делая их плюрипотентными. См. также эту статью.

Мертвый код, избыточность, комментарии ('мусор ДНК')

Геном замусорен старыми копиями генов и экспериментами, которые прошли неудачно в последние, скажем, пол миллиона лет. Код храниться, но он неактивен. Это так называемые 'псевдо гены'.

Более того, 97% ДНК закомментировано. ДНК линейна и читается от начала до конца. Части которые не должны быть раскодированы четко помечены, похоже на комментарии в языке C. Используемые 3% формируют так называемые 'экзоны'. Комментарии, которые идут в промежутках называются 'интроны'.

Эти комментарии захватывающие по праву. Как в комментариях языка C у них есть начальный маркер, похожий на /*, и конечный, похожий на */. Но есть дополнительная структура. Помните что ДНК похожа на магнитофонную ленту - комментарии надо удалить физически! Начало комментария почти всегда обозначается буквами 'GT', которые таким образом соответствуют /*, конец обозначается 'AG', что соответствует */.

Тем не менее, ввиду физического извлечения комментариев, необходимо немного клея для склейки кода перед комментарием и кода после, что делает оформление комментариев более похожим на html комментарии, которые длиннее: '<!--' обозначает начало, '-->' обозначает конец.

Итак действующая ДНК с экзонами и интронами может выглядеть так:

ДЕЙСТВУЮЩИЙ КОД<!-- бла бла бла бла бла ---- бла -->ACTUAL CODE
      |         |            |           |        |        |
   экзон 1    акцептор    интрон 1     ветвь    донор   экзон 2
         (начало комментария)           (конец комментария)

Начало комментария понятно, за ним следует много некодирующих ДНК. Где-то рядом с концом комментария находится 'место ветви', которое указывает на то, что комментарий вот-вот закончится. Затем еще несколько комментариев, и действительный конец комментария.

Удаление комментариев происходит после того как ДНК считывается в РНК путем соединения действующих участков кода. РНК обрезается в 'месте ветви' рядом с окончанием комментария, после чего 'акцептор' (начало комментария) и 'донатор' (окончание комментария) соединяются вместе.

Теперь, для чего же нужны комментарии? Эта дискуссия часть священной войны, которая может соперничать с vi против emacs. Сравнивая разные биологические виды, мы узнаем, что некоторые интроны отличаются меньше чем соседние экзоны. Это подсказывает, что комментарии очень важны для чего-то.

Есть много объяснений для большого количества некодирующей информации ДНК — одна из наиболее притягательных (для кодера) это 'склонность к склеиванию'. ДНК хранится в сильно закрученной форме, но не все ДНК коды соответствуют этому.

Это напомнит вам RLL или MFM кодирование. На жестком диске бит кодируется сменой полярности или отсутствием ее. Простейшее кодирование: 1 это смена полярности, 0 - нет.

Для кодирования 000000 просто не меняем магнитное поле на нескольких микрометрах. Тем не менее, при раскодировании, возникает неясность — сколько микрометров мы прочитали? Соответствует ли оно 6 нулям или 5? Чтоб избежать этой проблемы данные хранятся так чтоб длинных цепочек без изменения полярности не встречалось.

Если мы встречаем 'нет смены полярности, нет смены полярности, нет смены полярности, смена полярности, смена полярности' на диске, мы можем быть уверены, что это соответствует '0011' — весьма маловероятно, что наш процесс чтения настолько неточен, что это может соответствовать '00011' или '00111'. Итак нам необходимо вставить разделители чтоб предотвратить образование участков без смены полярности. Это называется 'RLL' на магнитных носителях.

Стоит заметить что иногда нужно добавить дополнительную информацию, чтоб убедится, что данные храняться надежно. Интроны возможно выполняют эту функцию, обеспечивая дополнительную надежность хранения основного кода.

Тем не менее, эта область молекулярной биологии — минное поле! Огромный гнев и критика по поводу интронов, научных фраз типа 'склонность к склеиванию' и 'потенциал стволовых циклов (stem-loop)'. Я думаю лучше всего не встревать в гневные дискуссии.

Очаровательная ссылка сомнительного научного значения http://post.queensu.ca/~forsdyke/introns.htm .

fork() и форк бомбы ('опухоли')

Как принято в unix, клетки не 'порождают' — они делают fork. Все Ваши клетки начинаются с яйцеклетки, которая много раз форкнула себя. Как и процессы, обе половинки fork() в основном идентичны вначале, но после они могут выполнять разные действия.

Как и в unix, большая проблема возникает, когда клетки продолжаюь безудержно форкать. Быстро истощающиеся ресурсы иногда ведут к смерти. Это называется опухоль. Клетки отсеиваются через 'ulimits' и 'watchdogs' чтоб предотвратить данную ситуацию. Количество делений ограничено например с помощью укорачивания теломеры.

Клетка не может клонироваться до тех пор пока не встречено обязательное условие — 'защищенная по умолчанию' конфигурация. И только если все эти защитные барьеры не справляются может начаться рост опухоли. Как и в компьютерной безопасности, сложно найти золотую середину между защищенностью ('ни одна клетка не может делиться') и полезностью.

Сравнивая с широко известной Проблемой зависания, вперые описанной основателем компьютерной науки, Аланом Тьюрингом.Видимо также невозможно предсказать закончится ли данная программа когда-нибудь как и создать действующий геном, который не может заболеть раком?

Зеркалирование, отказоустойчивость

Каждая спираль ДНК избыточна в себе — вы можете представить геном как винтовую лестницу, у которой каждая ступенька содержит два основания — отсюда название 'basepair'. Если одна из основ отсутствует, она может быть унаследована с другой сторонны. T всегда связано с A, C связано с G. То есть мы можем утверждать, что геном зеркалирован внутри спирали. Чем-то схоже с 'RAID-1'.

Кроме того, хранятся две копии каждой хромосомы - по одной от каждого родителя, за исключением хромосомы Y, которая присутствует только у мужчин. Фактические детали довольно сложны - но большинство генов, таким образом, присутствуют в двух экземплярах. В случае сбоя или неполезной мутация одного, есть еще другая независимая копия. Это то, что мы обычно называем «отказоустойчивость».

Беспорядочный API, ад зависимостей

Так как белки взаимодействуют в клетке, они зависят от характеристик друг друга. Только что было показано, что белки, которые взаимодействуют со многими другими белками, не могут развиваться, или, по крайней мере, делают это только очень медленно. Напечатано в журнале Nature, 28 июня 2001 года, и М. Кимура, Т. Ота, Science, 26 апреля 2002 года.

Они полагают, что это из-за больших внутренних зависимостей, которые препятствуют изменению белка. Он также отметил, что эволюция имеет место, но очень медленно, так как обе части зависимости должны одновременно эволюционировать совместимым способом.

Вирусы, черви

Кто-то недавно предложил в дискуссии, что было бы здорово хакнуть геном и подорвать его таким образом, чтобы вставить код, который будет копировать себя в другие геномы, используя тело хозяина в качестве транспортного средства. Прямо как червь Nimda!

Он вскоре понял, что это именно то, что биологические вирусы делали на протяжении миллионов лет. И они чрезвычайно хорошо справлялись.

Многие из этих вирусов стали фиксированной частью нашего генома и являются попутчиками всех нас. Чтобы сделать это, они вынуждены скрываться от антивирусного сканера, который пытается обнаружить чужой код и не допустить его попадание в ДНК.

Основная догма: .c -> .o -> a.out/.exe

Когда ученые еще открывали основы генетики они сталкивались со множеством различных химических веществ, но корреляция была неясной. Когда же стало ясно, что происходит от чего, это было воспринято как великий триумф и получило название «Основная догма».

Эта догма говорит нам, что ДНК используется для создания РНК и РНК используется для производства белков, похоже, скажем, на то как из a.с файла получается a.o файл, который может быть скомпилирован в исполняемый файл (a.out / exe ). Она также говорит нам, что это единственный путь, которым проходит информационный поток.

В настоящее время Основная догма несколько запятнана. Как и любой проект программируемый миллиард лет, много хаков уже произошло, и иногда информационные потоки идут в другую сторону. Иногда РНК патчит ДНК, и ДНК изменяется белками, созданными ранее.

Но в целом, зависимость ясна, поэтому «Основаная догма» остается важной.

Бинарный патч или 'Генная терапия'

Мы можем достаточно легко хитрить с ДНК. Есть компании, которым можно отправить ASCII файл с символами ДНК, и они будут синтезировать соответствующий "выходной продукт" для вас. Мы можем также скрещивать ДНК и производить новые виды животных и растений.

Гораздо труднее пропатчить исполняющийся в данный момент код, как любой программист может подтвердить. Тоже самое и с геномом. Чтобы изменить запущенную копию ( 'человек'), вам необходимо отредактировать каждую и все соответствующие копии гена, который вы патчите.

На протяжении многих лет, медицинская наука пытается пропатчить людей с ОКИД, или «острый комбинированный иммунодефицит», который является очень неприятной болезнью, она фактически отключает иммунную систему - приводит ко многим болезням. Стало ясно, что проблема кроется в ДНК и она должна быть исправлена, чтобы вылечить этих людей.

Многочисленные попытки, сделал заплатку реальным людям были предприняты. Использовали вирусы, чтоб вставить новый ДНК в живые организмы, но это оказалось очень трудно. Геном охраняется очень хорошо для такого простого подхода к работе — клетки охраняют их код лучше, чем Microsoft!

Однако, в последнее время правильный вирус был найден, который смог нарушить защиту генома и отремонтировать поврежденные символы, что привело к выздоравлению людей.

Регресс ошибок

При исправлении багов в компьютерном ПО, мы часто добавляем новые в ходе процесса. В геноме полно такого. Многие афроамериканцы имеют иммунитет к малярии, но в место этого страдают от серповидно-клеточной анемии:

В тропических регионах мира, где очень распространена переносимая паразитами болезнь малярия, люди с одной копией определнной генетической мутации имеют преимущество выживания.
...
Хотя наследование одной копии дает выгоду, наследование двух копий это трагедия. Дети рожденные с двумя копиями генетической мутации имеют серповидно-клеточную анемию, болезненное заболевание, влияющее на красные кровяные тельца.

Есть немало примеров такого явления. Смотрите также отличную книгу Мэтта Ридли 'Геном'.

код Рида - Соломона : 'корекция ошибок'

Как и компьютерное хранилище данных, ДНК (и ее производная 'РНК') может испортиться. Для защиты от обычных 'ошибок одного бита', кодирование из конкретной ДНК в белок вырождается. Есть 4 РНК символа, U, C, G и A - другими словами, 'байт' имеет длину два бита. Тройка символов соответствуют аминокислотам.

6 бит могут предположительно отобразиться на 64 аминокислоты, тем не менее только 20 аминокислот используются. Например, UCU, UCC, UCA и UCG все кодируют 'Серин', тогда как UGG кодирует 'Триптофан'.

Теперь выясняется что некоторое подобие опечатки (UCU -> UCC) в кодировании привело к тому что они кодирую одну и ту же аминокислоту. Больше информации об этом увлекательном явлении можно прочитать в книге Дугласа Хофштадтера 'Metamagical Themas'.

Священный код: /* вы врядли это поймете */

Некоторый код священен. Мы не помним кто его написал, или зачем - мы только знаем что он работает. Парень который его придумал уже покинул компанию. Такой код нельзя трогать.

В ДНК есть концепция 'молекулярных часов'. Некоторые части генома активно меняются и некоторые учатки неприкосновенны. Хороший пример это Гистоны H3 и H4.

Эти гены основополагающие для фактического хранилища генома и поэтому имеют первостепенное значение. Любой сбой в этом коде приведет к отказу организма.

Таким образом этот код не следует трогать. Гены H3 и H4 имеют нулевой уровень мутации среди людей. Более того, точно такой же код имеют все от цыплят до растений и плесени.

ЧАСТОТА ЗАМЕНЫ НУКЛЕОТИДОВ В ОДНОМ МЕСТЕ НА 1000 МИЛЛИОНОВ ЛЕТ СРЕДИ РАЗНЫХ ЛЮДЕЙ И ГРЫЗУНОВ В ПРОТЕИНО-КОДИРУЮЩИХ ГЕНАХ С ВЫБОРКОЙ В 80 МИЛЛИОНОВ ЛЕТ НА ОСНОВЕ РАСКОПОК:

ген

Количество кодонов

Эффективная частота

гистон 3

135

0.00

гистон 4

101

0.00

инсулин

51

0.13

гамма интерферон

136

2.79

http://www.staffs.ac.uk/schools/sciences/biology/Handbooks/evolseqphylo.htm

Итак похоже есть два способа которыми геном может убедиться что он не мутировал. Первый способ описан выше: использовать вырожденные аминокислоты, гарантирующий что опечатки имеющие место быть дают тем не менее правильный результат.

Кроме того ген может быть скопирован раньше или позже в репродуктивном процессе клетки, ведущий к более или менее благоприятным условиям копирования. Множество подобных условий применяется.

Похоже, Н3, Н4 был продуман автором очень внимательно, поскольку они имеют много «тождественных изменений», которые благодаря умным техникам, описанным выше, не приводят к изменениям на выходе.

Ошибки структуры: начальный и конечный биты

...0 0000 0001   0000 0010  0000 0011 0...

Эта последовательность однозначно описывает 8 битные значения 1, 2 и 3. Пробелы я добавил, чтоб было более понятно где начинается и заканчивается байт. Многие устройства последовательного чтения задействуют стартовый и стоповый биты, чтоб закодировать точку начала чтения. Если мы сдвинем последовательность слегка:

...00 0000 0010   000 00100  000 00110 ...

Внезапно читаем 2, 4, 6! Чтоб предотвратить такие вещи в ДНК используются сигналы, которые сообщают клетке, где начать чтение. Интересно, что есть участки кода в геноме которые можно читать с разных начальных позиций, и получать полезный (но различный) результат каждый раз. Вот что я называю кул хаком!

Каждый из способов кторым нить ДНК может быть прочитана называется Открытый читающий фрэйм и их, как правило, 6, по 3 с кажой стороны.

Невероятная многозадачность: каждая клетка - вселенная

Теперь, ДНК не похожа на язык программирования. Это действительно так. Но есть колоссальные аналогии. Мы можем рассматривать каждую клетку как процессор, исполняющий свое программное ядро. Каждая клетка имеет копию всего ядра, но активирует только соответствующие ей части. Грубо говоря модули и драйвера которые она загружает.

Если клетка должна сделать что-то ('вызвать функцию'), она выбирает нужный кусок генома и кодирует на его основе РНК. РНК транслируется в последовательность аминокислот, которые совместно создают протеин, результат кода ДНК. Теперь действительно крутая фишка. :-)

Созданный протеин помечен адресом доставки. Этот маркер состоит из нескольких аминокислот, которые сообщают клетке, куда этому протеину следует перемещаться. Есть механизм который исполняет данные инструкции, и доставляет протеин к месту, возможно и вне клетки.

Затем инструкции доставки удаляются и несколько шагов пост обработки могут выполнятся. Возможно активация протеина - что удобно т.к. не всегда нужно транспортировать активный протеин в местах, где он не должен работать. Удобнее активировать на месте.


Клетка

Самоорганизованность и начальная загрузка

Если мы уничтожим все компиляторы языка C на планете и оставим только исходник компилятора, у нас будет большая проблема. Да, мы имеем исходники C компилятора на C, но нам нужен работающий C компилятор чтоб собрать его!

В реальности, этой проблемы не возникло так как первый C компилятор был написан не на C, а на доступном языке: B. Читайте тут детали 'начальной загрузки'.

Тоже самое касается и генома. Чтоб создать новый 'бинарник' по образцу, требуется действующая живая сущность. Геному требуется инструменатрий чтоб создать живое. Код сам по себе бессилен. Этот инструментарий обычно называют 'ваши родители'.

Похоже что РНК, являющаяся посредником между ДНК и белком, возможно является 'B' для ДНК. Отсюда вопрос откуда взялась первая РНК. Любопытно заметить, что внеземные объекты часто содержат аминокислоты! Гуглите http://www.google.com/search?hl=en&q=amino+acids+meteorites

Makefile

Организм обычно начинается с одной клетки, которая, как говорилось выше, содержит две полные копии генома. Большой tar-файл так сказать, с распакованными файлами, готовыми к работе. Что дальше?

Знакомьтесь Гомеобокс гены. Клетки должны копироваться и получать назначение. Гомеобокс гены полагаются на принцип 'сверху вниз', который гласит 'начинаем с головы'. Чтоб такой порядок состоялся, химический градиент создан клетками, которые ощущают себя необходимыми для строения головы или для создания изначальной хорды.

Открытые только в 1983, Гомеобокс гены очень захватывающая область исследования прямо сейчас. Интересно заметить, что как и Makefile, 'HOX' гены только регулируют другие гены и не создают чего-то материального сами.

Синтаксис Гомеобокса представляется очень священным в смысле описанном выше. Что произойдет если вы скопируете 'селектор ног' часть мышиного HOX гена в Гомеобокс дрозофилы:

'В самом деле, когда мышиный Hox-B6 ген вставлен в ДНК дрозофилы, он может заменить Antennapedia и произведет ноги вместо антенн'

http://www.ultranet.com/~jkimball/BiologyPages/H/HomeoboxGenes.html

Геномы человека и дрозофилы разошлись не миллион лет назад, а сотни миллионов лет назад. И вы можете копипастить куски ('Селекторы' на языке генетики) мэйкфайла и оно сработает. Пожалуйста помните, что процедура 'создать ногу' у дрозофилы радикально отличается от аналогичной у мыши, но 'селектор' корректно будет выполнять инструкции.

Дополнительная литература

Геном Мэтт Ридли

Удивительный сборник эффектов которые каждая хромосома оказывает на нашу жизнь. Очень читабельно, не слишком теоретизировано. Содержит впечатляющий набор ссылок.

Источник многих впечатляющих примеров этой страницы.

И чтоб помочь Мэтту в вопросе, который он поставил в своей книге. Я хочу твердо заявить:

Причины болезней не в генах

Молекулярная генетика, второе издание Тома Страчан и Эндрю P. Рида

Заполняет пробел между 'основной литературой' (т.е. академические журналы и газеты) и вводной литературой. Я прочитал ее от корки до корки, постоянно выискивая что-то, чтобы понять предмет. Если вы хотите узнать детали про интроны, экзоны, РНК во всех вариациях, как гены вызывают и предотвращают заболевания, стоит выбрать эту книгу.

Эгоистичный ген Ричарда Докинза

Ричард Докинз это Ричард Стивенс теории эволюции. Оба посвятили практическую работу предмету, но более известны наглядным представлением теории миллионной аудитории.

В этой книге Докинз объясняет эволюцию с точки зрения гена, а не видов.

Слепой часовщик : Почему доказательства эволюции свидетельствуют о Вселенной без строения Ричарда Докинза

Еще одна книга Докинза. Больше о эволюции, а не о генах. Ясно объясняет как эволюция может быть причиной сложного строения живых существ.

Еще одна очень читабельная книга для любого уровня подготовки.

Metamagical Themas Дугласа Хофштадтера

Это книга-идея. Она переполнена идеями, идеи вытекают со страниц. Многие из этих идей о теории информации, генетике, жизни, исследованиях, музыке, математике и людях. Не генетический учебник, но сыграл весомую роль во вдохновлении многих людей. Часто можно найти в букинистических магазинах.
Рекомендуем.