Шрифт:
Интервал:
Закладка:
Внешне вычислительная машина представляла собой внушительное зрелище: при размерах приблизительно 16 × 2,5 × 1 м она весила пять тонн и содержала 760 000 деталей, 850 км проводов, 3 000 000 соединений, 3500 многократных реле с 35 000 контактов, 2225 счётчиков, 1484 десятипозиционных переключателя. Опираясь на технологию, разработанную IBM для статистических и бухгалтерских машин, Harvard Mark I задействовала в своей конструкции традиционные компоненты IBM, такие как электромагнитные реле, счётчики, кулачковые контакты, перфокарты и электрические пишущие машинки, но, кроме этого, также включала новые конструктивные элементы — реле и новые, более быстрые и компактные виды счётчиков, которые раньше не использовались в машинах IBM.
Машина приводилась в действие длинным горизонтальным валом, непрерывно вращающимся со скоростью около 3 оборотов в секунду. Счётное устройство и память Mark I оперировали 23-значными десятичными числами (24-я позиция была отведена для хранения знака). Расчёты производились в десятичных числах с фиксированной запятой. Эйкен говорил, что причиной выбора 23-значных чисел было то, что он намеревался пересчитать планетные орбиты, а для этого нужна была именно такая точность[351].
Машина была снабжена 60 наборами из 24 переключателей для ручного ввода данных и была способна хранить в памяти 72 числа[352]. Она выполняла три сложения или вычитания в секунду, умножение занимало 6 секунд, деление — 15,3 секунды, а на вычисление логарифма или тригонометрической функции уходило более одной минуты[353].
Рис. 42. Вычислительная машина Harvard Mark I
2.7.3 Кто же был первым?
В чём заключался принципиальный прогресс, достигнутый Цузе и Эйкеном? Ответ на этот вопрос не столь очевиден. Ни машины Цузе, ни Harvard Mark I не были первыми в истории электромеханическими счётными устройствами. Мы знаем, что табулятор Холлерита использовал в своей работе электрический ток. Механические счётные машины — арифмометры — в 1930-е гг. были распространены повсеместно, неужели замена ручного привода арифмометра на электрический двигатель стала столь грандиозной инновацией? Да, машины Эйкена и Цузе могли осуществлять цепочки последовательных действий, но ведь и табуляторы выполняли операции последовательного сложения при подсчёте перфокарт. Конечно, им были недоступны более сложные операции, такие как вычисление тригонометрических функций, но действительно ли революционным стало добавление вычитания, умножения и деления к сложению, доступному табуляторам?
Для того чтобы объяснить принципиальную суть инноваций Цузе и Эйкена, нам придётся сделать небольшое теоретическое отступление.
Несколько лет назад пользователь Reddit с ником u/General_Urist написал пост со вполне резонным вопросом: «Я видел множество приспособлений, номинированных на звание первого в мире компьютера. Разностная машина, Z1 Цузе, Z3 Цузе, Colossus, ENIAC и так далее. Почему по этому поводу существуют разногласия?» В комментариях другие пользователи вполне резонно отвечают: «Потому что люди не могут договориться о том, что такое „компьютер“». Пользователь BitOBear приводит длинный список спорных признаков «компьютера», например: тьюринг-полнота [Turing completeness], наличие или отсутствие движущихся частей (или ограничение их количества), допускает ли устройство перепрограммирование и возможно ли это перепрограммирование программными средствами, должна ли у устройства быть память и считаются ли за память перфокарты или углы поворота зубчатых колёс и так далее[354].
Отметив имеющиеся разногласия, хотелось бы остановиться на первом из названных признаков — так называемой тьюринг-полноте устройства. Вплоть до 1940-х гг. слово «компьютер» (computer) зачастую обозначало человека. Историк вычислительной техники Пол Черуцци в своей статье с говорящим названием «Когда компьютерами были люди» (When Computers Were Human)[355] приводит любопытную выдержку из отчёта, написанного в феврале 1945 г. одним из пионеров вычислительной техники Джорджем Штибицем: «Под „калькулятором“ или „счётной машиной“ мы будем понимать устройство… способное принимать [на вход] два числа A и B и формировать несколько или любую из комбинаций A + B, A − B, A × B, A / B. Под „компьютером“ мы будем понимать машину, способную автоматически выполнять последовательность операций такого рода и сохранять необходимые промежуточные результаты. Задействованные в процессах люди будут называться „операторами“, чтобы отличать их от „компьютеров“ (машин)». Под определение Штибица подходят первые машины Цузе и Mark I Эйкена, но не подходят ни табулятор Холлерита, ни разностные машины, ни ранние механические калькуляторы. Понятно, что с определением Штибица можно спорить, говорить, что оно выбрано произвольно, но самое примечательное в нём то, что его появление знаменует собой признание за машиной наличия способности заменить человека в деле решения нетривиальных вычислительных задач, отличных от простых арифметических примеров, решаемых в одно действие. Но какими свойствами должна обладать машина, способная, руководствуясь соответствующей программой, решить любую математическую задачу из числа тех, которые способен решить человек, снабжённый неограниченным количеством карандашей и бумаги?
2.7.4 Теоретики — Гёдель, Чёрч, Тьюринг
Такой простой, на первый взгляд, вопрос требует для ответа на него весьма нетривиальных теоретических изысканий. Интересно, что вплоть до 1930-х гг., несмотря на, казалось бы, самоочевидность самого явления, у учёных не было формального определения для множества задач, которые могут быть решены при помощи бумажно-карандашных методов. Хотя для их обозначения имелся даже специальный, хотя и неформальный термин: «эффективно вычислимые задачи» (effectively calculable problems). В 1930-е гг. сразу несколько учёных попытались дать формальные определения этому понятию и подошли к проблеме, как часто водится, с разных сторон.
Из английской «Википедии» можно узнать, что в 1933 г. австро-американский математик Курт Гёдель вместе с Жаком Эрбраном дали формальное определение класса, подходящего в качестве аналога понятия «эффективно вычислимая задача». Этот класс был назван «общерекурсивными функциями» (general recursive functions). Класс общерекурсивных функций — это наименьший класс функций (с одним или более аргументом), он включает в себя все постоянные функции, проекцию, функцию следования и замкнутый относительно функций подстановки, примитивной рекурсии и минимизации[356].
У внимательного читателя после прочтения предыдущего абзаца наверняка возникнет как минимум два вопроса. Во-первых, что означает «австро-американский математик» — неужели на момент публикации статьи, содержавшей определение, у Гёделя было двойное гражданство? Во-вторых, что ещё более странно, как Жак Эрбран, умерший в 1931 г., смог в 1933 г. опубликовать вместе с Гёделем важный научный результат?
За скупыми строками онлайн-энциклопедии, на первый взгляд сквозящими некоторой небрежностью, скрываются удивительные и трагические подробности жизни людей, ставших первопроходцами на неизведанных ранее тропах новой