История кода, который отправил людей на Луну
easy

История кода, который отправил людей на Луну

В этом коде никто не может найти ошибку вот уже 50 лет

Представьте: пятидесятые годы XX века. Компьютеры есть только в университетах и госучреждениях. Это машины размером с комнату, которым требуется специальное охлаждение, а ещё они очень шумят. И пока мужчины работают над тем, чтобы компьютеры стали меньше и быстрее, программирование считается менее престижной работой, и им занимаются в основном женщины. Одна из них Маргарет Гамильтон — героиня этой истории.

Маргарет Гамильтон получает награду в музее Intrepid в Нью-Йорке 23 мая 2019 года. Фото — Erika Kapin Photography
Маргарет Гамильтон получает награду в музее Intrepid в Нью-Йорке 23 мая 2019 года. Фото — Erika Kapin Photography

Как в то время программировали и запускали код

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

Так обычно выглядела перфокарта с одной-двумя командами: в зависимости от того, где находятся отверстия, компьютер выполнял разные вычисления
Так обычно выглядела перфокарта с одной-двумя командами: в зависимости от того, где находятся отверстия, компьютер выполнял разные вычисления

Для запуска кода стопка перфокарт подавалась компьютерам, которые читали отверстия в картах и распознавали их как определённые команды. На запуск команд уходили часы. И хотя компьютеры были огромны, работали они медленно, а памяти было мало. Они могли обрабатывать лишь небольшое количество данных за раз. Если компьютер выдавал ошибку, всё приходилось начинать сначала. Поэтому нельзя было писать неэффективный код — нужна была предельная дотошность.

Так код переносили на перфокарты с помощью перфомашины, которая делала отверстия в картах в нужных местах
А так выглядел компьютер IBM 7090
А так выглядел компьютер IBM 7090

Массачусетский технологический институт: начало карьеры

В университете Маргарет Гамильтон получила степень по математике и после получения диплома планировала продолжить её изучение. Но жизнь сложилась иначе: Маргарет вышла замуж, переехала с мужем в Бостон, и там у них родилась дочь. Вскоре после этого Маргарет начала работать на метеорологическом факультете Массачусетского технологического института, расположенном в Кембридже — пригороде Бостона.

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

После этого Маргарет занималась программным обеспечением сначала для прогнозирования погоды, а затем для обнаружения потенциально недружественных самолётов, а также писала код для слежения за спутниками. Вскоре один из проектов Маргарет стали использовать в системе ПВО США, а её назначили ведущим разработчиком программного обеспечения для полётов космического корабля «Аполлон» в НАСА.

НАСА: разработка программ для полётов на Луну

В НАСА Маргарет Гамильтон возглавила команду разработчиков, которые писали и тестировали бортовое программное обеспечение для командного и лунного модуля «Аполлона» и будущей космической станции «Скайлэб». 

Работать часто приходилось по вечерам и в выходные, поэтому Маргарет брала с собой дочь Лорен. Однажды во время запуска компьютерного моделирования миссии «Аполлон-8» Лорен стала играть в астронавта и нажимать клавиши на панели управления, в результате чего программа зависла. Маргарет проанализировала ошибку и поняла, что Лорен случайно запустила программу, предназначенную для подготовки к взлёту, когда моделируемый космический корабль был уже в пути. Поскольку такая же ошибка могла возникнуть во время настоящей миссии, Маргарет исправила код.

Один из томов с исходным кодом программы для Аполлона 11
Один из томов с исходным кодом программы для Аполлона 11

Мы никогда не узнаем, что случилось бы, не возьми тогда Маргарет с собой дочь. Программное обеспечение было дописано и протестировано, все обнаруженные ошибки — исправлены, и в результате в 1969 году команда Нила Армстронга успешно высадилась на Луну. В этом коде до сих пор не обнаружено ни одной ошибки.

Легендарное фото: Маргарет стоит рядом с листами кодирования навигационного программного обеспечения для «Аполлона-11»
Легендарное фото: Маргарет стоит рядом с листами кодирования навигационного программного обеспечения для «Аполлона-11»

А вот фрагмент того самого кода, который написала Маргарет для управления космическим кораблём:

037752,000040:                                                                                                  #  ENTRY INITIALIZATION ROUTINE
037753,000041:                                                                                                  #   -----------------------------
037754,000042: 
037755,000043: 25,2000                                           BANK    25                                    
037756,000044: 25,2000                                           SETLOC  REENTRY                               
037757,000045: 25,2000                                           BANK                                          
037758,000046: 
037759,000047: 25,2000                                           COUNT*  $$/ENTRY                              
037760,000048: 25,2000  E7,1451                                  EBANK=  RTINIT                                
037761,000049: 
037762,000050: 25,2000     5060               EBENTRY           =       EBANK7                                
037763,000051: 25,2000     5057               EBAOG             EQUALS  EBANK6                                
037764,000052: 25,2000     5002               NTRYPRIO           EQUALS  PRIO20                                #  (SERVICER)
037765,000053: 25,2000     0102               CM/FLAGS           EQUALS  STATE      +6                         
037766,000054: 
037767,000055: 25,2000           77776        STARTENT           EXIT                                          #  MM = 63
037768,000056: 
037769,000057:                                                                                                  #  COME HERE FROM CM/POSE.  RESTARTED IN CM/POSE.
037770,000058: 25,2001           42113                           CS      ENTMASK                               #  INITIALIZE ALL SWITCHES TO ZERO
037771,000059:                                                                                                  #  EXCEPT LATSW, ENTRYDSP AND GONEPAST.
037772,000060:                                                                                                  #  GONEBY 112D BIT8 FLAG7, SELF INITIALIZING
037773,000061: 25,2002           00004                           INHINT                                        
037774,000062: 25,2003           70102                           MASK    CM/FLAGS                              
037775,000063:                                                                                                  #  ENTRYDSP = 92D B13
037776,000064:                                                                                                  #  GONEPAST=95D B10,     RELVELSW=96D B9
037777,000065:                                                                                                  #  EGSW = 97D B8         NOSWITCH = 98D B7
037778,000066:                                                                                                  #  HIND=99D B6           INRLSW=100D B5
037779,000067:                                                                                                  #  LATSW=101D B4         .05GSW=102D B3
037780,000068: 
037781,000069: 25,2004           62114                           AD      ENTRYSW                               #  SET ENTRYDSP, LATSW, GONEPAST.

Первый программный инженер в истории

Когда Маргарет начала работать, разработка программного обеспечения ещё не была отдельной сферой деятельности. Маргарет начала использовать термин «программная инженерия», чтобы отличать его от аппаратного обеспечения и других видов разработки. Так Маргарет Гамильтон стала первым программным инженером в истории. Область разработки ПО, какой мы её знаем сегодня, была создана программистом-самоучкой. У Маргарет не было инструкций, так что она написала их сама.

В 2003 году Маргарет получила премию НАСА за выдающиеся достижения в области космоса, а в 2016-м — Президентскую медаль свободы, высшую гражданскую награду в США.

В ответ на просьбу дать совет молодым людям, которые думают о карьере программиста, Маргарет ответила: «Не позволяйте страху мешать вам и не бойтесь говорить „Я не знаю” или „Я не понимаю“. Ни один вопрос не является глупым. И не всегда слушайте так называемых экспертов!»

Текст:

Инна Долога

Редактор:

Михаил Полянин

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Мария Дронова

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy