Mark-1 - воплощение Аналитической Машины
Итак, младший лейтенант Грэйс Хоппер была направлена в Гарвардский университет, где к тому времени был установлен компьютер Mark-1.
В создании Mark-1 приняли участие силы - ВМС США, заказавшие универсальную счетную машину для расчетов баллистических таблиц: фирма IBM, президент которой Томас Уотсон в патриотическом порыве финансировал военную разработку и предоставил производственные мощности для создания необходимых деталей; и математик Говард Эйкен. А в основу Mark-1 было положено оставленное Бэббиджем описание его Аналитической Машины.
Полученное "чудовище" достигало 17 м в длину и 2,5 м в высоту. Провода, которыми соединялись его 750 тыс. деталей имели суммарную длину более 800 км. Программа вводилась с перфоленты, а данные с перфокарт (не зря же, в конце концов, перфораторы составляли львиную долю продукции IBM). Компьютер имел электромеханическое реле и работал по тем временам очень быстро - 0,3 с у него уходило на сложение и вычитание двух чисел и 3 с на умножение.
Учитывая интерес Грэйс к двум смежным областям - геометрии и механике,- она была идеальным кандидатом на работу с компьютерами типа Mark-1, когда любой программист (такого термина тогда еще не существовало, а должность Грэйс называлась словом "кодировщик") одновременно блестяще разбирался в механическом содержимом громоздкой машины. "Интеллектуальным" обслуживанием машины, помимо профессора и младшего лейтенанта Грэйс Хоппер, занимались математики-мичманы Роберт Кэмпбел и Ричард Блок.
Существует легенда, что Грэйс принадлежит термин debugging (для программы - отладка; а буквально - изничтожение насекомых). История такова: однажды Mark-1 сломался из-за того, что в одном из реле покончил жизнь самоубийством крохотный мотылек (bug). Останки бедняги были аккуратно извлечены. Тогда-то якобы Грэйс впервые и употребила термин debugging, имея в виду ту самую работу, которой в данный момент была занята группа программистов, - очистку компьютера от насекомых. На самом деле слово bug в английском языке имело двойное значение (и насекомое, и техническая неисправность) задолго до Грэйс, так что мы имеем дело с очередным апокрифом компьютерного общества.
Но если Аде Лавлейс принадлежит право интеллектуальной собственности на циклы, то Грэйс и ее коллеги в 1944 году использовали эти принципы на практике. С точки зрения Грэйс, подпрограммами были сравнительно универсальные последовательности команд, которые можно было объединять в более крупные блоки. Свои подпрограммы программисты хранили в блокнотах и при необходимости переписывали их друг у друга. При этом им приходилось каждый раз заново рассчитывать адреса переменных. Учитывая, что текст записывался в кодах, а складывать программисты, как правило, не умеют, можно себе представить, как часто при переписывании возникали ошибки. Да и читать программы, даже снабженные комментариями, оказывалось достаточно сложно.
От кодов к языку.
Первая попытка облегчить участь программистов была сделана в 1948 году. Алан Тьюринг и Макс Нейман в Манчестере (Англия) вели работы по созданию компьютера, аналогичного американскому и, кстати, получившему то же название - Mark-1. Для него была создана так называемая система "сокращенного кодирования" - первый язык высокого уровня. Изначально задуманные 32 машинные команды - длинной пять байтов каждая - для удобства получали буквенные обозначения. Однако затем длина команд была увеличена до шести байтов, и в результате многие преимущества новой системы были сведены на нет: каждая команда обозначалась уже двумя символами, но для сокращения избыточности второй из них одновременно оказывался началом следующей команды. С помощью телетайпа производилось двоичное кодирование, и создавалась перфолента.
Следующим шагом было "короткое кодирование". У Джона Мочли, работающего над созданием компьютера UNIVAC, возникла идея научить компьютер воспринимать алгебраические уравнения в их традиционном виде. Затем специальная программа-интерпретатор переводила уравнение на язык нулей и единиц. В полной мере реализовать этот замысел не удалось, потому что знаки математических действий по-прежнему приходилось заменять на их численные коды. Интерпретаторы стали первой попыткой сделать компьютер более дружественным, но интерпретирующая программа пожирала и без того скудные ресурсы памяти и замедляла выполнение программ. Да и целесообразность интерпретации введенной с перфокарт программы выглядит, вообще, говоря, сомнительно.
Вот этот "интерпретатор" и навел Грэйс Хоппер (которая работала в фирме Джона Мочли) на мысль, что для общения человека с компьютером есть более приятный способ, чем кодирование. Однако нужно ли было такое "очеловечивание" компьютера? В какой-то момент Грэйс заметила, что программисты постепенно изолируют себя от остального человечества и начинают мыслить в тех же терминах, что и счетные машины. Толчком, как утверждают, послужили собственные проблемы Грэйс при подведении баланса ее банковского счета: по привычке она попыталась произвести сложение и вычитание в восьмеричной системе исчисления, и очень удивилась, когда ее итог не совпал с тем, что получилось у банка.
К 1952 году из "сокращенного кодирования" вырос первый компилятор - язык Autocod, созданный Алексом Гленном.
Хотя программисты, оберегая свое исключительное положение при вычислительной машине, всячески сопротивлялись распространению языков типа Autocod, фирмы-производители, пытавшиеся вывести компьютеры за пределы военных и университетских лабораторий, вкладывали в создание новых языков значительные средства.
Компания Raimington Rand, купившая права на UNIVAC, натолкнулась на нехватку "жрецов в белых халатах", свободно "чирикающих" на двоичном коде, поэтому процесс общения с машиной надо было облегчить и включить в поставку компьютера программное обеспечение. Возникла идея создания библиотеки подпрограмм, из которой программа-компоновщик (компилятор) выбирала бы необходимые блоки и автоматически устанавливала нужную адресацию. В 1951 г. Гhэйс Хоппер было поручено создать такую библиотеку. Несколько лет спустя, когда ею была реализована уже четвертая версия компилятора A (версия A-3), из маркетинговых соображений он был переименован в Math-Matic.
Пятидесятые годы были периодом активной разработки машинно-зависимых языков высокого уровня. В 1953 году вышли в свет два из них - Speedcoding фирмы IBM, который она разумно представила со своим новым компьютером IBM 701, и Vortex, созданный в Массачусетском институте. Vortex был первым языком, в котором символы вводились в их естественном виде. Он, однако, не был коммерческой разработкой и практически не распространился за пределы МТИ.
Основным признаком таких языков была краткость инструкций - пара символов либо цифровой код, так что по-прежнему для работы с машиной нужно было изучать "дельфиний" язык.
Использовать полноценные английские слова догадалась Грэйс Хоппер. Для того, чтобы облегчить компьютеру работу, в качестве базиса было принято, что все инструкции обладают значимыми первым и третьим символом. Остальные символы при анализе игнорировались. Грэйс, видя перспективность этого подхода к языкам программ, действовала на свой страх и риск. Когда в 1956 году компилятор B-0 был готов, ей оставалось извиниться за самоуправство и задним числом убедить начальника в перспективности нового подхода. Для пущей наглядности она преобразовала компилятор в трехъязычный, заставив его понимать инструкции на английском, французском и немецком языках. Этим она положила начало одному порочному направлению в программировании - переводу инструкций языка на программирования на национальные языки (забегая вперед, скажем, что впоследствии появились самые разнообразные версии языка Cobol - вплоть до китайской, где инструкции записывались с помощью иероглифов).
Как бы то ни было, после такой демонстрации цель - убедить начальство, что компьютер может понимать нормальные слова - была достигнута, и B-0, в миру Flow-Matic, был одобрен для коммерческой реализации.
Мама языка Cobol
К концу пятидесятых годов практически для каждой торговой марки, если не для серии, компьютера был создан свой язык высокого уровня. Компания Ramington Rand (к этому времени Sperry Rand) выпускала Flow-Matic; для IBM 704 уже существовал FORTRAN; ВВС США, в пику ВМС, на которые и работала Sperry Rand, создали AIMACO.
В 1959 году представители производителей компьютеров и научного мира провели совещание в Пенсильванском унивеститете (третьем оплоте информатики, после Гарварда и Массачусетса). На повестке дня стояло создание единого по синтаксису, гибкого, универсального языка для разработки бизнес-приложений. Однако если между собой не могли договориться даже отделения военного министерства, чего оставалось ждать от независимых производителей?
Грэйс Хоппер решила подтолкнуть их к заключению соглашения и нашла для такого языка заказчика - Министерство обороны США, с его "зоопарком компьютерной техники" (более 1000 компьютеров, полностью несовместимых между собой), крайне нуждалось в подобном средстве.
Министерство обороны организовало специальную конференцию - Conference on Data System Language (CODASYL), в которой участвовали IBM, Honeywell, General Electric, Sperry Rand и другие - в общем, все, кто расчитывал получить от Пентагона заказ на поставку компьютеров.
Группа программистов во главе с Грэйс достаточно быстро сформулировала основные положения языка COBOL (COmmon Business Oriental Language), основанного на Flow-Matic. Другие компании не пришли в восторг от идеи COBOL'a. IBM, имевшая в запасе FORTRAN и Commercial Translator, стремилась убедить аудиторию, что на создание нового языка нет времени. Honeywell пыталась сделать стандартом свое творение FACT. Но Грэйс не напрасно столько лет имела дело с ВМС США и знала, как убедить военное начальство...
Идея COBOL была проработана к осени 1959 года, а первые трансляторы от RCA и Sperry Rand поступили в продажу к зиме.
Что можно еще сказать о Грэйс Хоппер? В 1966 году, шестидесяти лет, она ушла на пенсию из Вспомогательной службы ВМС США, однако не прошло и года, как была вновь призвана для работы по стандартизации языков программирования. Окончательная отставка Грэйс последовала в 1986 году. В то время она имела чин адмирала ВМС США и была самой старшей среди служащих офицеров.