Код. Тайный язык информатики — страница 37 из 71

К 1928 году оригинальные карты, использовавшиеся в переписи 1890 года, превратились в знаменитые перфокарты IBM с 80 столбцами и 12 строками. Они продолжали активно использоваться на протяжении более 50 лет, и даже в последующие годы их иногда называли картами Холлерита. Об эволюции этих карт расскажу подробнее в главах 20, 21 и 24.

Прежде чем перенестись в двадцатое столетие, давайте убедимся, что у нас сложилось правильное представление об этой эпохе. По очевидным причинам в данной книге я уделял пристальное внимание изобретениям, которые являются цифровыми по своей природе. К ним относятся телеграф, азбука Брайля, машины Бэббиджа и карты Холлерита. При работе с цифровыми концепциями и устройствами вы легко можете подумать, что цифровым является весь мир. Однако открытия и изобретения XIX века были явно не цифровыми. Действительно, очень малая часть природного мира, который мы воспринимаем с помощью органов чувств, цифровая. Скорее, мир — это континуум, который нелегко представить с помощью чисел.

Несмотря на то что Холлерит использовал реле в своих карточных табуляторах и сортировщиках, компьютеры, созданные на основе реле, которые впоследствии стали называться электромеханическими, появились только в середине 1930-х годов. В этих машинах обычно использовались не телеграфные реле, а реле, разработанные для маршрутизации телефонных вызовов.

Эти первые релейные компьютеры не были похожи на то, что мы собирали в предыдущей главе (их конструкция основана на микропроцессорах, созданных в 1970-х). Сегодня для нас очевидно, что компьютеры должны использовать двоичные числа, однако так было не всегда.

Другое отличие нашего релейного компьютера от первых настоящих машин в том, что никто в 1930-х годах не был настолько сумасшедшим, чтобы собрать из реле память объемом 524 288 бит! Стоимость и требования к пространству и мощности делали невозможным создание такой памяти. Скудный объем доступной памяти использовался исключительно для хранения промежуточных результатов. Сами программы находились на физическом носителе, например на бумажной ленте с перфорацией. Действительно, наш процесс ввода кода и данных в память — более современная концепция.

Хронологически первый релейный компьютер, по-видимому, сконструировал Конрад Цузе (1910–1995), который в 1935 году, будучи студентом-инженером, начал собирать машину в квартире своих родителей в Берлине. Эта машина использовала двоичные числа, но в ее ранних версиях применялась механическая память, а не реле. Для программирования своих компьютеров Цузе пробивал отверстия в старой 35-миллиметровой кинопленке.

В 1937 году Джордж Стибиц (1904–1995) из Bell Telephone Laboratories принес домой пару телефонных реле и собрал на своем кухонном столе однобитный сумматор, который его жена позднее назвала «К-машиной» («К» — значит «кухня»). Этот эксперимент лег в основу компьютера Complex Number Computer, созданного в Bell Labs в 1939 году.

Между тем студент выпускного курса Гарварда Эйкен (1900–1973) искал способ выполнения множества однообразных вычислений, что привело к сотрудничеству Гарварда и IBM, в результате которого был создан автоматический вычислитель, управляемый последовательностями, впоследствии получивший имя «Марк I». Работа над этим устройством была завершена в 1943 году. Этот первый цифровой компьютер, способный печатать таблицы, наконец реализовал мечту Чарльза Бэббиджа. Компьютер «Марк II» был самой крупной релейной машиной, использующей 13 тысяч реле. В Гарвардской вычислительной лаборатории, возглавляемой Эйкеном, впервые был прочитан курс информатики.

Реле подходили для создания компьютеров, но были неидеальны. Поскольку они были механическими, их работа основывалась на изгибании металлической пластины. После продолжительной работы реле могли сломаться, а также выйти из строя из-за частичек грязи или бумаги, застрявших между контактами. Известен случай, когда в 1947 году из реле компьютера «Марк II» в Гарварде была извлечена мошка. Грейс Хоппер (1906–1992), сотрудничавшая с Эйкеном с 1944 года, а позднее ставшая известным специалистом в области языков программирования, приклеила эту мошку в журнал с пометкой: «Первый отловленный баг».

Возможная замена для реле — вакуумная лампа, разработанная Джоном Флемингом (1849–1945) и Ли де Форестом (1873–1961) для радио. К началу 1940-х годов вакуумные лампы повсеместно использовались для усиления телефонных сигналов. Практически в каждом доме был радиоприемник, наполненный светящимися трубками, которые усиливали радиосигналы, обеспечивая их слышимость. Как и в случае с реле, из вакуумных ламп можно собрать вентили И, ИЛИ, И-НЕ и ИЛИ-НЕ.

Не важно, из чего собраны вентили — из реле или из вакуумных ламп. Вентили всегда можно объединить в сумматоры, селекторы, дешифраторы, триггеры и счетчики. Все, что я говорил о компонентах на основе реле в предшествующих главах, остается в силе при замене реле вакуумными лампами.

