
Знайшов цікаву статтю про
Margaret Hamilton, яка нещодавно померла у віці 90 років.
Коли читаєш про підхід Margaret Hamilton до програмування Apollo, виникає дивне відчуття: багато з того, що вона робила в 1960-х, сьогодні виглядало б цілком буденно на code review. Програма не повинна просто виконувати happy path. Вона має передбачати failure, перевіряти припущення, розрізняти критичні й другорядні операції та мати визначену поведінку в unexpected states. Сучасні назви для цього — defensive programming, fault tolerance та error handling.
Під час посадки Apollo 11 комп'ютер зіткнувся з перевантаженням через потік даних від радара. Замість того щоб «зламатися», система скористалася priority scheduling: відкинула менш важливі задачі, залишивши ресурси для критичних операцій. Це хороший приклад graceful degradation — система втрачає частину функціональності, але продовжує виконувати те, заради чого вона існує. І це принципово інший підхід, ніж просто перевіряти вхідні дані й сподіватися, що runtime errors ніколи не стануться.
Не менш знайомим сучасному розробнику є її підхід до тестування. Hamilton цікавили не лише окремі компоненти, а й те, що відбувається на їхніх межах: чи одна частина системи правильно розуміє припущення іншої, що станеться при неочікуваній комбінації подій, чи можна відновитися після помилки. Сьогодні для цього ми маємо integration tests, interface contracts, failure scenarios і всілякі fault injection techniques. Назви змінилися, але проблема залишилася тією самою.
Тому спадщина Hamilton цікава не стільки як історія про «геніальних програмістів NASA», скільки як нагадування про одну досить фундаментальну річ у software engineering: failure — це частина нормальної роботи системи, а не виняткова подія, яку можна просто не враховувати. Хороший код описує не тільки те, що система робить, коли все працює, а й те, що вона робить, коли все починає йти шкереберть. І в цьому сенсі програмування Hamilton 1960-х напрочуд добре узгоджується з тим, як ми намагаємося писати надійне software сьогодні.