В разделе 2.2 мы рассмотрели, как подцели связываются с целями, но не останавливались на том, как эти подцели создаются. Однако разностная машина делает это самостоятельно, потому что каждое различие, которое нужно сократить, становится для нее еще одной подцелью! Например, если сегодня Джоан находится в Бостоне, но завтра хочет провести презентацию в Нью-Йорке, ей придется устранить следующие различия:
Встреча будет проводиться в двухстах милях от нее.
Ее презентация еще не закончена.
Ей нужно заплатить за транспорт и т. д.
Различие в расстоянии слишком велико, чтобы преодолеть его пешком, но Джоан может поехать на машине или на поезде – кроме того, она знает и несколько «сценариев» для поездки на самолете, например:
Однако каждый этап этого скрипта требует выполнения нескольких шагов. «Добраться до аэропорта» можно на велосипеде, такси или автобусе, но она решает поехать на машине, что само по себе требует выполнения нового сценария, состоящего из следующих подцелей:
Джоан рассматривает вариант с самолетом и решает, что парковка машины и прохождение досмотра займут слишком много времени. Сам полет до Нью-Йорка занимает не более часа или около того, а на поезде ехать четыре, зато он прибывает почти туда, куда ей нужно, к тому же все это время она может посвятить продуктивной работе. «Передумав», Джоан выбирает поезд.
Точно так же, если бы Кэрол решила построить из конструктора башню, ей пришлось бы разделить задачу на части и составить план, включающий вот такой процесс:
Процесс построения башни из конструктора
Для каждой из этих подцелей требуется еще несколько деталей и процессов, поэтому, когда мы разработали робота для выполнения таких задач, его программное обеспечение состояло из нескольких сотен элементов. Например, функция «Добавить брусок» подразумевает целое дерево подцелей, таких как:
И, конечно, каждая подцель сама по себе может быть довольно сложной. «Выбрать брусок» – значит, отсеять те, которые уже поддерживают башню. «Увидеть» – то есть распознать объект как брусок независимо от цвета, размера и освещенности, даже если он частично затенен другими фигурками. «Взять» – при этом рука робота должна подстроиться под размер и форму фигурки, которую нужно переместить. А при «Перемещении» рука должна двигаться таким образом, чтобы не задеть ни башню, ни лицо ребенка.
Как вы узнаете, каких подцелей необходимо достичь для выполнения конкретной задачи? Это можно сделать методом проб и ошибок, или проведя мысленный эксперимент, или вспомнив какую-то ситуацию из прошлого, – и одним из самых удобных способов является использование разностной машины, поскольку каждое различие становится для вас новой подцелью.
В общем и целом, наша идея состоит в том, что иметь активную цель – это значит выполнять процесс, сходный с действием разностной машины. Я подозреваю, что в каждом человеческом мозге одновременно запущено множество таких процессов – на разных уровнях и в разных плоскостях. Они варьируются от реакционных систем, которые функционируют непрерывно (например, поддерживают температуру тела), до уровней рефлексии, на которых мы, уже реже, думаем о том, каким человеком хотели бы быть[73].