Код
#статьи

Программист космического уровня: Маргарет Гамильтон

Каждый программист рано или поздно роняет систему. Но что, если это лунная миссия США?

Иллюстрация: MIT Museum / Wikimedia Commons / Colowgee для Skillbox Media

20 июля 1969 года астронавты корабля «Аполлон-11» впервые в истории совершили посадку на Луну. За три минуты до прилунения сработали сигналы тревоги, миссия была в опасности. Но всё закончилось благополучно — во многом благодаря инженеру Маргарет Гамильтон.

Именно она руководила созданием софта для бортового оборудования и придумала термин «разработка ПО». В этой статье мы расскажем, как Гамильтон стала программистом и попала в NASA и с какими проблемами столкнулась лунная миссия США.

Тяжёлая юность программиста: комментарии на греческом и латыни

В середине XX века информатики как дисциплины ещё не существовало — её не преподавали в колледжах, а коммерческих курсов на тот момент не появилось. В программирование приходили из других сфер. Маргарет Гамильтон не исключение. Она получила математическое образование и собиралась поступать в аспирантуру Брандейского университета.

«Никто не знал, чем мы занимаемся. Это напоминало Дикий Запад. Не было никаких курсов. Этому не учили».

Маргарет Гамильтон.
Wired

Но в 1959 году Гамильтон изменила своё решение и устроилась на работу в отдел метеорологии Массачусетского технологического института (MIT). Там она разрабатывала программное обеспечение для прогнозирования погоды на компьютерах LGP-30 и PDP-1. После этого Маргарет перешла в проект Semi-Automatic Ground Environment (SAGE) в лаборатории Линкольна MIT, где писала программы для прототипа компьютера AN/FSQ-7 (XD-1), который использовался ВВС США для поиска вражеских самолётов.

Маргарет Гамильтон в лаборатории Линкольна, MIT, 1962 год
Фото: личный архив Маргарет Гамильтон

«Новичкам там давали программу, которую никто не понимал и не мог запустить. Человек, написавший её, сделал все комментарии на греческом и латыни. Так вот, я была первой, кто заставил эту программу работать».

Маргарет Гамильтон.
Apollo Guidance Computer History Project

Там же Гамильтон впервые заинтересовалась вопросами надёжности, тестирования и отладки программного обеспечения:

«Когда компьютер давал сбой во время выполнения твоей программы, это невозможно было скрыть. Мигали лампочки, звенели колокольчики, и все — и разработчики, и операторы — бежали выяснять, чья программа сломала систему».

Маргарет Гамильтон.
Computer History Museum

Довольно скоро она возглавила отдел разработки ПО в лаборатории приборов MIT. Тогда же Гамильтон решила придать своей работе легитимность, чтобы к программам относились серьёзно, а те, кто их пишет, пользовались должным уважением. Так появился термин «разработка ПО» (software engineering).

«Когда я впервые придумала этот термин, о нём ещё никто не слышал. Надо мной подшучивали из-за моих радикальных идей. Помню, один из самых уважаемых гуру в области аппаратного обеспечения объяснил всем на собрании, что он согласен со мной в том, что процесс создания программного обеспечения также должен считаться инженерной дисциплиной. Сам новый „термин“ ему не очень понравился, но он считал, что мы заслужили признание как представители самостоятельной инженерной области».

Маргарет Гамильтон.
Snyder, Lawrence and Henry, Ray Laura, «Fluency with Information Technology»

Бортовое ПО «Аполлона» и маленькие старушки

В начале программы «Аполлон» бортового ПО, необходимого для высадки на Луну, не существовало в принципе. Готовых специалистов, знавших, как его создать, тоже не было.

«В первоначальном документе, содержавшем инженерные требования к миссии „Аполлон“, слово „программное обеспечение“ даже не упоминалось. Его не было ни в плане, ни в бюджете».

Дэвид Минделл.
сор аэронавтики MIT. Wired

Фрагмент исходного кода для бортового компьютера «Аполлона»
Фото: личный архив Маргарет Гамильтон

Но вскоре стало очевидно, что именно программное обеспечение играет чуть ли не центральную роль в выполнении лунной миссии. Представители NASА связались с Маргарет Гамильтон и предложили ей возглавить отдел разработки. Понимая, что такой шанс выпадает раз в жизни, она отложила написание диссертации по абстрактной математике и погрузилась с головой в космос.

«Руководству и специалистам, далёким от разработки, казалось, что программы как по волшебству появляются в бортовом компьютере, уже готовые к работе».

Маргарет Гамильтон.
Futurism

Гамильтон возглавила группу молодых программистов, которым в среднем было около 20 лет. Перед ними стояла задача с нуля разработать и интегрировать всё бортовое программное обеспечение для командного и лунного модулей, а также системное ПО, используемое в обоих модулях.

Маргарет с сотрудниками наблюдают за миссией «Аполлона-8»
Фото: личный архив Маргарет Гамильтон

«Вначале мне поручили работу над алгоритмами, связанными с таблицами лунных ориентиров. Когда запустили беспилотный аппарат, ко мне прибежали коллеги и сказали, что таблицы оказались в перевёрнутом виде. Пока я не услышала, что аппарат успешно приземлился, думала, что у меня реальные проблемы».

Маргарет Гамильтон.
Apollo Guidance Computer History Project

