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

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


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

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

Читайте также:

  • Девушки и ЭВМ: великолепная восьмёрка
  • Ада Лавлейс, Грейс Хоппер и ещё 7 женщин, которые создали это ваше IT
  • Зал славы интернета: ещё 7 пионеров Глобальной сети

LGP-30 (Librascope General Purpose, позднее Librascope General Precision) — один из первых настольных компьютеров, выпущен в 1956 году.

PDP-1 (Programmed Data Processor-1) — первый компьютер из серии PDP, произведённый Digital Equipment Corporation в 1960 году. 18-битная машина, на которой была разработана одна из первых компьютерных игр — «Spacewar!».

AN/FSQ-7 (от Army-Navy / Fixed Special eQuipment) — компьютеризированная система управления и контроля ПВО ВВС США.
Компоненты AN/FSQ-7 широко использовались в качестве реквизита в многочисленных фильмах и телесериалах, где требовались компьютеры футуристического вида: «Бегство Логана», «День независимости» и других.

Компьютер компании Honeywell. Модель H-800 была выпущена в 1958 году. Она входила в семейство компьютеров с 48-разрядным словом и трёхадресным форматом инструкций.

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

В вычислительной технике слово — это единица данных, которая выбрана естественной для данной архитектуры процессора. Другими словами, это фрагмент данных фиксированного размера, который обрабатывается как единое целое с помощью набора команд или аппаратного обеспечения процессора.


Источник: skillbox.ru

Комментарии: