После шестинедельных тренировок шесть девушек-программисток, отправив своих приятелей в архивы памяти, вернулись в Пенн, где им дали диаграммы размером с плакат и схемы ENIAC. Макналти рассказывала: «Некто вручил нам целую пачку чертежей (это были электрические схемы всех блоков) и сказал: „Нужно выяснить, как работает машина, а затем научиться ее программировать“»[179]. Для этого потребовалось проанализировать дифференциальные уравнения, а затем понять, как перекинуть кабели к нужным электронным схемам. «Самое большое преимущество изучения компьютера ENIAC по диаграммам состояло в том, что мы начали понимать, что можно на нем сделать, а что нельзя, — говорила Дженнингс. — В результате мы могли локализовать проблему, почти наверняка знали, какая именно электронная лампа барахлит». Они со Снайдер разработали систему, позволяющую обнаружить, какая из восемнадцати тысяч электронных ламп сгорела. «Так как мы знали, как система работает, мы научились диагностировать проблемы так же, если не лучше, чем инженеры. Должна сказать вам, что инженерам это нравилось. Они могли переложить отладку на нас»[180].
Снайдер рассказала, как тщательно они составляли диаграммы и графики для каждой новой конфигурации кабелей и переключателей. Она сказала, что фактически они «делали тогда то, что было началом составления программы», хотя они еще не знали слова для этого. Они писали каждую новую последовательность на бумаге, чтобы обезопасить себя. Дженнингс вспоминала: «Мы все чувствовали, что с нас скальп снимут, если мы испортим машину»[181].
Однажды Дженнингс и Снайдер сидели в реквизированном ими двухэтажном учебном помещении и рассматривали листы, содержащие диаграммы множества блоков ENIAC, когда в класс вошел человек, инспектирующий некоторые конструкции. «Привет, меня зовут Джон Мокли, — сказал он, — я просто проверял, не провалился ли потолок». Ни одна из женщин не встречалась до этого с изобретателем ENIAC, но они ни в малейшей степени не смутились и не испугались. «Рады вас видеть, — заявила Дженнингс, — расскажите, как этот проклятый сумматор работает». Мокли подробно ответил на этот, а потом и на другие вопросы. Когда они закончили, он сказал им: «Ну вот, мой кабинет находится по соседству. Так что в любое время, когда я там, вы можете прийти и задать мне вопрос».
Они и заходили почти каждый день. Если верить Дженнингс, «он был чудесным учителем». Он помог женщинам понять, как много других задач (кроме расчета артиллерийских траекторий) ENIAC сможет со временем решать. Он знал, что для того, чтобы сделать его настоящим компьютером общего назначения, он должен вдохновить программистов, которые могли заставить аппаратное устройство выполнять различные задачи. «Он всегда старался заставить нас думать о других проблемах, — рассказывала Дженнингс. — Он всегда просил нас найти обратную матрицу или что-то в таком же духе»[182].
Женщины-программистки придумали, как сделать подпрограммы для ENIAC, примерно в то же время, что и Хоппер в Гарварде. Они боялись, что логические схемы не настолько мощны, чтобы просчитать некоторые траектории. Придумала решение Макналти. «О, я знаю, я знаю, я знаю, — возбужденно воскликнула она однажды. — Мы можем использовать главную программу для повторения части программы». Они попытались, и это сработало.
«Мы начали обдумывать, как нам написать подпрограммы, вложенные подпрограммы и все такое, — вспоминала Дженнингс. — Это было очень полезно для задач по расчету траекторий, потому что идея состояла в том, чтобы повторять не всю программу, а только ее куски. Для этого нужно было так составить основную программу, чтобы она реализовала это. После того как вы научились делать это, вы понимаете, как составить свою программу в модульном виде. Разработка подпрограмм и модульной организации основной программы были самыми важными этапами в освоении программирования»[183].
Джин Дженнингс Бартик скончалась в 2011 году, а незадолго до смерти с гордостью рассказывала, что все программисты, участвовавшие в создании первого компьютера общего назначения, были женщинами: «Несмотря на то, что мы достигли совершеннолетия в то время, когда карьерные возможности женщин были, как правило, довольно ограниченными, мы приняли участие в становлении компьютерной эры». Это произошло потому, что все-таки многие женщины тогда учились математике и их навыки были востребованы. Была также и забавная причина: парни, с детства помешанные на игрушечных машинках, считали, что именно сборка оборудования была самой важной задачей и, следовательно, мужской работой. «Американская наука и техника была еще более сексистской, чем сегодня, — говорила Дженнингс. — Если бы руководители ENIAC знали, насколько важным окажется программирование для функционирования ЭВМ и насколько сложным оно окажется, они, возможно, трижды подумали бы, прежде чем отдать такую важную роль женщинам»[184].
Сохранение программ
С самого начала Мокли и Эккерт понимали, что существуют более легкие способы перепрограммировать ENIAC. Но они не пытались этого сделать, потому что потребовалось бы усложнить аппаратное устройство, и к тому же в этом не было необходимости, поскольку для решения первоначально поставленных задач этого не требовалось. «Не было сделано ни одной попытки обеспечить автоматический выбор настроек под определенную задачу, — написали они в своем годовом отчете за 1943 год по усовершенствованию ENIAC. — Это было сделано из-за желания упростить конструкцию и потому, что предполагалось, что ENIAC будет использоваться в основном для задач определенного типа, в которых одна настройка будет использоваться много раз, прежде чем машину заставят решать другую задачу»[185].
Но больше чем за год до окончания создания ENIAC, уже в начале 1944 года, Мокли и Эккерт поняли, что существует хороший способ сделать компьютеры легко перепрограммируемыми: хранить программы в памяти компьютера, а не загружать их каждый раз заново. Они чувствовали, что это было бы следующим большим шагом вперед в развитии компьютеров. Структура машины с «сохраняемой программой» предполагает, что постановки задач для компьютера могут быть изменены практически мгновенно, без изменения вручную конфигурации кабелей и переключателей[186].
Для сохранения программы внутри машины нужно иметь большой объем памяти. Эккерт перебрал много способов для этого. В докладной записке, составленной в январе 1944 года, он написал: «Программы можно сохранять временно, используя запись на дисках из сплавов или постоянно — на протравленных дисках»[187]. Поскольку такие диски еще не были сделаны, в следующей версии ENIAC он предложил использовать вместо этого более дешевый метод хранения, названный памятью на акустической линии задержки. Она была впервые сконструирована в Bell Labs инженером Уильямом Шокли (о котором ниже будет рассказано гораздо подробнее) и усовершенствована в Массачусетском технологическом институте. Принцип работы акустической линии задержки состоял в сохранении данных в виде импульсов в длинной трубке, заполненной тяжелой, вязкой жидкостью, такой как ртуть. На одном конце трубки электрический сигнал, несущий информацию, в кварцевом преобразователе превращался в волны, какое-то время распространяющиеся в трубке вперед и назад. Поскольку импульсы затухают, их с помощью усилителей восстанавливают. Когда приходит время извлечь данные, импульсы в кварцевом преобразователе опять превращаются в электрические сигналы, и цикл повторяется. В каждой такой трубке могло храниться примерно тысяча бит данных при стоимости, равной одной сотой от стоимости схемы, собранной на электронных лампах. В докладной записке, составленной летом 1944 года Эккертом и Мокли, они предложили следующее поколение компьютеров — преемников ENIAC — снабдить стеллажами с этими линиями задержки на ртутных трубках и хранить в них как исходные данные, так и основную информацию по программам в цифровом виде.
Джон фон Нейман
В этот момент в истории компьютеров снова появляется один из самых интересных персонажей. Джон фон Нейман — математик, родившийся в Венгрии, — был руководителем Тьюринга в Принстоне и предлагал ему остаться там работать в качестве ассистента. Восторженный эрудит и изысканный интеллектуал, он внес значительный вклад и в математическую статистику, и в теорию множеств, и в геометрию, и в квантовую механику, и в конструкцию ядерной бомбы, и в динамику жидкостей, и в теорию игр, и, конечно, в компьютерную архитектуру. В конечном итоге он значительно усовершенствует архитектуру компьютера, обеспечивающую сохранение программ, которую начали разрабатывать Эккерт и Мокли и их коллеги, и она станет называться его именем, и большая часть заслуг достанется именно ему[188].
Джон фон Нейман
В этот момент в истории компьютеров снова появляется один из самых интересных персонажей. Джон фон Нейман — математик, родившийся в Венгрии, — был руководителем Тьюринга в Принстоне и предлагал ему остаться там работать в качестве ассистента. Восторженный эрудит и изысканный интеллектуал, он внес значительный вклад и в математическую статистику, и в теорию множеств, и в геометрию, и в квантовую механику, и в конструкцию ядерной бомбы, и в динамику жидкостей, и в теорию игр, и, конечно, в компьютерную архитектуру. В конечном итоге он значительно усовершенствует архитектуру компьютера, обеспечивающую сохранение программ, которую начали разрабатывать Эккерт и Мокли и их коллеги, и она станет называться его именем, и большая часть заслуг достанется именно ему[188].
Фон Нейман родился в зажиточной еврейской семье в Будапеште в 1903 году в благополучное время, когда в Австро-Венгерской империи были отменены законы, ограничивающие права евреев. Император Франц Иосиф в 1913 году наградил банкира Макса Неймана наследуемым дворянским титулом за «заслуги в финансовой сфере», таким образом семья стала назваться маргиттаи Нейманами, а по-немецки — фон Нейманами. Янош (в детстве его называли Янчи, а затем — в Америке — Джоном или Джонни) был старшим из трех братьев, и они все после смерти отца перешли в католичество (как один из них признался — «для удобства»)[189].
Фон Нейман был еще одним первооткрывателем, чьи интересы лежали на пересечении гуманитарных и естественных наук.
«Наш отец писал любительские стихи и считал, что поэзия может передать не только эмоции, но и выразить философские идеи, — вспоминал брат Джона Николас. — Он считал поэзию языком в языке, и в этом, возможно, берут начало будущие рассуждения Джона о языках компьютера и мозге». О матери он написал: «Она считала, что музыка, искусство и прочие эстетические удовольствия должны занимать важное место в нашей жизни и что утонченность — весьма уважаемое качество»[190].
Существует огромное количество историй о многочисленных талантах молодого фон Неймана, и некоторые из них, вероятно, правдивы. В возрасте шести лет, как позже рассказывали, он перебрасывался с отцом шутками на древнегреческом и мог в уме разделить два восьмизначных числа. На вечеринках он проделывал фокус — запоминал страницу из телефонной книги и называл в обратном порядке имена и номера. Он мог воспроизвести дословно прочитанные страницы из романов или статей на любом из пяти языков. «Если раса людей со сверхчеловеческими мыслительными способностями когда-либо возникнет, — сказал как-то разработчик водородной бомбы Эдвард Теллер, — принадлежащие ей особи будут напоминать Джонни фон Неймана»[191].
Кроме школы, он занимался с репетиторами математикой и языками и в пятнадцать лет полностью овладел высшей математикой. Когда Коммунистическая партия во главе с Белой Куном в 1919 году на короткое время взяла власть в Венгрии, занятия фон Неймана были перенесены в Вену и на курорт на Адриатическом море, а в нем выработалось стойкое отвращение к коммунизму. Он изучал химию в Швейцарском федеральном технологическом институте (Политехникуме) в Цюрихе (откуда уже ушел Эйнштейн), а математику — и в Берлине, и в Будапеште, и в 1926 году получил докторскую степень. В 1930 году он отправился в Принстонский университет изучать квантовую физику и остался там после того, как был назначен (наряду с Эйнштейном и Гёделем) одним из первых шести профессоров только что образованного Института перспективных исследований[192].
Фон Нейман и Тьюринг, которые встретились в Принстоне, считаются парой великих теоретиков, разработавших концепцию компьютера общего назначения, но в личном плане и по темпераменту они были полными противоположностями. Тьюринг вел спартанский образ жизни, жил в пансионах и дешевых гостиницах и был погружен в себя. Фон Нейман же был элегантным бонвиваном, и они с женой один-два раза в неделю устраивали блестящие приемы в своем огромном доме в Принстоне. Тьюринг любил бегать на длинные дистанции, а про фон Неймана шутили, что на свете очень мало мыслей, никогда не приходивших ему в голову, но идея бега на длинные расстояния (впрочем, и на короткие тоже) была среди них. Мать Тьюринга как-то сказала о своем сыне: «В одежде и привычках он обычно был неряшлив». Фон Нейман, наоборот, почти всегда носил костюм-тройку, в том числе в поездке на осле на дно Большого каньона. Даже будучи студентом, он так хорошо одевался, что, как рассказывали, при первой встрече с ним математик Давид Гильберт задал только один вопрос: «Кто его портной?»[193]
Фон Нейман любил на своих приемах рассказывать анекдоты и читать шуточные стихи на разных языках, а ел так много, что его жена однажды сказала, что он может сосчитать все, кроме съеденных калорий. Он безрассудно водил машину, иногда попадал в аварии и любил покупать шикарные новые «кадиллаки». Историк науки Джордж Дайсон писал: «По крайней мере раз в год он приобретал новый автомобиль, независимо от того, пострадал ли в аварии предыдущий»[194].
В конце 1930-х годов, работая в Институте, фон Нейман заинтересовался способами математического моделирования взрывных ударных волн. Это привело к тому, что в 1943 году он стал участником Манхэттенского проекта, и ему пришлось совершать частые поездки на секретные объекты Лос-Аламоса и Нью-Мексико, где разрабатывалось атомное оружие. Поскольку количества урана-235 было недостаточно, чтобы построить больше одной бомбы, ученые в Лос-Аламосе попытались создать бомбу, в которой бы использовался плутоний-239. Фон Нейман сосредоточился на способах построения взрывных линз, которые бы сжимали плутониевое ядро бомбы для достижения критической массы[195].
Для расчета параметров этого взрыва требуется решение множества уравнений для вычисления скорости волны сжатия воздуха или других веществ, образовавшейся после взрыва. Поэтому фон Нейману захотелось изучить возможности высокоскоростных компьютеров.
Летом 1944 года эта проблема привела его в Bell Labs, и он стал изучать обновленную версию калькулятора комплексных чисел Джорджа Стибица. В последней версии имелось нововведение, которое произвело на него особенное впечатление его: на той же перфорированной ленте, где были набиты закодированные инструкции для каждой задачи, рядом с ними помещались и исходные данные. Фон Нейман провел какое-то время и в Гарварде, пытаясь выяснить, можно ли использовать компьютер Mark I Говарда Айкена для расчетов бомбы. Все лето и осень того года он перемещался на поезде между Гарвардом, Принстоном, Bell Labs и Абердином, исполняя роль пчелки, прямо и перекрестно опыляющей различные команды идеями, которые возникали в его голове. Так же как Джон Мокли ездил повсюду, подбирая идеи, которые в результате привели к созданию первого работающего электронного компьютера, фон Нейман курсировал между лабораториями, собирая воедино элементы и понятия, которые стали потом частью архитектуры компьютера с сохраняемыми программами.
В Гарварде, в конференц-зале, расположенном рядом с компьютером Mark I, Грейс Хоппер и ее партнер, программист Ричард Блох, обустроили рабочее место для фон Неймана. Он и Блох должны были писать уравнения на доске и вводить их в машину, а Хоппер должна была считывать готовые промежуточные результаты. Пока машина «переваривала числа», рассказывала Хоппер, фон Нейман часто выбегал из конференц-зала и подбегал к ней, чтобы предсказать, какими будут результаты. «Я просто никогда не забуду, как они прибегали из задней комнаты, а затем снова убегали обратно и исписывали этим [числами] всю доску, и фон Нейман предсказывал, какие результаты должны были получиться, и в девяносто девяти процентах случаев он угадывал результат с фантастической точностью, — восклицала Хоппер в восторге. — Казалось, он просто знал или чувствовал, как происходят вычисления» [196].
Для команды Гарварда стиль работы фон Неймана в коллективе был непривычным. Он впитывал их идеи, выдвижение некоторых из них считал своей заслугой, но в то же время ясно давал понять, что никто не должен считать какую-либо концепцию своей. Когда пришло время писать отчет о том, что они делают, фон Нейман настаивал, чтобы имя Блоха стояло первым. Блох рассказывал: «На самом деле я не считал, что заслуживал этого, но так вышло, и я дорожу этим»[197]. Айкен тоже считал, что нужно открыто обмениваться идеями. «Не бойтесь, что кто-то украдет у вас идею, — сказал он однажды студенту. — Если она оригинальная, им придется ее принять». Тем не менее даже он был поражен и немного смущен достаточно бесцеремонной позицией фон Неймана в отношении того, кому принадлежит заслуга выдвижения данной идеи. «Он говорил о концепциях, не ссылаясь на их авторов»[198].