Программирование в те годы отличалось от современного. Оно заключалось в проделывании отверстий в стопках перфокарт, которые за ночь обрабатывались партиями на гигантском компьютере Honeywell. Он моделировал работу посадочного аппарата «Аполлон». После этого код отправляли на ближайший завод, где опытные швеи, которых прозвали «маленькие старушки», продевали медные провода в магнитные кольца. Так выглядела память «Аполлона», она была буквально вмонтирована в эти кольца.

Маргарет Гамильтон с программой для бортового компьютера, 1969 год
Изображение: MIT Museum

В постоянной памяти системы хранилось более 12 000 «слов» — медных «верёвочек», переплетённых «маленькими старушками», а во временной, очищаемой памяти — 1024 «слова».

Память для бортового компьютера
Фото: Wikimedia Commons

«Это был первый случай, когда важный компьютер находился в космическом корабле и он играл важную роль в в выполнении миссии. Мы показали, что это возможно. И добились результата, имея невероятно малый объём памяти и очень низкую скорость вычислений».

Дон Эйлс.
Сотрудник лаборатории MIT. Wired

На борту «Аполлонов» находились две практически идентичные машины: одна — в лунном модуле «Орёл», который перемещался на поверхность Луны, другая — в командном модуле, в котором экипаж проводил большую часть полёта. Это были одни из первых компьютеров, в которых использовались интегральные схемы, а не транзисторы. И первая бортовая навигационная система, рассчитанная на управление человеком, но оснащённая технологией автопилота.

Исходный код бортового компьютера «Аполлона-11» можно изучить на GitHub. Предупреждаем: разобраться в нём будет сложно.

Некогда быть джуном

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

«Оглядываясь назад, можно сказать, что мы были самыми удачливыми людьми в мире. У нас не было другого выбора, кроме как быть первопроходцами, не было времени быть новичками».

Маргарет Гамильтон.
Apollo Guidance Computer History Project

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

«Программное обеспечение для полётов „Аполлона“, разработанное госпожой Гамильтон и её командой, было поистине новаторским. Концепции, созданные ими, стали основой для современной разработки ПО».

Шон О’Киф.
администратор NASA. NASA News

Бортовой компьютер для модулей корабля «Аполлон»
Фото: Wikimedia Commons

За несколько минут до посадки лунного модуля компьютер подал сигнал тревоги. Как позже выяснилось, Нил Армстронг поставил переключатель стыковочного радара в неправильное положение и компьютер стал получать информацию и со стыковочного радара, и с посадочного, что привело к перегрузке компьютера.

Благодаря уникальной асинхронной системе обработки данных программа смогла «понять», что ей не хватает мощности для выполнения всех функций. Она пропустила процесс обнаружения ошибок и сосредоточилась на задаче с наивысшим приоритетом — обеспечение посадки.

Маргарет Гамильтон в макете командного модуля «Аполлон-12», 1969 год
Изображение: NASA

«Меня интересовало, как сделать программное обеспечение миссии безопасным и надёжным. Я хотела внедрить дополнительные функции обнаружения и восстановления ошибок. Чтобы, если астронавт ошибался, система говорила: „Ты не можешь этого делать“. Но нам запретили увеличивать количество программ. <…> Нам говорили, что астронавты никогда не ошибутся, потому что их учили не делать ошибок».

Маргарет Гамильтон.
Apollo Guidance Computer History Project

Не бойтесь ошибаться

Разработки для программы «Аполлон» дали мощный толчок развитию индустрии ПО. На основе полученного в NASA опыта Маргарет впоследствии создала теорию систем и программного обеспечения, которая легла в основу разработанного Гамильтон универсального системного языка (USL). Он предназначен специально для проектирования сложных систем, включая ПО.

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

«Если традиционный подход к разработке программного обеспечения является корректирующим и проверяет ошибки на поздних этапах жизненного цикла, то философия USL, основанная на разработке „до факта“, является превентивной и не допускает ошибок с самого начала».

Маргарет Гамильтон, Уильям Хаклер.
Universal Systems Language: Lessons Learned from Apollo

Для внедрения и распространения своих наработок Гамильтон в 1976 году основала компанию Higher Order Software (HOS), где развивала идеи по предотвращению ошибок и развитию отказоустойчивости. А в 1986 году она создала компанию Hamilton Technologies, которая вплотную занимается USL и связанной с ним инструментом 001 Tool Suite.

За свои достижения и вклад как в освоение космоса, так и в программирование Маргарет Гамильтон получила множество почётных наград. Например, Президентскую медаль Свободы, которая считается одной из высших наград США для гражданских лиц. А своим примером она помогла многим женщинам решиться на карьеру в области программирования и достичь в ней успехов.

Тем, кто только входит в IT, Маргарет Гамильтон, посвятившая жизнь предотвращению ошибок, советует не бояться ошибиться.

«Не надо бояться говорить „я не знаю“, „я не понимаю“ или задавать „глупые“ вопросы, поскольку ни один вопрос не является глупым. Надо продолжать даже тогда, когда кажется, что это невозможно, даже когда так называемые эксперты говорят, что это невозможно; не бояться ошибаться, совершать и признавать ошибки, ведь только тот, кто осмеливается терпеть большие неудачи, может достичь больших успехов».

Маргарет Гамильтон.
Futurism

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована