Грейс Мюррей Хоппер

Грейс Мюррей Хоппер
Грейс Хоппер
Если есть кто-то в компьютерном мире вообще и в истории языков программирования в частности, кто не нуждается в представлении, — это, конечно, капитан Грейс Хоппер…

Слова, вынесенные в эпиграф, принадлежат Джин Сэммит, одной из известных ученых в области программирования, автору многих книг по истории программирования. Для зарубежных специалистов по информатике эти слова неудивительны, однако нашим читателям имя Грейс Хоппер малоизвестно. Более того, в некоторых переводах зарубежных книг по программированию ее фамилия (если она упоминалась) преподносилась читателю в мужском роде. (Исключение составляет прекрасный перевод книг “Software” и “Computer Languages”.)

Попытаемся восполнить указанный пробел и осветить некоторые стороны жизни и деятельности удивительной женщины-программиста.

Грейс Мюррей Хоппер родилась в Нью-Йорке 9 декабря 1906 года в семье страхового агента Уолтера Флетчера. С детства она увлекалась не куклами (что обычно для девочек), а различными механическими устройствами — “машинками”, как она их называла. В 1928 году она закончила с отличием колледж Вассара в Пугкигси и продолжила свое образование в Йельском университете. Здесь она в 1930 году получила степень магистра и в 1934 году — доктора философии по математике (опять же редкость для женщины). Затем, вернувшись в Вассар, она преподавала математику. В 1941 году Г. Хоппер прослушала несколько курсов в университете Нью-Йорка.

В декабре 1943 года, в самый разгар Второй мировой войны, она приняла присягу и в мае 1944 года поступила на службу в ВМФ США. Получив в июне 1944 года звание младшего лейтенанта, Г. Хоппер была включена в отдел ВМФ, который занимался разработкой программ для компьютера ASCC (Mark-1), детища Говарда Айкена.

Она вспоминает, что стала “третьим в мире программистом (наверно, первыми двумя она считала своих коллег — мичманов Роберта Кэмпбелла и Ричарда Блока. — А. Ч.) первого в мире большого цифрового компьютера”.

И далее продолжает: “В те дни мы не назывались программистами. Это слово еще не дошло до нас из Англии, мы были кодировщиками”. Однако самый маленький морской офицер (ее рост был 150 см и вес 47 кг) и ее коллеги-мичманы заложили в те годы фундамент здания с названием “программирование”. Г Хоппер доказала, чего она стоит как программист. Впоследствии она писала: “Я имела то преимущество, что изучала как технику, так и математику и знала, как работает машина от начала и до конца. Конечно же, я была счастлива. Заканчивая в 1928 году колледж, я и не подозревала, что в 1944 году появится компьютер”. Вместе с Говардом Айкеном она опубликовала первое описание компьютера “Марк-1″.

При работе на компьютере “Марк-I” Г. Хоппер и ее группой впервые были введены некоторые приемы, которые стали в дальнейшем широко использоваться в программистской практике. В частности, первыми инструментами, которые экономили труд программистов, были подпрограммы. Так вот, в августе 1944 года для “Марк-I” была написана первая подпрограмма для вычисления sin x. После нее последовали другие. “Мы стали писать подпрограммы”, — вспоминала Г. Хоппер, хотя термин “подпрограмма” был введен позже (Морис Уилкс в Англии. — А. Ч.).

И еще одно фундаментальное понятие техники программирования впервые ввели Г. Хоппер и ее группа — “отладка”. Причем случилось это при курьезных обстоятельствах. Жарким, летним днем 1945 года неожиданно произошла остановка компьютера “Марк-I”. Обнаружилась неисправность одного реле, контакты которого были заблокированы мотыльком, неизвестно каким образом туда попавшим. Вспоминает Г. Хоппер: “Когда к нам зашел офицер, чтобы узнать, чем мы занимаемся, мы ответили, что очищаем компьютер от насекомых (debuging). Термин “debuging” (отладка) с тех пор прижился и стал использоваться для обозначения поиска неисправностей в компьютере, особенно в программном обеспечении”.

В 1949 году Г. Хоппер перешла на работу старшим математиком во вновь образовавшуюся фирму Маучли — Эккерта (создателей электронного компьютера ENIAC), где приняла участие в разработке программных средств коммерческого компьютера UNIVAC-I. Фирма располагалась в помещении старой фабрики на севере Филадельфии. “Когда машина UNIVAC-I не работала, мы, бывало, говорили, что не мешало бы ее выбросить за забор, на У сторону, где была свалка, а самим махнуть на другую сторону — на кладбище”, — вспоминала те годы Г. Хоппер.

Для облегчения процесса составления программ на машинном языке вместо] записи команд в двоичной системе счисления (длинные серии единиц и нулей) в то время использовалась восьмеричная система счисления, запись в которой, как известно, в три раза короче двоичной, а взаимный переход oiJ одной к другой формален. “Все в фирме были убеждены, что единственный способ писать эффективные программы — это пользоваться восьмеричной системой”. Г Хоппер тоже освоила эту систему: научилась складывать, вычитать, умножать и делить в ней. Однако погружение в мир восьмеричной арифметики чуть было не стоило ей неприятностей в жизни, когда она подводила баланс своего банковского счета. (Выручил брат-банкир, напомнив ей, что банки все-таки работают с десятичной системой.) “Я столкнулась с проблемой жизни в двух мирах, — вспоминала Г. Хоппер, — вероятно, это было одной из причин, побудивших меня по возможности избавиться от! восьмеричных чисел”.

Надо заметить, что не одну Г. Хоппер занимала проблема облегчения труда программистов, работающих в машинных кодах. В 1949 году до ее прихода в фирму Джон Маучли создал систему под названием “Short Code”, которая являлась примитивным языком программирования высокого уровня. В ней программист записывал решаемую задачу в виде математических формул, а затем, используя таблицу перевода символ за символом, преобразовывал эти формулы в двухлитерные коды. В дальнейшем специальная программа компьютера превращала эти коды в двоичный машинный код. Система, разработанная Дж. Маучли, была по существу одним из первых примитивных интерпретаторов, т. е. в последующие годы одним из двух типов транслято-1 ра. Эта система оказала большое влияние на Г. Хоппер. “Short Code” был первым шагом к чему-то такому, что давало программисту возможность писать программы на языке, отличном от машинного”, — писала Г. Хоппер. Второй шаг предстояло сделать ей.

Немного отвлечемся и напомним читателю о двух типах трансляторов с позиций сегодняшнего дня. Первый тип, упоминаемый выше, — интерпрета-] тор в каждый момент времени транслирует строку за строкой программу, написанную на языке высокого уровня, в программу на машинном языке и одновременно ее выполняет. Второй тип — компилятор транслирует весь текст программы, написанной на языке высокого уровня, в машинный код в ходе одного непрерывного процесса. При этом создается полная программа в машинных кодах, которую затем можно выполнить без участия компилятора. Работа компилятора состоит из трех этапов: сначала текст программы создается при помощи редактора текстов или другой программы текстовой обработки, затем текст компилируется, наконец скомпилированная про-грамма выполняется. Разница между компилятором и интерпретатором аналогична разнице между переводчиком литературного произведения и пере-! водчиком устной речи.

Итак, в 1951 году Г. Хоппер создала первый компилятор и ею же был введен сам этот термин. Компилятор Г. Хоппер осуществлял функцию объединения в ходе трансляции производил организацию подпрограмм, выделение памяти компьютера, преобразование команд высокого уровня (в то время псевдокодов) в машинные команды. “Подпрограммы находятся в библиотеке (компьютера), а когда вы подбираете материал из библиотеки — это называется компиляцией” — так она объясняла происхождение введенного ею термина. Конечно, между компилятором, созданным Г. Хоппер, и сегодняшними сходство небольшое, но начало было положено. В 1952 году на одной из первых конференций Ассоциации компьютерной техники в Питтсбурге Г. Хоппер сделала доклад “The Education of a Computer”, посвященный компилирующим программам.

В этот период фирму Маучли — Эккерта поглотила компания Remington Rand (как это часто бывает, талантливые изобретатели оказались неумелыми коммерсантами). Но Маучли, Эккерт и Хоппер остались работать в новой компании.

Свой первый компилятор Г. Хоппер назвала А-0, затем по мере его расширения и улучшения в последующие годы появились его версии А-1, А-2, А-3 (две последние системы базировались на трехбуквенных псевдокодах для указания математических операций). В 1954 году группа под руководством Г. Хоппер разработала систему АТ-3, включающую язык программирования и компилятор, которая в дальнейшем получила название MATH-MATIC и продавалась компанией Remington Rand вместе с компьютером UNIVAC-I.

После удачного завершения работ по созданию MATH-MATIC Г. Хоппер и ее группа принялись за разработку нового языка и компилятора, который позволил бы пользователям программировать на языке, близком к обычному английскому. Они выбрали около 30 английских слов типа: add (сложить), compare (сравнить), transfer (переслать) и т. п., а затем разработали компилятор, который транслировал программы, написанные на этом языке, в машинный код.

Для адекватного распознания компилятором выбранных слов Г. Хоппер придумала способ, который сохранился в операторах будущих языков: каждое слово (название оператора) содержит неповторимую комбинацию из первой и третьей букв, поэтому компилятор при генерации машинного кода может игнорировать все остальные буквы в слове.

