· 9 мин. на чтение.

История интернета. Глава 2 - как люди научились разговаривать с машинами

История интернета. Глава 2 - как люди научились разговаривать с машинами

Глава 2. Программирование

Машина есть. Но что с ней делать?

Февраль 1946 года. Пресс-конференция в Пенсильванском университете позади. Газеты написали про "электронный мозг". Военные довольны. Маучли и Эккерт принимают поздравления.

Но есть деталь, о которой на пресс-конференции не говорили.

Чтобы запустить на ENIAC новый расчёт, нужно было буквально переделать машину. Не написать новую программу - физически переподключить кабели, переставить сотни тумблеров, проверить каждое соединение. Один расчёт - одна конфигурация. На перенастройку уходили дни. Иногда - неделя.

ENIAC умел считать очень быстро. Но сказать ему, что именно считать, было мучительно долго.

Это был не технический недостаток, который можно было исправить болтом или паяльником. Это был концептуальный тупик. Машина существовала. А вот способа с ней разговаривать - не было.

Люди, которые этот способ изобрели, сегодня известны значительно меньше, чем создатели самих машин. Что несправедливо. Потому что без них ENIAC остался бы армейским калькулятором, а не шагом к интернету.

Шесть женщин, которых назвали техниками

Осенью 1945 года армия искала людей для работы с ENIAC. Задача была сформулирована коротко: разобраться, как программировать машину, и научить её считать баллистические траектории.

Критерии отбора были простые: математическое образование и опыт ручных вычислений. Отобрали шестерых. Все шестеро - женщины. Кэтлин Макналти, Фрэнсис Байлас, Элизабет Снайдер, Марлин Мелцер, Рут Лихтерман и Джин Дженнингс. Все работали в Пенсильванском университете как "компьютеры" - так тогда называли людей, которые считали таблицы вручную. От слова compute.

Им выдали несколько сотен страниц технической документации и сказали разобраться. Никакого руководства, никаких учителей - потому что людей, знавших, как программировать ENIAC, просто не существовало. Они были первыми.

Несколько месяцев они изучали схемы. Каждый из сорока пяти блоков ENIAC - аккумуляторы, умножители, делители, функциональные таблицы - работал по своим правилам. Чтобы задать задачу, нужно было понять логику каждого блока, продумать последовательность операций, физически проложить кабели в нужном порядке и проверить каждое соединение.

Джин Дженнингс - впоследствии Джин Бартик - вспоминала этот период без ностальгии: "Мы не знали, что делаем что-то важное. Мы просто решали задачу."

Задача была решена. На пресс-конференции 14 февраля 1946 года ENIAC продемонстрировал расчёт траектории снаряда - тридцать секунд вместо двадцати часов. Зал аплодировал. Фотографы снимали машину. На снимках были и женщины - стоят рядом с панелями, переключают тумблеры.

enniac

Подписи под фотографиями в газетах: "техники демонстрируют машину".

Их имена не прозвучали. Публика решила, что женщины просто позируют - настоящую работу, конечно, делали учёные-мужчины в костюмах.

Правда начала восстанавливаться только в 1985 году, когда историк Кэти Клейман случайно наткнулась на одну из этих фотографий и начала разыскивать изображённых на ней женщин. Часть уже умерла. Остальные охотно рассказывали - без особой горечи, скорее с усмешкой: мол, мы знали, что сделали, и этого достаточно.

Бартик дожила до 2011 года и успела получить несколько наград и публичное признание. На склоне лет она говорила прямо:

"Нас считали операторами. Но операторы выполняют инструкции. Мы писали инструкции. Это разные вещи."

enniac-women

В 2022 году Байлас, Снайдер и Дженнингс посмертно введены в Национальный зал славы женщин. Через семьдесят шесть лет после пресс-конференции.

Грейс Хоппер и слово, которое она ненавидела

Грейс Мюррей Хоппер появилась на Гарвардском Марке I в 1944 году с учёной степенью по математике из Йеля, офицерским патентом ВМФ США и репутацией человека, который не принимает "невозможно" как ответ.

Grace_Hopper_in_the_1940s

Говард Эйкен, руководитель проекта, встретил её без энтузиазма. По его мнению, женщинам на флоте было не место. На вычислительных машинах - тем более. Хоппер не стала спорить. Она молча попросила техническое руководство по Марку I.

Через несколько дней она написала для машины первую программу. Эйкен изменил мнение.

Марк I был совсем другой машиной, чем ENIAC. Электромеханический, медленнее, надёжнее. Работал на реле, не на лампах - и поэтому не перегорал каждые несколько часов. Военно-морской флот использовал его круглосуточно: баллистические таблицы, расчёты для торпед, задачи по навигации. Хоппер была одним из трёх программистов на всю машину.

Именно здесь произошёл один из самых известных эпизодов в истории программирования.

Лето 1947 года. Марк II - следующая версия машины, которую строили параллельно - ведёт себя странно: даёт неверные результаты в одном конкретном расчёте. Программисты проверили код - всё верно. Проверили данные - всё верно. Начали проверять реле.

В реле номер 70 нашли моль. Насекомое залетело внутрь корпуса, попало между контактами и нарушило цепь. Хоппер вынула моль пинцетом, вклеила её в технический журнал и написала рядом: "First actual case of bug being found" - "первый реальный случай обнаружения жука".

Слово "bug" для обозначения ошибки в программе существовало и до этого - Томас Эдисон использовал его в инженерном смысле ещё в 1870-х. Но именно этот журнал с приклеенной молью разошёлся по вычислительному сообществу, и слово приросло к программированию навсегда.

Тот журнал хранится в Национальном музее американской истории в Вашингтоне. Моль до сих пор на месте.

the-computer-bug

К началу 1950-х Хоппер думала о проблеме, которая медленно становилась критической. Программ становилось больше. Машин становилось больше. И каждая программа писалась под конкретную машину - в её собственном машинном коде, в её системе адресации, в её наборе команд.

Программист, знавший Марк I, не мог без переучивания работать на UNIVAC. Программа, написанная для одной машины, не работала на другой. Каждый раз - с нуля.

Хоппер хотела это изменить.

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

В 1952 году Хоппер показала работающий компилятор - программу A-0. Реакция коллег была любопытной. Не восхищение - скорее раздражение. Один из старших инженеров сказал прямо: это жульничество. Настоящее программирование пишется в машинных кодах, иначе ты не понимаешь, что делает машина. Использовать компилятор - значит прятаться за абстракцией.

Хоппер ответила, что именно за этим компилятор и нужен. Чтобы программист думал о задаче, а не о регистрах процессора.

Спор об "настоящем программировании" не утих до сих пор - его просто перенесли на другой уровень. Но компилятор победил.

В конце 1950-х Хоппер стала главным архитектором языка COBOL. Расшифровывается как Common Business-Oriented Language - общий язык для деловых задач. Это был намеренно многословный язык, максимально похожий на английскую деловую прозу. Не x = a + b, а ADD SALARY TO BONUS GIVING TOTAL-PAY. Программисты-математики смеялись над такой многословностью. Бухгалтеры и банковские менеджеры приняли язык без возражений - потому что теперь не нужен был физик, чтобы написать программу расчёта зарплат.

COBOL

COBOL принят как стандарт в 1960 году. До сих пор работает в банках, страховых компаниях и государственных системах по всему миру. По разным оценкам, на COBOL написано от 220 до 300 миллиардов строк действующего кода - больше, чем на любом другом языке. Каждый раз, когда вы снимаете деньги в банкомате или переводите средства между счетами, есть ненулевая вероятность, что где-то в глубине цепочки работает программа на COBOL. Написанная, возможно, пятьдесят лет назад.

Хоппер дослужилась до звания контр-адмирала ВМФ США. Ушла на пенсию в семьдесят девять лет - принудительно, по возрасту. Умерла в 1992 году в восемьдесят пять лет. Похоронена с воинскими почестями на Арлингтонском национальном кладбище.

Фраза, которую она повторяла на лекциях студентам: "Самая вредная фраза в языке - мы всегда так делали". Говорила, что это убивает больше хороших идей, чем любая техническая сложность.

Ричард Блох и первая инструкция

Пока Хоппер работала над программами для Марка I, рядом с ней на той же машине работал Ричард Блох - молодой математик, которого Эйкен взял сразу после университета.

Если Хоппер была стратегом - она видела, куда движется программирование через десять лет, - то Блох был тактиком. Его интересовал конкретный вопрос: как правильно работать с этой машиной прямо сейчас? Как не допустить ошибку? Как найти её, если она всё-таки случилась?

В 1946 году Блох написал первое в истории руководство по программированию. Не теоретический трактат - практическое пособие: как читать схемы Марка I, как планировать последовательность операций, как проверять программу шаг за шагом.

Это был документ, который кажется очевидным задним числом. Конечно, нужно объяснить, как пользоваться машиной. Конечно, нужна методика отладки. Но в 1946 году ничего этого не существовало - каждый программист изобретал свои подходы заново. Блох первым записал практический опыт на бумагу и сделал его передаваемым.

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

Сегодня это называется пошаговой отладкой и встроено во все среды разработки. В 1946-м это была новая идея, и Блох её сформулировал.

После ухода из вычислительной техники Блох стал профессиональным дирижёром. Об этом переходе он говорил без сожаления: "В обоих случаях ты держишь в голове сложную структуру и следишь, чтобы все части работали вместе. Принцип тот же."

Фон Нейман и архитектура, которую используют все

Летом 1944 года на железнодорожной платформе Абердинского испытательного полигона в Мэриленде случайно встретились два человека.

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

Dzon-fon-Nejman

Фон Нейман умел считать в уме быстрее механических калькуляторов. Читал страницу книги за тридцать секунд и мог воспроизвести её дословно спустя десятилетия. Работал одновременно над квантовой механикой, теорией игр, основаниями математики и атомным оружием. Принстонский институт перспективных исследований нанял его с единственным требованием - просто присутствовать и разговаривать с коллегами.

