Грейс Хоппер же была ответственной за саму машину, поэтому не следила за такими материями: несмотря на то, что все работало как часы, поручений меньше не становилось, да и программирование Mark I было невероятно трудоемким. Машина постоянно отключалась, и сотрудникам приходилось залезать в ее недра, вооружившись фонариками и зеркальцем из косметички Хоппер. Иногда причиной таких неполадок становилась обычная моль, случайно попавшая между контактами – отсюда появилось слово «баг»[9]
и выражение «дебаггинг» (то есть буквально «дезинсекция»), – но чаще всего ошибки были связаны с человеческим фактором. Особенно часто возникал «демонстрационный эффект», когда кто-то из старших по званию приводил в лабораторию очередную группу любопытных посетителей. Наглядно продемонстрировать сложное устройство вычислительной машины было затруднительно, поэтому чаще всего экскурсия завершалась тем, что один из начальников решительно выдергивал один из штекеров на коммутационной панели и переставлял его в другое положение. К сожалению, это почти всегда имело фатальные последствия, так как меняло всю рабочую программу машины, и она теряла способность корректно выполнять вычисления.Подобных аппаратных вмешательств сотрудникам лаборатории хотелось избежать, поэтому Грейс Хоппер создала библиотеку часто используемых подпрограмм в виде небольших перфокарт с рукописными пометками. Карточки существенно ускорили процесс программирования, и она начала сшивать их в последовательности, конструируя более сложные программы (например, операции вычисления косинуса или квадратного корня), что еще больше упростило работу.
Тем не менее четкая граница между аппаратной и программной составляющей машины сохранялась и постоянно создавала неудобства. Корнем зла, как и раньше, был человеческий фактор: программисты часто ошибались даже при ручном копировании перфокарт. Конечно, в этом не было злого умысла, просто подтверждался закон Мерфи: если что-то может пойти не так, то это пойдет не так. Хоппер регулярно убеждалась в этом на собственном примере, когда сама делала ошибки, выполняя вроде бы прекрасно знакомые операции. Она пришла к выводу, что всю эту работу было бы лучше перепоручить машине. Так была сформулирована цель проекта, который будет занимать Хоппер в ближайшее десятилетие: добиться того, чтобы программисты разговаривали с машиной с помощью языка, а не переключали контакты. Конечно, для этого нужно было вначале обучить этому языку машину, что Хоппер и отразила в названии представленного в 1952 году исследовательского проекта The Education of a Computer – «Обучение компьютера».
Сразу приступить к делу не получилось: дело в том, что расположенная в подвале Гарвардского университета лаборатория коммандера Эйкена в послевоенное время перестала вписываться в структуру учебного заведения, а финансирование со стороны оборонного ведомства почти прекратились. Большую часть сотрудников уволили или перевели в штат университета, но самой Хоппер не предложили остаться преподавать в Гарварде. Она начала искать утешение в табаке и алкоголе и впала в глубокую депрессию, откуда ее с трудом вызволили друзья и бывшие коллеги. В итоге Хоппер позвали в филадельфийскую лабораторию Джона Преспера Эккерта и Джона Мокли, которая по заказу компании Remington Rand строила ЭНИАК – первый в мире полностью электронный цифровой вычислитель на вакуумных радиолампах. Хоппер получила должность руководителя отдела программирования и продолжила свой компьютерно-образовательный проект на этом посту. Опираясь на опыт автоматизации работы с помощью перфокарт, она решила форсировать создание языка программирования, чтобы коммуникация человека и машины происходила максимально понятным образом. Созданный ей язык FLOW-MATIC позволил добиться значимых успехов: выросла не только скорость работы компьютера, но и уровень сложности, а также эффективность написанных на этом языке программ. Противниками внедрения нового языка, как ни удивительно, оказались не руководители лаборатории, а сами программисты, которые боялись, что их навыки копания в ламповых схемах станут ненужными, и им придется уступить свое место каким-то пришлым программистам.