Выбрать главу

В примере с маршрутом фигурирует простой набор инструкций. С каждым шагом происходит продвижение от начала к концу перечня. Количество инструкций, которым нужно следовать, соответствует количеству шагов в списке. Как правило, у систематических процессов встречаются более разнообразные структуры. Рассмотрим инструкцию по забиванию гвоздей: (1) Взять гвоздь. (2) Если гвоздя нет, закончить работу, в противном случае продолжить. (3) Забивать гвоздь молотком. (4) Если гвоздь погнулся, выпрямить его и повторить шаг 3, в противном случае начать снова с шага 1.

Здесь содержится такое же количество инструкций, как и в примере с маршрутом, но есть существенное отличие — петли или, как говорят программисты, циклы. Вы повторяете внешний цикл (шаги с 1 по 4), пока не закончатся гвозди, а внутренний «вложенный» цикл (шаги 3 и 4) вступает в дело, если гвоздь согнулся от неумелых ударов молотка. Выполнение начинается с первой инструкции и, возможно, никогда не закончится, если, скажем, после каждого удара гвоздь будет гнуться. Количество выполняемых шагов обычно намного, а иногда и значительно больше, чем количество инструкций.

В инструкции по забиванию гвоздей есть два шага, при которых происходит ветвление, — они представлены в форме «если… тогда… в противном случае…» (шаги 2 и 4). Их называют условными переходами: «Если какое-то условие выполнено, то переходи к одному шагу, в противном случае — к другому». Условный переход — обычно его обозначают символом ЕСЛИ (if) — изменяет порядок выполнения инструкции в списке.

Он также избавляет от бесконечного цикла. Рассмотрим такой пример: (1) Скажите «Привет». (2) Перейдите к шагу 1. Нет условного перехода, позволяющего выйти из цикла. Такой систематический процесс начинается, но никогда не заканчивается.

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

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

Это не значит, что математика не важна. Люди систематически осваивали ее на протяжении тысячелетий. Даже в эпоху вездесущих калькуляторов дети все еще учатся складывать два числа столбиком. Как известно, чтобы это сделать, нужно последовательно сложить каждую пару цифр, начиная справа, и записать их сумму в ответ. Если (это важно!) она равна или больше 10, то 1 переносится на следующий шаг и прибавляется к цифре, стоящей на одну позицию левее. И так далее. В процессе сложения столбиком есть еще одно неявное ЕСЛИ: если закончились цифры и больше нет единицы для переноса, придется остановиться. Это набросок процесса, который обычно называют алгоритмом сложения. Не сомневаюсь: мы все счастливы, что наши калькуляторы теперь хорошо его «знают» и при необходимости могут сложить даже не два, а два десятка чисел.

В прошлом веке слово «алгоритм» стало синонимом термина «систематический процесс». Оно произошло от искаженного имени персидского математика IX века аль-Хорезми. Он жил в древнем Багдаде и писал о систематических процессах, связанных с десятичной системой счисления — новой, только что появившейся в Индии концепцией, описывающей странную, доселе неведомую штуку под названием «ноль». В позднем Средневековье ее стали называть алгоризмом или авгримом, еще дважды исказив имя ученого. Таким образом, понятие алгоритма коренится в числах и манипуляциях с ними, но никоим образом с ними не связано.

Джеффри Чосер в XIV веке использовал фразу Nombres in augrym (числа в десятичной системе) для описания делений на астролябии. Но его друг Томас Аск употребил этот термин более выразительно. Его слова, приведенные в эпиграфе, говорят о силе концепции ноля — Sypher in augrym (цифра 0 в десятичной системе). По сути, он утверждает, что, хотя сам по себе ноль ничего не значит, его добавление значит очень много. С нашей точки зрения, каждый ноль справа увеличивает число на порядок и действительно имеет существенное значение. Авгрим Аска далек от нашего алгоритма, но по прошествии времени его афоризм кажется пророческим, предсказавшим потенциал Усиления.