Путаница может также возникнуть из-за того, что одни уровни гибки, а другие — строги и жестки. Например, в некоторых компьютерах есть замечательные программы-редакторы, которые позволяют переводить куски текста из одного формата в другой, почти так же, как жидкость может быть перелита из одного сосуда в другой. Узкую страницу можно превратить в широкую, и наоборот. При такой мощи можно ожидать, что поменять шрифт, скажем, на курсив, также не представит никакого труда. Однако у программы может быть только один шрифт, что делает подобные изменения невозможными. Бывает также, что нужный шрифт можно получить на экране, но не на принтере — или наоборот. Долго работая с компьютерами, легко избаловаться и считать, что программированию должно поддаваться все; не должно быть негибких принтеров, имеющих только один шрифт, или даже конечный набор шрифтов, шрифты должны определяться пользователем! Но достигнув этой степени гибкости, мы начинаем расстраиваться, что принтер не печатает разноцветными чернилами на бумаге любой формы и размера или что он не чинит сам себя…
Проблема в том, что в какой-то момент вся эта гибкость должна, используя фразу из главы V, «коснуться дна». Должен существовать жесткий уровень аппаратуры, на котором основано все остальное. Он может быть спрятан под гибкими уровнями так глубоко, что немногие пользователи чувствуют ограничения, налагаемые аппаратурой — однако эти ограничения неизбежны.
В чем именно состоит разница между программным обеспечением и аппаратурой? Это разница между программами и машинами — между длинными и сложными последовательностями команд и физическими аппаратами, которые эти команды выполняют. Я сказал бы, что программное обеспечение — это «то, что можно передать по телефону», а аппаратура — это «все остальное». Пианино — это аппаратура, а ноты — программное обеспечение. Телефонный аппарат — это аппаратура, а телефонный номер — программное обеспечение. К сожалению, это полезное различие далеко не всегда так ясно.
В нас, человеческих существах, тоже есть аспекты «аппаратуры» и «программного обеспечения» и разница между ними для нас настолько естественна, что мы перестаем ее замечать. Мы привыкли к негибкости нашей физиологии: то, что мы не можем усилием воли вылечить себя от всех болезней или заставить расти у нас на голове волосы любого цвета — лишь два простых примера. Однако мы можем «перепрограммировать» наш мозг, чтобы оперировать в рамках новых понятий. Удивительная гибкость интеллекта кажется почти несовместимой с тем фактом, что наш мозг сделан из «аппаратуры», подчиняющейся строгим правилам, аппаратуры, которую невозможно изменить. Мы не можем заставить наши нейроны реагировать быстрее или медленнее, не можем «поменять проводку» у себя в мозгу, не можем изменить внутренность нейрона — короче, у нас нет никакого выбора относительно нашей «аппаратуры» — и тем не менее, мы можем контролировать собственные мысли.
Однако существуют аспекты нашего мышления, не поддающиеся контролю. Мы не можем, по желанию, стать сообразительнее; не можем выучить новый язык так быстро, как бы нам хотелось; не можем заставить себя думать о нескольких вещах сразу и так далее. Это знание о нашей природе столь изначально, что его даже трудно заметить; это все равно, что постоянно сознавать, что вокруг нас — воздух. Мы никогда не думаем о возможной причине подобных «дефектов» нашего интеллекта — устройстве нашего мозга. Основная цель этой книги — предложить пути примирения между аппаратурой — мозгом и программным обеспечением — интеллектом.
Промежуточные уровни и погода
Мы видели, что в компьютерных системах есть множество довольно четко определенных уровней, и что работающая программа может быть описана в терминах любого из них. Таким образом, существуют не только низший и высший уровни — есть самые различные степени низкого и высокого. Типичны ли промежуточные ступени для всех систем с низшими и высшими уровнями? Рассмотрим для примера систему, аппаратурой которой является земная атмосфера, а программным обеспечением — погода. Проследить за движением всех молекул одновременно было бы способом «понимания» природы на весьма низком уровне — что-то вроде работы с огромной сложной программой на машинном языке. Ясно, что эта задача лежит далеко за пределами человеческих возможностей. Однако у нас есть наш особый, человеческий способ наблюдения за погодными явлениями и их описания. Мы воспринимаем природные явления на высоком уровне — крупными блоками, такими, как дождь, снег, туман, ураганы, холодные фронты, времена года, атмосферное давление, ветры, течения, кучевые облака, грозы, уровни инверсии и так далее. Во всех этих явлениях участвует астрономическое число молекул, которые каким-то образом действуют вместе, давая крупномасштабный эффект. Этот метод сравним с использованием для анализа погоды языка компилятора.
Существует ли аналог исследованию погоды при помощи промежуточных языков, таких, как язык ассемблера? Бывают ли, к примеру, очень маленькие местные «мини-штормы», как те крохотные смерчи, крутящие пыльные столбы максимум пару метров в диаметре? Является ли порыв ветра блоком промежуточного уровня, играющим роль в создании погодных явлений более крупного масштаба? Или же не существует практического способа использовать наши знания о подобных явлениях с тем, чтобы получить более полное объяснение погоды?
Тут возникают еще два вопроса. Первый такой: «Может ли быть, что погодные явления, воспринимаемые нами как смерчи и засухи, на самом деле — лишь явления промежуточных уровней, составляющие часть каких-то более общих, медленно протекающих явлений?» В таком случае, погодные явления настоящего высшего уровня были бы глобальными, и их время измерялось бы по геологической шкале. Ледниковый период был бы погодным событием такого высшего уровня. Второй вопрос: «Есть ли такие погодные явления промежуточного уровня, которых люди до сих пор не замечали, но которые могли бы дать нам более глубокое понимание погоды?»
От смерчей к кваркам
Последнее предположение может звучать, как чистая фантазия, но это не совсем так. Стоит только взглянуть на точнейшую из точных наук, физику, чтобы найти необычные примеры систем, описанных в терминах взаимодействия таких «частей», которые сами по себе невидимы. В физике, как и в любой другой дисциплине, системой считается группа взаимодействующих частей. В большинстве известных нам систем части сохраняют свою индивидуальность при взаимодействии, так что мы можем различить их внутри системы. Например, когда собирается футбольная команда, ее игроки продолжают быть отдельными личностями, они не сливаются, теряя свою индивидуальность, в какое-то составное существо. И все же — и это очень важно — определенные процессы в их мозгу вызваны именно контекстом команды, вне которого эти процессы не происходили бы. Таким образом, в некотором смысле индивидуальность игроков меняется, когда они становятся частью большей системы — команды. Такой тип системы называется почти разложимой системой (термин взят из статьи Г. А. Саймона «Архитектура сложности» (H. А. Simon, «Architecture of complexity»). Подобная система состоит из слабо взаимодействующих модулей, которые сохраняют свою собственную индивидуальность во время взаимодействия, но, слегка меняясь по сравнению с тем, какими они бывают вне системы, тем самым способствуют связному поведению целой системы. Изучаемые в физике системы обычно принадлежат именно к такому типу. Считается, например, что атом состоит из ядра, положительный заряд которого удерживает на орбите, или в связанном состоянии, некоторое количество электронов. Связанные электроны весьма похожи на свободные электроны, несмотря на то, что они находятся внутри сложной системы.
Некоторые системы, изучаемые в физике, представляют собой контраст по сравнению с относительно простым атомом. В таких системах взаимодействие частей необычайно сильно, в результате чего они проглатываются большей системой и частично или полностью теряют свою индивидуальность. Примером является ядро атома, которое обычно описывается как «набор протонов и нейтронов». Но силы, удерживающие вместе частицы, составляющие ядро, так велики, что эти частицы становятся совершенно непохожи на самих себя в «свободной» форме (то есть когда они находятся вне ядра). На самом деле, ядро во многих смыслах более похоже на единую частицу, чем на набор взаимодействующих частиц. Когда ядро расщепляется, при этом обычно освобождаются протоны и нейтроны, но также и другие частицы, такие как пи-мезоны и гамма-лучи. Находятся ли все эти частицы внутри ядра до его расщепления, или же они — что-то вроде «искр», летящих при расщеплении ядра? Возможно, что искать ответа на подобный вопрос не имеет смысла. На уровне физики частиц разница между возможностью «высекать искры» и действительным наличием субчастиц не столь ясна.