Margaret Hamilton: як software engineering отримала приклад космічного масштабу

Margaret Hamilton: як software engineering отримала приклад космічного масштабу

20 липня 1969 року, за лічені хвилини до посадки «Аполлона-11» на Місяць, бортовий комп’ютер почав видавати тривожні сигнали. Програмне забезпечення, яке кілька років писала команда під керівництвом Margaret Hamilton, самостійно визначило, які завдання критичні, відкинуло другорядні обчислення й дозволило посадковому модулю сісти. Цей епізод став найвідомішою демонстрацією того, що програмування — не ремесло «для допоміжного персоналу», а повноцінна інженерна дисципліна, за яку вона і ввела термін software engineering.

Нижче — біографія Margaret Hamilton, пояснення її ключових інженерних рішень простими словами, факти про місію «Аполлон» і розбір того, що саме вона створила після NASA.

Хто така Margaret Hamilton простими словами

Margaret Hamilton (дівоче прізвище — Хіфілд, народилася 17 серпня 1936 року в Паолі, штат Індіана, США) — американська математикиня та інженерка, яка очолювала розробку бортового програмного забезпечення для космічної програми «Аполлон» у Лабораторії приладобудування Массачусетського технологічного інституту (MIT). Саме вона запропонувала називати програмування інженерною дисципліною — software engineering, — і довела правоту цього підходу на практиці, де ціною помилки були людські життя.

Інженерка 1960-х поруч із високим стосом друкованого коду програми Аполлона

Якщо пояснювати зовсім просто: у 1960-х програми для космічного корабля вважалися другорядною частиною проєкту порівняно з ракетами й двигунами. Гамільтон наполягла, що програмний код потрібно проєктувати з тією ж строгістю, що й двигун: з перевірками, запасними сценаріями та передбаченням збоїв. Місячна посадка довела, що вона мала рацію.

Згодом вона заснувала власні компанії, розробила мову проєктування систем USL і 2016 року отримала Президентську медаль Свободи — найвищу цивільну нагороду США.

Ранні роки та шлях у програмування

Гамільтон вивчала математику в коледжі Ерлгем в Індіані, де 1958 року здобула ступінь бакалавра з математики з другорядною філософією. За її згадками, інтерес до абстрактного мислення їй привив батько — поет і філософ. Після коледжу вона нетривалий час викладала математику у середній школі, а потім переїхала з чоловіком до Бостона.

У 1960 році вона влаштувалася в MIT на тимчасову позицію в лабораторії Едварда Лоренца — того самого вченого, який пізніше сформулює «ефект метелика». Її завданням було писати програми для прогнозування погоди на комп’ютерах LGP-30 і PDP-1. Умови були екстремальними за сучасними мірками: мінімум пам’яті, жодних зручних інструментів розробки, код на машинному рівні.

Саме тут вона опанувала ключовий навичок, що визначив усю її кар’єру, — писати програми, які працюють у середовищі, де немає місця для помилок і немає можливості «перезавантажитися». Далі був проєкт SAGE у лабораторії Lincoln Laboratory: напівавтоматична система протиповітряної оборони, одна з перших у світі систем реального часу. Гамільтон писала для неї програми виявлення «неприязних» літаків і радарного трекінгу. Саме досвід SAGE і зробив її очевидним кандидатом, коли MIT почав шукати людей для космічної програми.

Програма «Аполлон» і Apollo Guidance Computer

У 1965 році Гамільтон очолила відділ програмного забезпечення в MIT Instrumentation Laboratory (сьогодні — Draper Laboratory), який відповідав за бортовий і наземний софт місій «Аполлон». Вона стала першою людиною, яку взагалі найняли програмувати Apollo Guidance Computer (AGC) — бортовий керувальний комп’ютер космічного корабля.

Бортовий керувальний комп'ютер Apollo Guidance Computer з панеллю індикаторів

Щоб уявити масштаб виклику, достатньо кількох фактів про AGC:

  • оперативної пам’яті в нього було близько 2 кілобайтів (змінюваної), а постійної — 72 кілобайти;
  • частота процесора — близько 2 мегагерц, що в мільйон разів скромніше за сучасний смартфон;
  • постійну пам’ять (rope memory) буквально «прошивали» вручну: робітниці протягали дроти крізь магнітні осердя, тому її жартома називали LOL memory — Little Old Ladies memory;
  • програму неможливо було оновити після старту: код мав бути бездоганним ще на землі.

