A Short History of IT: From Loom to Neural Networks

Pasha Veinik

EN | RU
A Short History of IT: From Loom to Neural Networks

Раздел 2.2. Интерлюдия «Цена ошибки»: Apollo vs Space Shuttle

драматическая пауза между рассказами о UNIX и базах данных. Здесь мы поговорим о жизни и смерти. В этом разделе мы столкнем лбами две философии разработки, каждая из которых спасла жизни астронавтов, но совершенно разными способами.

Раздел 2.2. Интерлюдия «Цена ошибки»: Apollo vs Space Shuttle

Это не просто история о ракетах. Это история о двух религиях программирования.

В обычной жизни цена программной ошибки — это раздражение. Если у вас завис Word, вы потеряете час работы. Если упал сервер Instagram, подростки не выложат фото. Если в банковском приложении баг, компания потеряет деньги, но вернет их страховкой.

В космосе цена ошибки — это смерть. Мгновенная и гарантированная. Когда вы летите со скоростью 28 000 км/ч в вакууме, перезагружать компьютер уже поздно.

История освоения космоса дала нам два диаметрально противоположных ответа на вопрос: «Как написать надежный код, если ставки максимально высоки?».

  1. Философия Apollo (1960-е): «Ошибки неизбежны. Человек ошибается, железо ломается. Система должна быть спроектирована так, чтобы проглатывать ошибки и выживать».
  2. Философия Shuttle (1980-е): «Ошибки недопустимы. Код должен быть математически совершенным. Мы не будем исправлять баги, мы будем доказывать, что их нет».

А. Маргарет Гамильтон и Apollo 11: Искусство выживания в хаосе

1. Контекст: Вязаная память

Чтобы понять подвиг программистов Apollo, нужно понять, на чем они работали. Бортовой компьютер AGC (Apollo Guidance Computer) был чудом миниатюризации 60-х.

  • Память: Около 72 КБ (килобайт!) постоянной памяти и 4 КБ оперативной.
  • Носитель: Это не были чипы. Это была Core Rope Memory — ферритовая память. Программы были буквально сшиты вручную. Женщины на ткацкой фабрике (которых называли «Little Old Ladies») продевали медные провода через крошечные магнитные кольца.
    • Провод прошел сквозь кольцо = 1.
    • Провод прошел мимо кольца = 0.
  • Исправление багов: Если вы нашли ошибку в коде, вы не могли нажать Ctrl+Z. Вам нужно было ждать месяцы, пока женщины переплетут физические провода в блоке памяти.

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

2. Сцена: Три минуты до Луны

20 июля 1969 года. Лунный модуль «Орел» отделился от командного модуля и начал спуск. На борту Нил Армстронг и Базз Олдрин. Они летят ногами вперед, иллюминаторами вниз, глядя на проносящиеся кратеры.

До поверхности 2000 метров. Топлива осталось критически мало — компьютер вел их в каменистую зону, и Армстронгу пришлось перехватить управление, чтобы найти ровную площадку. В этот момент перегрузки и стресса на крошечном дисплее загорается желтая аварийная лампа PROG и код: 1202.

Армстронг передает в ЦУП: «Give us a reading on the 1202 Program Alarm». В его голосе напряжение. Никто в модуле не знает, что это. Они тренировали сотни отказов, но этот код появлялся редко.

3. Человек, который сказал «GO»

В Центре управления полетами в Хьюстоне сидит Стив Бейлс, 26-летний инженер по навигации (GUIDO). У него есть примерно 15 секунд на решение.

  • Если это критический сбой памяти — нужно кричать ABORT.
  • Если они отменят посадку сейчас, взлетная ступень отстрелится, и они вернутся на орбиту. Миссия будет провалена. Кеннеди не выполнит обещание. Миллиарды долларов сгорят.
  • Если он разрешит посадку, а компьютер зависнет через 10 секунд — Армстронг и Олдрин разобьются.

Бейлс смотрит на своего помощника Джека Гармана, у которого под стеклом стола лежит шпаргалка со всеми кодами ошибок. Гарман шепчет: «Это переполнение исполнителя (Executive Overflow). Если оно не постоянно, мы можем лететь».

Бейлс нажимает кнопку микрофона и произносит историческое: «We're GO on that alarm!».

4. Техническая суть: Почему это случилось?

Виноват был не софт, а «железный» баг и ошибка в чек-листе астронавтов. Радар стыковки (Rendezvous Radar) нужен для того, чтобы найти корабль-матку на орбите при возвращении. При посадке он не нужен. Но чек-лист требовал оставить его переключатель в положении «AUTO». Из-за электрической наводки (неправильного заземления) радар начал сходить с ума. Он начал посылать процессору тысячи прерываний в секунду, требуя вычислить угол сближения с орбитальным модулем.

Компьютер AGC должен был управлять посадкой (считывать данные гироскопов, управлять тягой двигателя). Это сложная математика. А тут еще и радар кричит: «Посчитай меня!». Буфер задач переполнился. Процессор захлебнулся.

5. Гений Маргарет Гамильтон: Асинхронность

Почему компьютер не завис, как Windows с «Синим экраном смерти»? Потому что Маргарет Гамильтон, главный инженер софта Apollo, спроектировала операционную систему на основе Приоритетов.

В системе не было жесткого цикла. Был «Менеджер задач». Когда произошла ошибка 1202 (переполнение), ОС сделала следующее:

  1. Остановила все вычисления.
  2. Посмотрела на список задач в очереди.
  3. Увидела задачу «Обработка радара». Приоритет: Низкий.
  4. Увидела задачу «Управление тягой двигателя». Приоритет: Высокий.
  5. Она убила процесс радара, очистила память и перезапустила процесс двигателя.

