В примечании Е Лавлейс уточняет и развивает соображения Менабреа о возможности расчёта на аналитической машине функций вида: Y= a + bx , Y = A + BcosX. Здесь Лавлейс формулирует: "Многие лица, недостаточно знакомые с математикой, считают, что роль машины сводится к получению результатов в цифровой форме, а природа самой обработки данных должна быть арифметической и аналитической. Это заблуждение. Машина может обрабатывать и объединять цифровые величины точно так, как если бы они были буквами или любыми другими символами общего характера, и фактически она может выдать результаты в алгебраической форме" /2/. В этом же примечании Лавлейс впервые вводит понятие цикла операций, а также понятие цикла циклов.
В примечании F содержится, в частности, интересное замечание Лавлейс о возможностях аналитической машины получать решение такой задачи, которую из-за трудностей вычислений практически невозможно решить вручную. Здесь (устройство) машина рассматривается не как устройство, заменяющее человека, а как устройство, способное выполнять работу, превышающую практические возможности человека.
В заключительном примечании G дана программа вычисления чисел Бернулли, в которой Лавлейс продемонстрировала возможность программирования на аналитической машине.
Немалое значение для истории науки представляет вопрос: насколько точно и удачно Лавлейс реализовала свою идею – составление машинной программы для решения сравнительно сложной задачи? Проверить вручную подобную программу весьма затруднительно – желателен практический эксперимент на ЭВМ. Такой эксперимент был проведён в СССР в 1978 году на машине БЭСМ-6. Текст программы был закодирован на языке программирования Фортран в Дубне, отладка программы выявила одну ошибку и одну опечатку. И это вполне понятно, так как написать подобную работу без проверки на компьютере и без ошибок невозможно. Ещё один важный пункт – программа Лавлейс требует минимального количества перфокарт и обеспечивает экономию памяти.
Примечание G Интересно ещё и в другом отношении. Широкую известность получило высказанное Лавлейс мнение о принципиальных возможностях аналитической машины: ”Аналитическая машина не претендует на то, чтобы создавать что-то действительно новое. Машина может выполнить всё то, что мы умеем ей предписать. Она может следовать анализу. Но она не может предугадать какие-либо аналитические зависимости или истины. Функции машины заключаются в том, чтобы помочь нам получить то, с чем мы уже знакомы“ /2/.
Это высказывание сделано в конце девятнадцатого века, когда не было никаких компьютеров, но даже сегодня по этому вопросу мы остались на том же уровне: компьютеры выполняют написанные программы, но не создают ничего нового. Пока никто не смог создать ЭВМ и программное обеспечение для неё, которое обладало бы творческими возможностями. Однако широко распространились программы с "псевдоинтеллектом", но это результат лишь хорошо продуманного алгоритма.
5. ЗНАЧЕНИЕ РАБОТЫ АДЫ ЛАВЛЕЙС
Хотя Бэббидж написал свыше 70 книг и статей по различным вопросам, а также составил большое число неопубликованных описаний аналитической машины, полного и доступного описания и, главное, анализа возможностей машины для решения задач он так и не сделал. Бэббидж говорил, что слишком занят разработкой машины, чтобы уделять время её описанию.
Работа Лавлейс не только заполнила этот пробел, но и содержала глубокий анализ особенностей аналитической машины. Она настолько хорошо понимала его работу, что описала принцип действия аналитической машины с чёткостью, которой не ожидал сам Бэббидж. Он неоднократно повторял, что представления Лавлейс о его работе были яснее, чем его собственные.
Усвоив идеи Бэббиджа и обладая глубокими познаниями в математике, Лавлейс с большой энергией проповедует эти идеи, стремясь сделать их широко известными и понятными, стараясь заинтересовать учёных работами Бэббиджа. Она организовывает целую компанию по популяризации машины и достигает успехов: часть их "детища" была построена. Ада Лавлейс высказала ряд идей, получивших широкое применение только в настоящее время. Основной итог её работы – создание основ программирования на универсальных цифровых вычислительных машинах.
В память об Аде Лавлейс назван разработанный в 1980 году язык АДА – один универсальных языков программирования. Этот язык был широко распространён в США, и Министерство Обороны США даже утвердило название “Ада”, как имя единого языка программирования для американских вооруженных сил, а в дальнейшем и для всего НАТО.
6.ДЕЯНИЯ ГРЭЙС ХОППЕР
6.1. Грэйс Хопер
Грэйс Хоппер (Grace Hopper) родилась в 1906 году - на 91 год позже Ады. Ее карьера, хотя и нетипична для женщины, на первых порах не представляла ничего особенного - Вессарский колледж, степень доктора математики в Йельском университете в 28 лет, профессорская должность в Вассаре. Таланты умной девочки, казалось бы, раскрыылись, жизнь шла своим чередом, и ничто не предвещало бурных изменений.
Как и в случае с компанией Helwett Packard, для полной реализации потенциала Грэйспоторебоввалассь экстраоринарная ситуация. Ее создала Вторая мировая война. Грэйс, ужже тридцатисемилетняя дама-профессор, вступила в женскую добровольную организацию содействия ВМС США. Для того, чтобы кобразом изменить свою жизнь, человек должен иметь авантюрстическую жилку, и Грэйс обладала ей в полной мере. Однажды она так выразила свой основной жизненный принцип: "Если у вас возникла интересная идея, валяйте, делайте. Извиниться потом легче, чем заранее получить разрешение".
6.2. 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 году использовали эти принципы на практике. С точки зрения Грэйс, подпрограмами были сравнительно универсальные последовательности команд, которые моно было об'единять в более крупные блоки. Свои подпрограммы программисты хранили в блокнотах и при необходимости переписывали их друг у друга. При этом им приходилось каждый раз заново рассчитывать адреса переменных. Учитиывая, что текст записывался в кодах, а складывать программисты, как правило, не умеют, можно себе представить, как часто при переписыании возникали ошибки. Да и читать программы, даже снабжженные комментариями, оказывалось достаточно сложно.
6.3. От кодов к языку
Первая попытка облегчить участь программистов была сделана в 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, был одобрен для коммерческой реализации.