
7 октября MIT объявил о смерти в возрасте 90 лет легендарной программистки Маргарет Гамильтон. В историю она вошла как руководительница команды MIT, разработавшей бортовое программное обеспечение для Apollo, но для истории программирования ее значение гораздо шире: именно вокруг таких работ постепенно сформировалось представление о software engineering как об отдельной инженерной дисциплине.
Дочь философа и поэта, Гамильтон всегда тянулась к точным наукам. В 1965 году он пришла в Instrumentation Laboratory MIT, которой NASA заказала разработку системы управления Apollo. Это был странный момент для профессии, которой еще фактически не существовало. Аппарат уже имел двигатели, радары, гироскопы и вычислительную машину, а вот представление о программном обеспечении как о самостоятельной инженерной системе только формировалось.
Маргарет возглавила разработку бортового ПО для командного и лунного модулей. К 1968 году она отвечала за команду Command and Service Module, а над программным обеспечением Apollo работали уже сотни человек.
Главная заслуга Гамильтон была в создании архитектуры поведения системы при ошибке. Apollo Guidance Computer имел ничтожные по нынешним меркам вычислительные ресурсы, поэтому программа должна была очень жестко решать, какие задачи выполнять прямо сейчас, какие отложить, а какие можно отбросить. Гамильтон и ее команда использовали приоритетное планирование: при перегрузке компьютер мог отказаться от второстепенных операций и продолжить выполнять критические задачи управления. Это сегодня звучит как обычная инженерная практика, но тогда подобный подход был частью совершенно новой культуры разработки.
И именно этот момент оказался критическим для успеха миссии. За несколько минут до посадки Apollo 11 компьютер лунного модуля начал выдавать тревоги 1202. Система получала больше работы, чем могла обработать в обычном режиме: радар выдавал данные, которые не требовались для непосредственного управления посадкой, но потребляли вычислительные ресурсы. Вместо того чтобы просто «упасть», программа перераспределила приоритеты и продолжила выполнять необходимые задачи наведения. Центр управления получил возможность продолжить посадку. Через несколько минут Нил Армстронг посадил Eagle на Луну.
Еще показательнее история, которую называют «ошибкой Лорен». Четырехлетняя дочь Гамильтон во время работы с симулятором случайно запустила программу P01 в неподходящий момент, из-за чего симуляция завершилась с ошибкой. Гамильтон предложила изменить программное обеспечение, чтобы человеческая ошибка не могла привести к подобной ситуации во время настоящего полета. Ей сначала отказали: считалось, что хорошо подготовленные астронавты такую ошибку не совершат. Во время Apollo 8 Джим Ловелл действительно случайно запустил P01 в полете. После этого предложенные Гамильтон изменения были внесены в программу.
Вечная память!

Источник: habr.com