Создание “необычного” (по тем временам) языка и компилятора, который получил название В-0, было завершено в 1956 году. Необходимость появления подобной системы Г. Хоппер объясняла следующим образом: “Существует много различных людей, которым нужно решать разные задачи. Некоторые из них связаны с обработкой символов, другие — с обработкой слов, и им нужны языки другого типа, а не наши попытки превратить их всех в математиков”. Действительно, в дальнейшем язык с успехом использовался людьми, работающими в бизнесе, в конторах фирм и в правительственных Учреждениях. В 1958 году система В-0 поступила на рынок с новым названием FLOW-MATIC и компания, в которой трудилась Г. Хоппер, поменяла свое название на Sperry Rand Corp. В отличие от FORTRAN — языка для научных приложений, FLOW-MATIC был первым языком для задач обработки коммерческих данных. Он был проще FORTRAN, и опыт, приобретенный за годы работы с ним, привел к созданию универсального языка COBOL. Справедливости ради необходимо отметить, что и другие языки, но в меньшей степени, послужили основой COBOL: язык AIMACO, созданный в ведомстве ВВС США в 1958 году (в разработке этого языка принимала участие и группа Г. Хоппер), язык COMTRAN, созданный фирмой IBM в 1958 году, язык FACT, разработанный фирмой Honeywell (этот язык имел влияние на поздние версии COBOL).

Создание универсального, машинно-независимого языка высокого уровня для деловых применений и бизнеса стало очередной задачей, за разрешение которой в начале 1959 года взялась энергичная Грейс Хоппер. Она обратилась за поддержкой в Министерство обороны США, которое вскоре организовало конференцию по языкам программирования. Эта конференция, получившая в дальнейшем название КОДАСИЛ (CODASYLConference on Data Systems Language), организовала три группы по разработке нового универсального языка и Исполнительный комитет, осуществлявший контроль за разработкой. К осени 1959 года создание языка было завершено, и он получил имя COBOL (COBOLCommon Business Oriented Language). Одним из основных консультантов при создании языка была Грейс Мюррей Хоппер.

Курьезный случай (и в то же время неожиданная реклама COBOL) произошел с Г. Хоппер во время ее посещения компьютерного центра в Японии. Гостеприимные японцы никак не могли понять ее просьбу, пока она не обпатилась к операторам COBOL. “Move (переместить), — сказала она, показывая на себя, — goto (перейти к) отель “Осака”. После чего японцы сразу отвезли ее в гостиницу.

В 1967 году Хоппер вернулась на действительную службу в ВМФ и к 1980 году стала капитаном Управления вычислительной техники в Вашингтоне. В 1983 году она получила звание капитана первого ранга, а в ноябре 1985 года — звание контр-адмирала. В 1982—1986 годах она была старейшим действующим офицером американской армии. После отставки из армии в 1986 году она еще некоторое время работала консультантом фирмы DEC.

В начале января 1992 года из Америки пришло сообщение (Newsbytes News Network, January, 3, 1992): “Недалеко от Вашингтона в возрасте 85 лет после продолжительной болезни скончалась Грейс Мюррей Хоппер, одна из изобретателей языка COBOL”. Хоппер начала работать с компьютерами с конца 40-х годах. Она участвовала в работе над “Марк-I”. “Марк-П”, “Марк-Ш” и UNIVAC-I. Ее часто называли Мамой COBOL и Бабушкой COBOL…”

Заслуги Г. Хоппер в программировании оценены по достоинству. Более 40 университетов и колледжей присвоили ей различные звания. Г. Хоппер была обладательницей первой награды по информатике “Человек года”, присуждаемой Ассоциацией управления и обработки данных. На церемонии отставки в 1986 году в Бостоне на борту авианосца морской министр Джон Леман-младший представил адмирала Грейс Хоппер к правительственной награде. Через несколько лет после ее кончины, 6 сентября 1997 года был спущен на воду новый эсминец ВМФ США — он был назван “Хоппер” в честь контр-адмирала Грейс Мюррей Хоппер.

Автор одной из первых книг по проектированию компиляторов (1971 год) профессор Корнеллского университета Дэвид Грис, оценивая значимость работ Г. Хоппер, пишет, что в ее наследии имеются “наметки многих инструментов и способов в отношении компиляторов, которые в настоящее время считаются общепризнанными: библиотека подпрограмм, дополненная спецификациями, трансляция формул в их элементарные компоненты; первичные функции компилятора; подпрограммный интерфейс и относительная адресация; компонующий загрузчик и оптимизация текста программы”. И далее продолжает: “Она одной из первых поняла, что именно программные средства, а не аппаратные потребуют большего числа затрат. Она предвидела тот день, когда для математиков уже не будет необходимым знание системы команд компьютера… Хоппер предвосхитила символьную обработку и хорошо понимала, что произойдет даже в отношении искусственного интеллекта (хотя в то время этого термина еще не существовало. — А. Ч.), когда говорила: “В настоящее время задача состоит в том, чтобы в наиболее возможной степени заменить человеческий мозг на электронный цифровой компьютер”.