Попытаемся восполнить указанный пробел и осветить некоторые стороны жизни и деятельности удивительной женщины-программиста.
Грейс Мюррей Хоппер родилась в Нью-Йорке 9 декабря 1906 года в семье страхового агента Уолтера Флетчера. С детства она увлекалась не куклами (что обычно для девочек), а различными механическими устройствами — "машинками", как она их называла. В 1928 году она закончила с отличием колледж Вассара в Пугкигси и продолжила свое образование в Йельском университете. Здесь она в 1930 году получила степень магистра и в 1934 году — доктора философии по математике (опять же редкость для женщины). Затем, вернувшись в Вассар, она преподавала математику. В 1941 году Г. Хоппер прослушала несколько курсов в университете Нью-Йорка.
В декабре 1943 года, в самый разгар Второй мировой войны, она приняла присягу и в мае 1944 года поступила на службу в ВМФ США. Получив в июне 1944 года звание младшего лейтенанта, Г. Хоппер была включена в отдел ВМФ, который занимался разработкой программ для компьютера ASCC (Mark-1), детища Говарда Айкена.
Она вспоминает, что стала "третьим в мире программистом (наверно, первыми двумя она считала своих коллег — мичманов Роберта Кэмпбелла и Ричарда Блока. — А. Ч.) первого в мире большого цифрового компьютера".
И далее продолжает: "В те дни мы не назывались программистами. Это слово еще не дошло до нас из Англии, мы были кодировщиками". Однако самый маленький морской офицер (ее рост был 150 см и вес 47 кг) и ее коллеги-мичманы заложили в те годы фундамент здания с названием "программирование". Г Хоппер доказала, чего она стоит как программист. Впоследствии она писала:
Капитан второго ранга Грейс Хоппер
"Я имела то преимущество, что изучала как технику, так и математику и знала, как работает машина от начала и до конца. Конечно же, я была счастлива. Заканчивая в 1928 году колледж, я и не подозревала, что в 1944 году появится компьютер".
Вместе с Говардом Айкеном она опубликовала первое описание компьютера "Марк-1".
При работе на компьютере "Марк-I" Г. Хоппер и ее группой впервые были введены некоторые приемы, которые стали в дальнейшем широко использоваться в программистской практике. В частности, первыми инструментами, которые экономили труд программистов, были подпрограммы. Так вот, в августе 1944 года для "Марк-I" была написана первая подпрограмма для вычисления sin х. После нее последовали другие. "Мы стали писать подпрограммы", — вспоминала Г. Хоппер, хотя термин "подпрограмма" был введен позже (Морис Уилкс в Англии. — А. Ч.).
И еще одно фундаментальное понятие техники программирования впервые ввели Г. Хоппер и ее группа — "отладка". Причем случилось это при курьезных обстоятельствах. Жарким летним днем 1945 года неожиданно произошла остановка компьютера "Марк-I". Обнаружилась неисправность одного реле, контакты которого были заблокированы мотыльком, неизвестно каким образом туда попавшим. Вспоминает Г. Хоппер: "Когда к нам зашел офицер, чтобы узнать, чем мы занимаемся, мы ответили, что очищаем компьютер от насекомых (debuging). Термин "debuging" (отладка) с тех пор прижился и стал использоваться для обозначения поиска неисправностей в компьютере, особенно в программном обеспечении".
В 1949 году Г. Хоппер перешла на работу старшим математиком во вновь образовавшуюся фирму Маучли — Эккерта (создателей электронного компьютера ENIAC), где приняла участие в разработке программных средств коммерческого компьютера UNIVAC–I. Фирма располагалась в помещении старой фабрики на севере Филадельфии. "Когда машина UNIVAC–I не работала, мы, бывало, говорили, что не мешало бы ее выбросить за забор, на ту сторону, где была свалка, а самим махнуть на другую сторону — на кладбище", — вспоминала те годы Г. Хоппер.
Для облегчения процесса составления программ на машинном языке вместо записи команд в двоичной системе счисления (длинные серии единиц и нулей) в то время использовалась восьмеричная система счисления, запись в которой, как известно, в три раза короче двоичной, а взаимный переход от одной к другой формален. "Все в фирме были убеждены, что единственный способ писать эффективные программы — это пользоваться восьмеричной системой". Г Хоппер тоже освоила эту систему: научилась складывать, вычитать, умножать и делить в ней. Однако погружение в мир восьмеричной арифметики чуть было не стоило ей неприятностей в жизни, когда она подводила баланс своего банковского счета. (Выручил брат-банкир, напомнив ей, что банки все-таки работают с десятичной системой.) "Я столкнулась с проблемой жизни в двух мирах, — вспоминала Г. Хоппер, — вероятно, это было одной из причин, побудивших меня по возможности избавиться от восьмеричных чисел".
Надо заметить, что не одну Г. Хоппер занимала проблема облегчения труда программистов, работающих в машинных кодах. В 1949 году до ее прихода в фирму Джон Маучли создал систему под названием "Short Code", которая являлась примитивным языком программирования высокого уровня. В ней программист записывал решаемую задачу в виде математических формул, а затем, используя таблицу перевода символ за символом, преобразовывал эти формулы в двухлитерные коды. В дальнейшем специальная программа компьютера превращала эти коды в двоичный машинный код. Система, разработанная Дж. Маучли, была по существу одним из первых примитивных интерпретаторов, т. е. в последующие годы одним из двух типов транслятора. Эта система оказала большое влияние на Г. Хоппер. "Short Code" был первым шагом к чему-то такому, что давало программисту возможность писать программы на языке, отличном от машинного", — писала Г. Хоппер. Второй шаг предстояло сделать ей.
Немного отвлечемся и напомним читателю о двух типах трансляторов с позиций сегодняшнего дня. Первый тип, упоминаемый выше, — интерпретатор в каждый момент времени транслирует строку за строкой программу, написанную на языке высокого уровня, в программу на машинном языке и одновременно ее выполняет. Второй тип — компилятор транслирует весь текст программы, написанной на языке высокого уровня, в машинный код в ходе одного непрерывного процесса. При этом создается полная программа в машинных кодах, которую затем можно выполнить без участия компилятора. Работа компилятора состоит из трех этапов: сначала текст программы создается при помощи редактора текстов или другой программы текстовой обработки, затем текст компилируется, наконец скомпилированная программа выполняется. Разница между компилятором и интерпретатором аналогична разнице между переводчиком литературного произведения и переводчиком устной речи.
Итак, в 1951 году Г. Хоппер создала первый компилятор и ею же был введен сам этот термин. Компилятор Г. Хоппер осуществлял функцию объединения и в ходе трансляции производил организацию подпрограмм, выделение памяти компьютера, преобразование команд высокого уровня (в то время псевдокодов) в машинные команды. "Подпрограммы находятся в библиотеке (компьютера), а когда вы подбираете материал из библиотеки — это называется компиляцией" — так она объясняла происхождение введенного ею термина. Конечно, между компилятором, созданным Г. Хоппер, и сегодняшними сходство небольшое, но начало было положено. В 1952 году на одной из первых конференций Ассоциации компьютерной техники в Питтсбурге Г. Хоппер сделала доклад "The Education of a Computer", посвященный компилирующим программам.
В этот период фирму Маучли — Эккерта поглотила компания Remington Rand (как это часто бывает, талантливые изобретатели оказались неумелыми коммерсантами). Но Маучли, Эккерт и Хоппер остались работать в новой компании.
Свой первый компилятор Г. Хоппер назвала А-0, затем по мере его расширения и улучшения в последующие годы появились его версии А-1, А-2, А-3 (две последние системы базировались на трехбуквенных псевдокодах для указания математических операций). В 1954 году группа под руководством Г. Хоппер разработала систему АТ-3, включающую язык программирования и компилятор, которая в дальнейшем получила название MATH-MATIC и продавалась компанией Remington Rand вместе с компьютером UNIVAC–I.