Команда Гамільтон зросла з кількох осіб до приблизно сотні інженерів, а обсяг її відповідальності розширився на весь бортовий софт командного й місячного модулів. Знаменита фотографія 1969 року, де Гамільтон стоїть поруч із друкованим стосом коду заввишки з її зріст, — це якраз лістинг програми AGC.

Аварійні сигнали 1201 і 1202: як софт врятував посадку

Найвідоміший факт біографії Гамільтон пов’язаний із моментом, коли її архітектурні рішення пройшли вогняне випробування. Під час зниження «Аполлона-11» до місячної поверхні радар стикування, що не був потрібен у цій фазі, почав надсилати комп’ютеру потік помилкових даних. AGC отримував більше роботи, ніж міг обробити, і почав перезавантажуватися, виводячи коди 1201 і 1202.

Посадковий модуль на поверхні Місяця під час місії Аполлон

Саме тут спрацювала головна ідея Гамільтон — система асинхронних пріоритетів із механізмом error detection and recovery:

  • кожне завдання мало пріоритет, і програма-«диспетчер» (Executive) виконувала першочергово те, що критичне для польоту;
  • при перевантаженні комп’ютер відкидав низькопріоритетні обчислення, а не губив все одночасно;
  • після м’якого перезапуску система відновлювала роботу з того місця, де сталася помилка, не втрачаючи стану польоту.

Земля дала команду продовжувати посадку, оскільки інженери розуміли: попри сигнали тривоги, комп’ютер виконує найважливіші завдання. Армстронг і Олдрін сіли на Місяць, і про цей епізод у центрі керування польотами згадували як про приклад того, що добре спроєктоване програмне забезпечення може бути надійнішим за людину в критичну секунду.

Чому вона вигадала термін software engineering

На початку роботи над «Аполлоном» програмування не мало ані статусу інженерії, ані визнання: воно вважалося чимось середнім між мистецтвом і технічною рутиною, і його часто доручали жінкам саме через сприйняття як «низької» роботи. Гамільтон свідомо почала вживати словосполучення software engineering, щоб програмування сприймали як легітимну дисципліну нарівні з апаратною інженерією.

Спочатку це сприймали з іронією. Але аргумент виявився сильним: якщо софт керує ракетою, то його розробка повинна мати формальні вимоги, перевірки, документацію, аналіз відмов і відповідальність за результат — тобто всі атрибути інженерії. Згодом термін прижився, а конференція NATO 1968 року закріпила його в професійній мові. Сьогодні складно уявити, що це словосполучення колись звучало як провокація.

Практичний зміст підходу Гамільтон зводився до кількох принципів, які залишаються актуальними:

  • проєктувати з припущенням, що збої неминучі, і закладати відновлення після помилок у саму архітектуру;
  • розділяти завдання за пріоритетами, щоб система вмирала «красиво» — втрачаючи другорядне, а не головне;
  • перевіряти весь софт у цілому, а не лише окремі модулі, бо помилки народжуються на стиках;
  • документувати логіку так, щоб інша людина могла зрозуміти, чому прийнято саме таке рішення.

Після NASA: власні компанії та Universal Systems Language

Завершивши роботу над «Аполлоном» (вона також керувала софтом для станції Skylab і першої місії шатла), Гамільтон перейшла в приватний сектор і стала підприємицею. У 1976 році вона співзаснувала компанію Higher Order Software, де втілила свої ідеї про попередження помилок ще на етапі проєктування системи.

У 1986 році вона заснувала Hamilton Technologies, Inc., яка працює й досі. Її основний продукт — Universal Systems Language (USL) і інструментарій 001 Tool Suite, побудовані на концепції development before the fact: замість того щоб спочатку писати систему, а потім шукати в ній помилки, мова USL змушує формально описати систему так, щоб цілі категорії дефектів були неможливими в принципі. Це логічне продовження уроку «Аполлона»: найдешевша помилка — та, яку не дали зробити.

Окремо варто згадати про оточення її історії: Гамільтон керувала великою командою в епоху, коли жінок на керівних інженерних посадах практично не було, і часом брала маленьку дочку Лорен із собою в лабораторію на вихідних, де дівчинка «гралася» в тестування програм. Її шлях став одним із найцитованіших прикладів жінки в інженерії, хоча сама вона в інтерв’ю наголошувала насамперед на якості роботи, а не на символіці.

Визнання, нагороди та спадщина

Системне визнання прийшло до Гамільтон відносно пізно, але вагоме:

Літня жінка-науковиця з нагородою під час урочистої церемонії
  • 1986 — премія Augusta Ada Lovelace Award від Association for Women in Computing;
  • 2003 — NASA Exceptional Space Act Award із грошовою винагородою 37 200 доларів, найбільшою персональною в історії агентства на той момент;
  • 2009 — почесний докторат коледжу Ерлгем;
  • 2016 — Президентська медаль Свободи з рук Барака Обами, найвища цивільна нагорода США;
  • 2017 — Computer History Museum зробив її одним із лауреатів звання Museum Fellow; того ж року LEGO випустила її фігурку в наборі «Women of NASA».

Спадщина Гамільтон — це не лише код AGC, відкритий MIT і сьогодні доступний для вивчення. Це сама професія: мільйони людей, які називають себе software engineers, користуються категорією, яку вона ввела і обґрунтувала. Принципи пріоритетного планування, витримування збоїв (fault tolerance) і проєктування з розрахунку на помилку стали стандартом у критичних системах — від авіації до медичного обладнання та банківської інфраструктури.

Які уроки з підходу Гамільтон корисні сучасним розробникам

Хоча AGC і сучасний бекенд розділяють десятиліття, інженерна логіка Гамільтон переноситься дивовижно прямо. Кілька практичних висновків:

  • Визначайте, що в системі критичне, до аварії, а не під час неї. Якщо сервіс перевантажений, він повинен заздалегідь «знати», якими функціями можна пожертвувати.
  • Тестуйте систему в цілому. Гамільтон вимагала перевірок усього софту в зборі, бо в «Аполлоні» саме інтеграційні помилки виявлялися найнебезпечнішими — сьогодні це аргумент на користь інтеграційного та навантажувального тестування.
  • Проєктуйте відновлення, а не лише захист. Припущення «все буде добре» не працює ні в космосі, ні в продакшені.
  • Пишіть документацію про рішення, а не лише про код. Лістинги AGC читабельні через півстоліття саме тому, що команда пояснювала логіку.

Головна теза, яку довела Гамільтон космічним прикладом: надійність програмного забезпечення — це властивість архітектури та культури розробки, а не результат героїчного ловлення багів наприкінці проєкту.

Часті запитання про Margaret Hamilton

Що саме створила Margaret Hamilton?

Вона очолила розробку бортового програмного забезпечення Apollo Guidance Computer для місій «Аполлон» і Skylab, ввела термін software engineering, розробила архітектуру пріоритетного виконання з відновленням після помилок, а згодом створила Universal Systems Language і заснувала компанію Hamilton Technologies.

Як Margaret Hamilton врятувала «Аполлон-11»?

Особисто вона перебувала на Землі, але розроблена її командою система пріоритетів під час посадки автоматично відкинула другорядні обчислення після перевантаження комп’ютера помилковими даними радара. Завдяки цьому критичні функції керування спуском продовжили працювати, і місію не довелося переривати.

Хто придумав термін software engineering?

Гамільтон стала однією з перших, хто системно вживав і просував цей термін, щоб підняти статус програмування до повноцінної інженерної дисципліни. У широкий професійний вжиток термін увійшов після конференції NATO 1968 року.

Де зараз Margaret Hamilton?

Вона продовжує очолювати засновану нею компанію Hamilton Technologies у Кембриджі, штат Массачусетс, і розвивати Universal Systems Language для формального проєктування систем без помилок «з самого початку».

Олена готує біографічні та історичні матеріали про підприємців, винахідників, керівників і дослідників. Вона відтворює контекст подій, звіряє дати та факти за кількома джерелами й відокремлює документально підтверджені відомості від популярних легенд.

Додати коментар