В реальной жизни, форма тела каждой особи животного продуцируется эмбриональным развитием. Эволюция получается потому, что в последовательных поколениях имеются небольшие различия в эмбриональном развитии. Эти различия возникают из-за изменений (мутации — это тот самый маленький элемент спонтанности в эволюции, о котором я говорил) в генах, управляющих развитием. Поэтому в нашей компьютерной модели должно быть нечто эквивалентное эмбриональному развитию, и нечто эквивалентное генам, могущим мутировать. Удовлетворить этим спецификациям в компьютерной модели можно различными путями. Я выбрал из них один и написал программу, которая его реализовала. Сейчас я опишу эту компьютерную модель, чтобы вы не думали, что я что-то скрываю. Если вы не разбираетесь в компьютерах, то вам достаточно знать, что компьютеры — это механизмы, которые делают в точности то, что вы им велите, но часто удивляют вас результатом. Список инструкций для компьютера называется программой («program» — это стандартная американская нотация, она к тому же рекомендуется Оксфордским словарём; альтернативная нотация, «programme», обычно употребляемая в Британии, вроде бы является заимствованием из французского).
Эмбриональное развитие — это слишком сложный процесс, чтобы его можно было реалистично смоделировать на маленьком компьютере. Нам придётся представить его неким упрощённым аналогом. Нам нужно найти простое правило рисования, которое компьютер может легко выполнить, и которое может затем изменяться под влиянием «генов». Какое правило рисования мы выберем? Учебники информатики часто иллюстрируют мощность того, что они называют «рекурсивным» программированием, простыми процедурами рисования деревьев. Компьютер начинает рисовать одну вертикальную линию. Затем линия разветвляется на две ветки, после чего каждая из ветвей разделяется ещё на две суб-ветки. Затем каждая из суб-ветвей подразделяется на суб-суб-ветки и так далее. Метод называется «рекурсивным» потому, что одно и то же правило (в нашем случае — правило ветвления) локально применяется на всём растущем дереве. Дерево может быть сколь угодно велико, ибо одно и то же правило разветвления применяется в кончиках всех его веток.
«Глубина» рекурсии — это количество допускаемых суб-суб-…ветвлений между началом и остановкой процесса. На рисунке 2 показаны случаи, когда вы велите компьютеру выполнить одно и то же правило рисования, но остановиться на разных глубинах рекурсии. При очень глубокой рекурсии образец становится весьма сложным, но тем не менее на рисунке 2 можно легко видеть, что это результат того же самого очень простого правила ветвления. Конечно, именно это происходит у настоящего дерева. Схема ветвления дуба или яблони выглядит сложной, но на деле таковой не является. Базовое правило ветвления очень просто. Но из-за того, что оно применяется рекурсивно во всех отрастающих кончиках всех ветвей дерева — ветви производят суб-ветви, затем каждая суб-ветвь производят суб-суб-ветви и так далее — в результате всё дерево получается большим и густым.
Рис. 2.
Рекурсивное ветвление — это также хорошая метафора для эмбрионального развития растений и животных. Я не хочу сказать, что эмбрион животного напоминает ветвящееся дерево. Нет, конечно. Но рост всех эмбрионов осуществляется делением клеток. Деление любой клетки всегда состоит в разделении её на две дочерние. И гены всегда влияют на результирующие эффекты развития тел посредством локального влияния на клетки и на «двухветочную» схему деления клетки. Гены животного никак не являются эдаким грандиозным чертежом всего тела. Как мы увидим далее, гены более подобны рецепту, чем подобному чертежу — более того, не тому рецепту, который описывает развивающийся эмбрион как целое, но рецепту поведения отдельной клетки или локального кластера делящихся клеток. Я не спорю, что весь эмбрион, а позже и взрослая особь, может обладать крупными размерами и формой. Но это крупное тело появляется как результат большого количества маленьких локальных клеточных эффектов во всём развивающемся теле, и эти локальные эффекты в основном представляют собой такие вот «двухветочные» расколы клеток. Именно влияя на эти локальные события, гены в конечном счёте оказывают влияние на взрослое тело.
Итак, простое правило ветвления рисунка дерева будет похоже на обещанный аналог эмбрионального развития. Ну раз это так, то мы оформляем его в маленькую компьютерную процедуру, называем её РАЗВИТИЕ и готовим к включению в бóльшую программу с названием ЭВОЛЮЦИЯ. И в качестве первого шага к написанию этой большей программы, обратим наше внимание на гены. Как будет мы моделировать «гены» в нашей компьютерной модели? В реальном живом существе гены делают две вещи: влияют на развитие и переходят в следующие поколения. У реальных животных и растений имеются десятки тысяч генов, но мы скромно ограничим нашу компьютерную модель девятью. Каждый из этих девяти генов просто представлен неким числом в компьютере, которое мы будем называть его значением. Значение конкретного гена может быть, скажем, 4 или -7.[8]
Как наши гены будут влиять на развитие? Они могут делать много чего. Основная идея состоит в том, что они должны оказывать какое-то небольшое количественное влияние на правило рисования, которое и есть РАЗВИТИЕ. Например, один ген мог бы влиять на угол ветвления, другой мог бы влиять на длину некоторых конкретных ветвей. Ещё очевидная задача для гена — влиять на глубину рекурсии (количество последовательных ветвлений). Я поручил этот эффект гену 9. Таким образом, вы можете расценивать рисунок 2 как картину родственных организмов, идентичных друг другу во всём, кроме значения гена 9. Я не буду подробно описывать, что делает каждый из других восьми генов. Вы можете получить общие представления об этом, изучая рисунок 3. В середине рисунка — основное дерево, одно из деревьев рисунка 2. Окружают это центральное дерево восемь других. Все они совпадают с центральным деревом, за исключением того, что какой-то один ген из восьми у них был изменён — «мутировал». Например, дерево справа от центрального показывает, что будет, если ген 5 мутирует, увеличиваясь на +1 относительно его прежнего значения. Если б было достаточно места, я бы с удовольствием напечатал кольцо из 18 мутантов вокруг центрального дерева. Почему именно 18? Потому, что каждый из 9 генов может мутировать как в «восходящем» (на единицу больше его значения), так и «нисходящем» направлении (на единицу меньше его значения). Так что кольца из 18 деревьев было бы достаточно, чтобы отобразить всех возможных одношаговых мутантов, которых вы можете произвести от одного центрального дерева.
Рис. 3.
У каждого из этих деревьев есть своя собственная, уникальная «генетическая формула» — числовые значения всех его девяти генов. Я не записывал генетических формул, потому что они, сами по себе для вас ничего не значили бы. Это справедливо и для реальных генов. Гены только тогда начинают означать что-то, когда они транслированы посредством синтеза белка, в правила роста развивающегося эмбриона. Также и в нашей компьютерной модели, числовые значения этих девяти генов только тогда что-то значат, когда они транслированы в правила роста ветвящегося дерева. Но вы можете понять роль каждого гена, сравнивая тела двух организмов с известными к отличиями конкретного гена. Например, сравнив основное дерево в середине рисунка с двумя деревьями справа и слева, и вы получите некоторое представление о функции гена 5.
Это как раз то, что делают генетики, изучающие реальную жизнь. Генетики обычно не знают, какие эффекты гены оказывают на рост эмбриона. Как и не знают полной генетической формулы животного. Но сравнивая тела двух взрослых животных, о которых известно, что они отличаются одним геном, они могут увидеть, какой эффект этот ген оказывает. Картина усложняется тем, что эффекты генов взаимодействуют друг с другом, причём сложнее, чем просто складываются. Это же самое справедливо и для компьютерных деревьев. И даже очень — что покажут дальнейшие рисунки.
Заметьте, что все очертания симметричны относительно вертикальной оси. Это есть ограничение, которое я наложил на процедуру РАЗВИТИЕ. Я сделал это отчасти по эстетическим соображениям, отчасти — чтобы сэкономить на количестве необходимых генов (если бы гены не оказывали зеркально-симметричных эффектов на обе стороны дерева, нам были бы нужны отдельные гены для левой и правой сторон); а частично потому, что я надеялся получить очертания, похожие на животных, а большинство тел животных весьма симметричны. Поэтому я с этого момента перестану называть эти создания «деревьями» и буду называть их «тела» или «биоморфы». Биоморф — название, предложенное Десмондом Моррисом для образов, напоминающих каких-то смутных животных в его сюрреалистических картинах. Эти картины занимают особое место в моих привязанностях, потому что одна из них была воспроизведена обложке моей первой книги. Десмонд Моррис заявлял, что его биоморфы «эволюционировали» в его воображении, и что их эволюцию можно проследить в его последовательных картинах.