Исторической альтернативой преформизму является эпигенез. Если преформизм полностью связан с чертежами, то суть эпигенеза заключается скорее в чем-то похожем на рецепт или компьютерную программу. Определение Малого оксфордского английского словаря довольно современно, и я не уверен, что Аристотель, который выдумал слово, узнал бы его: эпигенез: теория развития организма через прогрессивное дифференцирование первоначально недифференцированного целого.
"Принципы развития" Льюиса Вольперта с коллегами описывает эпигенез как идею, что новые структуры возникают последовательно. Есть смысл, при котором эпигенез самоочевидно верен, но детали важны, и в этом клише кроется дьявол. Как организм может развиваться последовательно? Откуда первоначально недифференцированное целое "знает", как дифференцироваться постепенно, если не следуя чертежу? Различие, которое я хочу описать в этой главе, в значительной степени соответствует различию между преформизмом и эпигенезом, это различие между плановой архитектурой и самосборкой. Смысл плановой архитектуры для нас ясен, потому что мы видим ее вокруг себя в наших зданиях и других артефактах. Самосборка менее знакома и будет нуждаться в некотором пояснении. В области биологии развития самосборка занимает позицию, аналогичную естественному отбору в эволюции, хотя она и не является тем же процессом. Обе автоматическими, непреднамеренными, не спланированными средствами достигают результатов, выглядящих, при поверхностном взгляде, как-будто они были детально спланированы.
Дж. Холдейн высказал леди, задавшей вопрос, простую истину, но он не стал бы отрицать, что существует загадка, граничащая с чудом (но никогда вполне не становящаяся им) в том факте, что единственная клетка дает начало человеческому телу во всей его сложности. И загадка только немного проясняется тем, что это достигается с помощью инструкций ДНК. Причина, по которой сохраняется загадка, состоит в том, что нам трудно вообразить даже в принципе, как мы могли бы приступить к написанию инструкции для строительства тела тем способом, каким оно фактически построено, а именно к тому, что я только что назвал "самосборкой", связанной с тем, что программисты иногда называют "восходящей" процедурой, в отличие от "нисходящей".
Архитектор проектирует великий храм. Затем, через иерархическую цепь команд, строительная операция разбивается на отдельные участки, которые разбивают ее дальше на под-участки, и так далее, пока, наконец, инструкции не розданы отдельным каменщикам, плотникам и стекольщикам, которые идут работать, пока не построен храм, выглядящий в значительной мере похожим на исходный чертеж архитектора. Это - нисходящее проектирование.
Восходящее проектирование работает совершенно иначе. Я никогда не верил этому, но существовал миф, что у некоторых из самых прекрасных средневековых соборов в Европе не было архитектора. Никто не проектировал собор. Каждый каменщик и плотник занимался, в соответствии со своей квалификацией, своим собственным небольшим уголком здания, обращая мало внимания на то, что делают другие, и не обращая внимания на какой-либо общий план. Так или иначе, из такой анархии, появлялся собор. Если так действительно происходило, это была восходящая архитектура. Если не брать в расчет миф, то, конечно, это не то, что происходило в случаях с соборами. Но это в значительной степени то, что происходит при строительстве термитника или муравейника - и при развитии эмбриона. Это - то, что делает эмбриологию настолько удивительно отличной от чего-либо, с чем мы, люди, знакомы в отношении строительства или производства.
Тот же принцип работает с определенными типами компьютерных программ, определенными типами поведения животных, и - сводя их воедино - с компьютерными программами, разработанными для моделирования поведения животных Предположим, мы хотим понять стайное поведение скворцов. Существует несколько потрясающих фильмов доступных на YouTube, кадры из которых представлены на цветной странице 16. Эти балетные маневры были сфотографированы возле Отмура, поблизости Оксфорда, Диланом Винтером. Что поразительно в поведении скворцов, это то, что, несмотря на всю видимость, у них нет ни хореографа, ни, насколько нам известно, лидера. Каждая отдельная птица только следует локальным правилам.
Количество отдельных птиц в этих скоплениях может достигать тысяч, и все же они практически никогда не сталкиваются. Это только к лучшему, так как, учитывая скорость, с которой они летают, любое такое столкновение серьезно бы их ранило. Часто целое скопление, кажется, ведет себя как единый индивид, сворачивающий и описывающий виражи. Может выглядеть, как будто отдельные стаи движутся друг сквозь друга в противоположных направлениях, сохраняя нетронутым свое единство как отдельных стай. Это выглядит почти как чудо, но на самом деле стаи находятся на различных расстояниях от камеры и не буквально пролетают друг сквозь друга. Добавляет эстетическое удовольствие то, что края скоплений так резко очерчены. Они не плавно сходят на нет, а имеют резкую границу. Плотность птиц на границе не меньше, чем в середине скопления, в то время как она равна нулю за пределами границы. Как только вы подумаете об этом таким образом, разве это не крайне удивительно?
Все это могло бы послужить более чем элегантной экранной заставкой на компьютере. Вам бы не захотелось реального фильма скворцов, поскольку Ваш скринсейвер повторял бы одни и те же идентичные балетные движения снова и снова, и поэтому не нагружал бы все пиксели одинаково. То, чего вы хотели бы, это компьютерное моделирование стай скворцов; и, любой программист скажет Вам, есть правильный и неправильный способ сделать это. Не пытайтесь поставить весь балет, это было бы ужасно плохим стилем программирования для такого рода задач. Следует поговорить о лучшем способе сделать это, потому что подобным образом, почти наверняка, запрограммированы сами птицы, в их мозгах. Главное -это большая аналогия с тем, как работает эмбриология.
Вот как следует программировать стайное поведение у скворцов. Посвятите почти все ваши усилия программированию поведения одной отдельной птицы. Встройте в вашего робо-скворца детализированные правила того, как лететь и как реагировать на присутствие соседних скворцов, в зависимости от их расстояния и относительного положения. Заложите в правилах, какую важность придавать поведению соседей и какую важность уделить индивидуальной инициативе в изменении направления. Этим типовым правилам помогли бы тщательные наблюдения реальных птиц в действии. Наделите свою киберптицу определенной тенденцией чередовать свои правила в случайном порядке. Теперь, когда вы написали сложную программу, чтобы задать правила поведения одного скворца, наступает определяющий момент, который я подчеркиваю в этой главе. Не пытайтесь программировать поведение целой стаи, как, возможно, делало предыдущее поколение программистов. Вместо этого клонируйте того одного компьютерного скворца, которого вы запрограммировали. Сделайте тысячу копий своей робо-птицы, возможно, одинаковых, или, возможно, с некоторыми небольшими случайными различиями в правилах поведения. И теперь "выпустите" тысячи моделей скворцов в вашем компьютере, так чтобы они могли свободно взаимодействовать друг с другом, подчиняясь все тем же правилам.
Если у вас будут поведенческие правила для одного скворца, то тысяча компьютерных скворцов, каждый из которых - точка на экране, будут вести себя как реальные скворцы, собирающиеся в стаи зимой. Если стайное поведение не вполне правильно, Вы можете вернуться и поправить поведение отдельного скворца, возможно, в свете дальнейших исследований поведения реальных скворцов. Теперь клонируйте новый вариант тысячу раз вместо той тысячи, которая работала не безупречно. Продолжайте переделывать Вашу программу одного клонированного скворца, пока стайное поведение тысяч их на экране не будет убедительной, реалистичной заставкой. Крейг Рейнольдс написал программу по типу этой (не конкретно для скворцов) в 1986 году, назвав ее "Boids".