Все это заняло доли секунды. Для Армстронга это выглядело как мигание экрана. Компьютер как бы говорил: «Я тут немного занят ерундой, сейчас сброшу лишнее и вернусь к управлению двигателем. Не волнуйся, мы не разобьемся».

Это называется Graceful Degradation (Изящная деградация). Система пожертвовала второстепенной функцией (радаром и обновлением цифр на экране), чтобы спасти главную функцию (жизнь экипажа).

Наследие: Сегодня так работает Netflix или Amazon. Если у них падает база данных с историей ваших просмотров, сайт не падает целиком. Он просто показывает вам главную страницу, но без надписи «Вам может понравиться».


Б. Харлан Миллс и Space Shuttle: Монастырь чистого кода

Прошло 12 лет. Технологии шагнули вперед. На смену капсулам пришел Space Shuttle. Это была совсем другая машина. И требовала она совсем другой философии.

1. Кирпич с крыльями: Почему человеку нельзя доверять

Аполлон был стабилен. Если отпустить ручку управления, он просто продолжал лететь по инерции. Шаттл — это аэродинамический кошмар. Это 100-тонный планер с маленькими крыльями, который не летит, а падает с орбиты на скорости 27 000 км/ч.

Он аэродинамически нестабилен. Чтобы удержать его нос по курсу, рули и закрылки должны совершать сотни микрокоррекций в секунду. Человек физически не может реагировать с такой скоростью. Шаттл — это первый корабль, построенный по принципу Fly-by-Wire (Электродистанционное управление). Между ручкой пилота и крыльями нет тросов. Ручка — это джойстик, который посылает сигнал компьютеру, а компьютер решает, как повернуть крыло.

Если компьютер зависнет хотя бы на 200 миллисекунд во время входа в атмосферу, Шаттл начнет кувыркаться, и его разорвет на части перегрузкой. Перезагрузка (как у Маргарет Гамильтон) здесь невозможна. Времени нет.

2. Монастырь IBM: Метод «Чистой комнаты»

Софт для Шаттла (систему PASS) писало подразделение IBM Federal Systems в Хьюстоне. Ими руководил Харлан Миллс.

Миллс был фанатиком дисциплины. Он считал, что программирование — это не творчество, а ветвь математики. Он посмотрел на то, как пишут код в Кремниевой долине (написал — запустил — упало — поправил), и назвал это «тыканьем пальцем в небо».

Он внедрил методологию Cleanroom Software Engineering:

  1. Запрет на запуск: Программистам запрещалось компилировать и запускать свой код. Вообще. Они не имели права видеть, как он работает.
  2. Спецификации: Прежде чем написать строчку кода, они писали сотни страниц спецификаций на псевдо-математическом языке.
  3. Доказательство: Они должны были логически доказать, что их код соответствует спецификации.
  4. Человеческий компилятор: Код проходил через изнурительные инспекции (Code Review). Команда из 4-5 человек собиралась в комнате и читала код вслух, строчка за строчкой, неделями. Они играли роль компьютера в голове.

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

3. Архитектура Паранойи: 4 + 1

Но даже идеальному коду нельзя доверять. Вдруг космический луч ударит в процессор и переключит бит? Вдруг в самом процессоре Intel есть брак?

Инженеры создали систему голосования. На Шаттле стояло 5 компьютеров (модифицированные IBM AP-101).

  • Четыре компьютера работали параллельно. Они выполняли один и тот же код IBM. 400 раз в секунду они сверялись друг с другом.
    • Сценарий: Компьютеры А, Б и В говорят: «Поднять нос на 5 градусов». Компьютер Г говорит: «Опустить нос».
    • Решение: Система «демократическим голосованием» решает, что Г сошел с ума. Компьютер Г отключается от управления. Экипаж видит желтую лампу.
  • Пятый компьютер (BFS - Backup Flight System): А что, если в коде IBM есть фундаментальная ошибка? Например, они неправильно поняли формулу гравитации? Тогда все 4 компьютера ошибутся одинаково и убьют корабль.
    • Для этого был пятый компьютер.
    • Его софт писала другая компания (Rockwell Collins).
    • Им было запрещено общаться с программистами IBM.
    • Они использовали другие компиляторы и другие алгоритмы.
    • В случае паники пилот мог нажать красную кнопку, и управление передавалось этому «запасному мозгу», который не имел ничего общего с основным.

4. Результат и Экономическая смерть

Система Шаттла считается вершиной программирования. В коде объемом 500 000 строк (на языке HAL/S) за всю историю полетов была найдена одна ошибка (и та в редком сценарии синхронизации, который никогда не случился в полете). Это уровень качества «Шесть сигм». Абсолютное совершенство.

Почему мы не пишем так сегодня? Потому что это экономически невозможно для бизнеса.

  • Стоимость разработки по методу IBM оценивалась в $1,000 за одну строку кода (в долларах 80-х это безумные деньги).
  • Изменение одной функции занимало год.

Представьте, что вы делаете стартап. Если вы будете писать приложение так, как писали для Шаттла, вы потратите $100 млн и выпустите продукт через 10 лет. Ваш конкурент выпустит «глючную» версию через месяц, захватит рынок и исправит баги патчами.

Индустрия сделала выбор: Мы отказались от Совершенства (Шаттл) в пользу Скорости и Устойчивости (Аполлон).

  • Мы знаем, что в Windows и iOS тысячи багов.
  • Но мы научились обновлять их через интернет.
  • Мы научились делать системы, которые перезагружаются за секунды.

Шаттл остался памятником эпохе, когда программисты были математиками, а код писали как священное писание — медленно, дорого и навека.