Тем не менее у вакуумных ламп наблюдались свои недостатки: они были дорогими, потребляли много электричества и выделяли много тепла. Самая большая проблема заключалась в том, что лампы в итоге перегорали. Это был факт, с которым людям приходилось мириться. Владельцы ламповых радиоприемников привыкли к необходимости периодически заменять в них лампы. Телефонная система была спроектирована с избыточной надежностью, поэтому периодически перегорающие лампы не представляли большой проблемы (в любом случае никто не ожидает от телефонной системы безупречной работы). А вот если лампа перегорает в компьютере, это можно обнаружить не сразу. Кроме того, в компьютере используется так много вакуумных ламп, что они могут перегорать в среднем каждые несколько минут.

Большое преимущество использования вакуумных ламп по сравнению с реле в том, что лампы могут переключаться из одного состояния в другое примерно за одну миллионную долю секунды — за одну микросекунду. Вакуумная лампа изменяет состояние (включается или выключается) в тысячу раз быстрее, чем реле, которое переключается из одного состоянии в другое в лучшем случае примерно за одну миллисекунду, то есть тысячную долю секунды. Интересно отметить, что скорость не представляла серьезной проблемы на ранних этапах развития компьютерной индустрии, поскольку общая скорость вычислений была связана со скоростью, с которой машина считывала программу с бумажной или пластиковой ленты. Пока компьютеры работали на этом принципе, преимущество вакуумных ламп по сравнению с реле не имело значения.

Начиная с 1940-х годов вакуумные лампы стали вытеснять реле в конструкции новых компьютеров. К 1945 году реле совсем перестали использоваться. В то время как релейные машины назывались электромеханическими компьютерами, вакуумные лампы стали основой для первых электронных компьютеров.

В 1943 году в Великобритании начал работать компьютер «Колосс», использовавшийся для расшифровки сообщений, созданных с помощью немецкой шифровальной машины «Энигма». Над этим проектом (и некоторыми более поздними британскими компьютерами) среди прочих работал Алан Тьюринг (1912–1954), который в наши дни известен двумя статьями. В первой, опубликованной в 1937 году, он ввел понятие «вычислимость» — анализ того, что могут и чего не могут сделать компьютеры. Он также разработал абстрактную модель компьютера, которая теперь известна под названием машины Тьюринга. Вторая известная статья была посвящена искусственному интеллекту. Автор представил тест для машинного интеллекта — тест Тьюринга.

В Электротехнической школе Мура при Пенсильванском университете Джон Эккерт (1919–1995) и Джон Моучли (1907–1980) разработали компьютер ENIAC (Electronic Numerical Integrator and Computer, электронный числовой интегратор и вычислитель). В нем использовались 18 тысяч вакуумных ламп, и компьютер был закончен в конце 1945 года. ENIAC, вес которого составлял около 30 тонн, можно считать самым большим компьютером в истории. К 1977 году в продаже уже были гораздо более быстрые компьютеры. Однако Эккерт и Моучли не смогли запатентовать машину из-за заявки их конкурента Джона Атанасова (1903–1995), собравшего электронный компьютер раньше, который, однако, так никогда и не заработал.

Компьютер ENIAC привлек внимание математика Джона фон Неймана (1903–1957). Родившийся в Венгрии, фон Нейман проживал в Соединенных Штатах с 1930 года. Выдающийся человек, известный своей способностью выполнять в уме сложнейшие арифметические операции, фон Нейман был профессором математики в Принстонском институте перспективных исследований и изучал все — от квантовой механики до применения теории игр в экономике.

Джон фон Нейман помог разработать компьютер EDVAC (Electronic Discrete Variable Automatic Computer, электронный автоматический вычислитель с дискретными переменными), являвшийся усовершенствованной версией компьютера ENIAC. В статье[23] 1946 года «Предварительное обсуждение логической конструкции электронной вычислительной машины», написанной в соавторстве с Артуром Берксом и Германом Голдстайном, он описал несколько особенностей компьютера, благодаря которым машина EDVAC значительно превосходила ENIAC. Разработчики EDVAC решили, что компьютер должен использовать двоичную систему счисления. В машине ENIAC использовалась десятичная. Кроме того, компьютер должен обладать максимально возможным объемом памяти, и эта память должна хранить и программный код, и данные, получаемые в процессе работы. С компьютером ENIAC дело обстояло не так. Программирование ENIAC осуществлялось с помощью переключателей и соединения кабелей. Эти инструкции должны были храниться в памяти последовательно и адресоваться с помощью счетчика команд, при этом допускались условные переходы. Такой принцип стал известен как концепция запоминаемой программы.

Эти принципы были таким важным шагом в развитии информатики, что сегодня мы говорим о них как об архитектуре фон Неймана