Голдстайн рассказал ему про ENIAC. Фон Нейман слушал молча. Потом спросил несколько точных вопросов. Попросил подключить его к проекту.

Проблему ENIAC он сформулировал немедленно и точно. Машина считает быстро. Но программа для неё существует вне машины - в кабелях и тумблерах. Это означает, что ENIAC - не универсальный компьютер. Это специализированный калькулятор, который можно перенастроить на другую задачу ценой нескольких дней физической работы.

Настоящий универсальный компьютер должен работать иначе.

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

Летом 1945 года он написал черновик отчёта под названием "Предварительный доклад о машине EDVAC". EDVAC - следующая машина после ENIAC, которую уже проектировали Маучли и Эккерт. В отчёте фон Нейман описал архитектуру: процессор, память, устройства ввода и вывода, шина данных. Программа хранится в памяти. Процессор читает команды по одной и выполняет.

Черновик был помечен как внутренний документ. Голдстайн разослал его по университетам. Имя в заголовке было одно - Джон фон Нейман.

Firstdraftedvac

Маучли и Эккерт пришли в ярость. По их словам, идея хранимой программы возникла в их разговорах ещё в 1944 году - фон Нейман лишь оформил её на бумаге. Их имена в отчёте не упоминались. Фон Нейман полагал, что написал честный отчёт о коллективной работе, не предполагая, что документ выйдет за пределы проекта.

Спор о приоритете не утих до смерти всех участников. Историки до сих пор обсуждают, кто именно первым предложил идею хранимой программы - и был ли вообще кто-то один первым.

Но архитектура прижилась под именем фон Неймана. И она работает.

Каждый компьютер, каждый смартфон, каждый маршрутизатор, через который сейчас идут ваши данные в интернете, построен по принципу, описанному в том черновике 1945 года. Процессор читает команды из памяти. Память хранит и программу, и данные. Устройства ввода-вывода связывают машину с внешним миром.

Есть тонкость. Архитектура фон Неймана имеет встроенное ограничение - процессор и память соединены одной шиной, по которой за раз передаётся либо команда, либо данные, но не оба сразу. Это узкое место называют "узким горлышком фон Неймана", и инженеры борются с ним по сей день с помощью кешей, конвейеров и параллельных вычислений. Но базовая схема не менялась.

Сам фон Нейман прожил недолго. В 1955 году ему поставили диагноз - рак поджелудочной железы, предположительно вызванный радиационным облучением во время участия в испытаниях ядерного оружия. Он умер в феврале 1957 года в пятьдесят три года. По воспоминаниям коллег, до последних дней он диктовал математические тексты и вёл беседы с несколькими учёными одновременно.

Конец второй главы

К концу 1950-х компьютеры умели считать быстро и принимать программы без перекоммутации кабелей. Появлялись первые языки - FORTRAN для учёных, COBOL для бизнеса. Появилась профессия программиста - пусть её долго не принимали всерьёз.

Но машины всё ещё стояли отдельно. Каждый университет, каждая военная лаборатория - сами по себе. Данные передавались на перфокартах и магнитных лентах. Если хотел что-то спросить у коллеги в другом городе - писал письмо.

FAQ

Джин Дженнингс Бартик - одна из шести женщин-программистов, которые в 1945-1946 годах разработали методы программирования ENIAC. Вместе с коллегами она разбиралась в работе машины без каких-либо инструкций - только по технической документации. Их вклад был публично признан только в 1980-х годах. Бартик умерла в 2011 году, успев получить несколько наград за вклад в историю программирования.

Компилятор - программа, которая переводит код, написанный на языке высокого уровня, понятном человеку, в машинный код, понятный процессору. Первый компилятор - программу A-0 - написала Грейс Хоппер в 1952 году. До этого программисты писали напрямую в числовых кодах, специфичных для каждой конкретной машины.

COBOL - Common Business-Oriented Language, язык программирования для деловых задач, разработанный при ключевом участии Грейс Хоппер в 1959-1960 годах. Язык намеренно многословен и похож на английскую деловую прозу. По оценкам, сегодня на COBOL работает от 220 до 300 миллиардов строк активного кода - в банках, страховых компаниях и государственных системах по всему миру.

Слово bug в инженерном смысле использовалось ещё с XIX века. Но к программированию оно приросло после конкретного случая: в 1947 году в реле компьютера Марк II застряла моль, которая нарушила работу схемы. Грейс Хоппер вклеила насекомое в технический журнал с пометкой "первый реальный случай обнаружения бага". Этот журнал хранится в Национальном музее американской истории в Вашингтоне.

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

На публичных фотографиях 1946 года шесть женщин, программировавших ENIAC, были подписаны как "техники". Пресса и публика решили, что они просто обслуживают машину. Реальная история восстановлена только в 1985 году - историк Кэти Клейман случайно увидела одну из этих фотографий и начала разыскивать изображённых на ней женщин. К тому моменту части из них уже не было в живых.