Текст книги "Архитекторы компьютерного мира"
Автор книги: Аркадий Частиков
сообщить о нарушении
Текущая страница: 18 (всего у книги 30 страниц)
Автор одной из первых книг по проектированию компиляторов (1971 год) профессор Корнеллского университета Дэвид Грис, оценивая значимость работ Г. Хоппер, пишет, что в ее наследии имеются "наметки многих инструментов и способов в отношении компиляторов, которые в настоящее время считаются общепризнанными: библиотека подпрограмм, дополненная спецификациями, трансляция формул в их элементарные компоненты; первичные функции компилятора; подпрограммный интерфейс и относительная адресация; компонующий загрузчик и оптимизация текста программы". И далее продолжает: "Она одной из первых поняла, что именно программные средства, а не аппаратные потребуют большего числа затрат. Она предвидела тот день, когда для математиков уже не будет необходимым знание системы команд компьютера… Хоппер предвосхитила символьную обработку и хорошо понимала, что произойдет даже в отношении искусственного интеллекта (хотя в то время этого термина еще не существовало. – А. Ч.), когда говорила: «В настоящее время задача состоит в том, чтобы в наиболее возможной степени заменить человеческий мозг на электронный цифровой компьютер».
Алексей Андреевич Ляпунов
Автор первых нотаций языков программирования
Имеется ряд способов описания строения алгоритмов: машины Тьюринга, продукция Поста, нормальные алгоритмы Маркова, рекурсии и т. п. Однако для интересов кибернетики эти способы неудобны. Общее стремление при разработке систем понятий в теории алгоритмов состоит в сведении числа элементарных актов к минимуму и к их максимальной стандартизации. Это значительно облегчает установление несуществования алгоритмов того или иного типа. В задачах из области кибернетики язык теории алгоритмов служит совсем другим целям. Его назначение в том, чтобы дать удобную форму описания алгоритмов, служащих для решения тех или иных задач.
А. А. Ляпунов
Алексей Андреевич Ляпунов
Диапазон научных интересов члена-корреспондента Академии наук Алексея Андреевича Ляпунова был необычайно широк, а сферы их приложения разнообразны. Основные направления его исследований – математическая логика, теория множеств, кибернетика, программирование, математическая лингвистика, машинный перевод. А. А. Ляпунову принадлежит разработка управляющих (кибернетических) систем, строгое определение которых было сформулировано им вместе с его учеником С. В. Яблонским. С 1954 по 1964 годы А. А. Ляпунов в Московском университете вел семинар по кибернетике, который объединял ученых и специалистов, работавших по данной проблеме, а также координировал их работу. С 1958 года под редакцией А. А. Ляпунова начал выходить периодический сборник «Проблемы кибернетики», в котором публиковались научные статьи отечественных ученых, посвященные кибернетическим исследованиям.
В июле 50-х годов А. А. Ляпунов разработал первые учебные курсы по программированию, а в 1952/53 учебном году он прочитал студентам МГУ первый курс под названием "Принцип программирования" (до появления АЛГОЛа).
В 1953 году он создал операторный метод, одну из первых в мире нотаций языков программирования – аппарат описания алгоритмов (язык логических схем).
Заслуги А. А. Ляпунова в области кибернетики и программирования настолько велики, что период с середины 50-х годов до середины 60-х годов XX века часто называют "ляпуновским" периодом.
Он родился в Москве 7 октября 1911 года. Его отец, Андрей Николаевич Ляпунов, получил математическое образование, он учился в Московском университете, а также в Гейдельберге и Геттингене. Затем отец Ляпунова работал в Путейском ведомстве, а после 1917 года был сотрудником Института биофизики Народного Комиссариата здравоохранения. Мать Алексея Андреевича Елена Васильевна Ляпунова была широко образованным человеком и посвятила свою жизнь воспитанию детей, которых в семье Ляпуновых было семь.
Семья Алексея Андреевича принадлежала к известному роду Ляпуновых, в котором были и знаменитые ученые (А. М. Ляпунов – выдающийся математик, М. В. Ляпунов – астроном, Б. М. Ляпунов – славист и др.), и известные деятели русской культуры (композитор С. М. Ляпунов). Ляпуновы имели родственные связи с семьями выдающихся русских ученых – И. М. Сеченова, А. Н. Крылова, П. Л. Капицы и др.
Общение с детских лет с высокообразованными людьми рано пробудило у Алексея Ляпунова интерес и к искусству, и к различным наукам. Его увлекали астрономия, минералогия, биология, архитектура и живопись.
В 1928 году А. А. Ляпунов закончил среднюю школу и поступил в Московский университет. В 30-х годах он был учеником и сотрудником известного физика академика П. П. Лазарева, а с 1932 года находился под влиянием академика Н. Н. Лузина, возглавлявшего в те годы Московскую математическую школу. Под руководством Н. Н. Лузина он получает первый математический результат в области дескриптивной теории множеств. Дескриптивная теория множеств становится и до конца жизни остается одним из основных направлений его научной деятельности. С 1934 по 1942 год А. А. Ляпунов был младшим, а затем старшим научным сотрудником Математического института им. В. А. Стеклова, где в 1939 году он защитил кандидатскую диссертацию на тему "Об униформизации аналитических дополнений".
Будучи сотрудником П. П. Лазарева, Алексей Ляпунов интересовался проблемами применения математических методов к естественным наукам. В 1938 году он опубликовал совместно с Ю. Я. Керкисом результаты статистической обработки генетических экспериментов. Инициаторами этой работы были академики Н. И. Вавилов и А. Н. Колмогоров. В предвоенные годы Алексей Андреевич занимается теорией вероятностей и ее приложениями. Из работ этого периода следует отметить опубликованное в 1942 году исследование "О выборе из конечного числа конкурирующих гипотез". Ценность этой работы была понята значительно позднее (в настоящее время она используется в математической статистике, вероятностных методах распознавания образов и т. д.), примерно в то же время (1939 год) он начинает свою педагогическую работу в качестве доцента Педагогического института.
В 1942 году А. А. Ляпунов призывается на военную службу и направляется в пехотное училище, которое заканчивает в 1943 году. С 1943 по 1945 год он в должности командира топографического взвода в артиллерии принимает участие в боях на 4-м Украинском, 3-м Белорусском и 1-м Прибалтийском фронтах.
Находясь на фронте, А. А. Ляпунов не прекращал математические исследования. Здесь он занимался вопросами, связанными с точностью артиллерийской стрельбы, и примечательно, что для их решения он широко привлекал аппарат математической статистики.
В марте 1945 года Алексей был отозван из действующей армии для преподавательской работы в Артиллерийской академии им. Ф. Э. Дзержинского, где проработал до 1952 года. Одновременно А. А. Ляпунов выполняет серьезные работы по математике, что позволило ему в 1949 году успешно защитить докторскую диссертацию.
В течение 1949–1951 годов А. А. Ляпунов работал в Геофизическом институте АН СССР, где проводил исследования по прогнозированию землетрясений и обработке гравитационных наблюдений. С 1951 года он работал в Математическом институте АН СССР им. В. А. Стеклова, а с 1953 года – в Институте прикладной математики, возглавляя в этих институтах работы по программированию. Он одним из первых оценил возможность цифровых машин для решения задач невычислительного характера. В Математическом институте А. А. Ляпунов организовал семинар, сразу привлекший к себе внимание, а с осени 1952 года он стал работать на механико-математическом факультете МГУ в качестве профессора кафедры вычислительной математики, где организовал семинар по программированию.
В 1953 году А. А. Ляпунов создает операторный метод в программировании, с которого ведет начало теоретическое программирование. В основе операторного метода лежит аппарат логических схем, который включает основные формализмы, описывающие алгоритмы. В рамках этого метода были определены:
→ программа;
→ процесс ее выполнения;
→ функция, реализуемая программой;
→ эквивалентность программ;
→ эквивалентные преобразования программ;
→ схема программы;
→ эквивалентность схем и их преобразования.
Аппарат (язык) логических схем программ, предложенный А. А. Ляпуновым, вырос из блок-схемного описания программы, применявшегося в то время в практике программирования. Блок-схемное описание предписывало перед программированием алгоритма деление его на части – блоки с установлением связей между ними. Однако понятие самого блока было расплывчатым, а поэтому и не могли быть четко описаны ни правила выделения блоков, ни правила соединения блоков в схему. Аппарат логических схем был с самого начала нацелен на устранение этих недостатков. Для него характерно предварительное и не зависящее от конкретного алгоритма выделение частей, из которых составляются алгоритмы программирования – это выделение осуществляется по признаку функциональной нагрузки, которую несет та или иная часть алгоритма. Так появились понятие оператора (термин "оператор" введен Ляпуновым), осуществляющего акт обработки информации, и понятие логического условия, которое осуществляет акт проверки информации, чтобы определить порядок выполнения операторов. Логическая схема, описывающая алгоритм, "представляет собой строку из операторов и логических условий, называемых членами схемы. После каждого логического условия начинается стрелка, оканчивающаяся либо перед одним из членов схемы, либо в конце строки".
Операторный метод лег в основу многих учебников и учебных пособий по программированию, выпущенных в 50-е годы. Особенно велика роль операторного метода в становлении программирования как науки.
Формальные определения программирования как науки были даны А. А. Ляпуновым в его статье "К алгебраической трактовке программирования", написанной позже. В ней он рассматривает формализмы программирования на "теоретико-множественной базе". Ляпунов связывает программирование с основными направлениями современной математики, в частности с позиций общей алгебры. В статье была заложена та идейная платформа, на которой основывались дальнейшие исследования, проводившиеся учениками Алексея Андреевича – Ю. И. Яновым, А. П. Ершовым, Н. А. Криницким, Р. И. Подловченко и др.
Необходимо также отметить, что с появлением операторного метода была сформулирована проблема автоматизации программирования и, в частности, задача построения программирующей программы (в современной терминологии – "транслятор"), т. е. такой программы, которая сама будет строить программы для различных алгоритмов. Как пишет Р. И. Подловченко, "эта задача определила направление исследований в программировании более чем на десятилетия вперед. Постановка ее принадлежит Алексею Андреевичу Ляпунову и сделана им в 1953 году".
Кроме того, А. А. Ляпунову принадлежит постановка задач невычислительного характера, таких как машинный перевод и ифовые задачи (шахматы, домино) и, что удивительно – эти задачи им были поставлены еще в 1953–1954 годах. Под его руководством в 1954 году впервые был осуществлен его ученицей О. С. Кулагиной машинный перевод с французского языка на русский.
Важным событием в научной жизни была организация А. А. Ляпуновым в 1956 году семинара по кибернетике в МГУ, который объединил ученых различных специальностей: математиков, экономистов, биологов, лингвистов, философов, а также инженеров и военных. Он просуществовал до 1964 года и сыграл большую роль в координации исследований и формировании новых направлений.
Во второй половине 50-х годов число оригинальных исследований по кибернетике в нашей стране стало так велико, что появилась необходимость в создании специализированных изданий по кибернетике. А. А. Ляпунов стал основателем серии сборников "Проблемы кибернетики" и главным редактором. Первый сборник серии вышел в свет в 1958 году. Под редакцией А. А. Ляпунова вышло почти 30 сборников "Проблемы кибернетики". Серия получила мировую известность – она регулярно переводилась на английский и немецкий языки.
В 1962 году по приглашению академика М. А. Лаврентьева А. А. Ляпунов переехал в Новосибирск и начал работать в Институте математики СО АН СССР, где с 1967 года заведовал отделом в отделении кибернетики. В Новосибирске он продолжал работать по дескриптивной теории множеств, по теоретическому программированию и развернул широкие исследования по математической биологии, в частности по таким ее проблемам, как моделирование экологических систем, популяционным явлениям, иерархичности управляющих систем в живой природе, проблемам классификации.
В 1964 году Алексей Андреевич Ляпунов был избран членом-корреспондентом Академии наук СССР.
Новосибирский период жизни А. А. Ляпунова в научном плане отмечен его работами философского характера, в частности осмыслением и развитием таких философских категорий, как материя, энергия и информация. Он приходит к убеждению, что "масса и энергия, с одной стороны, удовлетворяет закону сохранения, с другой – для них имеет место принцип заменяемости". Что же касается информации, то она обладает "совсем другими свойствами". Так, во-первых, по отношению к информации не имеет места закон сохранения, во-вторых, возможность размножения информации и невосстановимость утраченной являются ее характерными особенностями, в-третьих, "информация материальна, т. е. информация всегда нуждается в материальном носителе".
Эти философские концепции отражены в ряде его публикаций, а также представлены в виде тезисов доклада на Международном конгрессе по философии, который состоялся в Болгарии, в городе Варне, в 1973 году, но, к сожалению, без участия Алексея Андреевича.
Он скоропостижно скончался 23 июня 1973 года в Москве.
Заслуги Алексея Андреевича Ляпунова в области науки и воспитании научных кадров были отмечены многими правительственными наградами. В 1996 году одной из самых авторитетных организаций в области высоких технологий – IEEE Computer Society А. А. Ляпунов посмертно был удостоен медали "Computer Pioneer", как сказано: "For Soviet cybernetics and programming".
Джон БЭКУС
Создатель языка FORTRAN
Вероятно, здесь нет никого, кто не слышал бы о FORTRANe, и большинство из вас, вероятно, использовали его хотя бы однажды, или, по крайней мере, вы наблюдали за человеком, пишущим программу на FORTRANe, вероятно, большинству знакомо сокращение «БНФ», но не все знают, как оно расшифровывается, так вот, "Б" – от Бэкуса, а другие буквы определяются названием способа формальной записи, эти два вклада, по моему мнению, входят в число основных достижений в области вычислительной техники и оба принадлежат Джону Бэкусу.
Джин Сэммит
Джон Бэкус
17 октября 1977 года на ежегодной конференции ACM премия Алана Тьюринга была вручена человеку, который создал первый высокоуровневый язык программирования для научных и технических применений и о котором прекрасные слова произнесла председатель комитета по премиям – Джин Сэммит (эпиграф – фрагмент ее выступления). Более официально, премия была присуждена Джону Бэкусу"…за глубокий и важный вклад в создание практических систем программирования высокого уровня, в особенности за работы по FORTRAN и частые публикации формальных процедур для спецификации языков программирования".
Чтобы оценить гений Джона Бэкуса, нужно представить себе компьютерный мир в начале его развития – конец 40-х начало 50-х годов XX века. ENIAC – пример сложности раннего программирования: программа составлялась с помощью электрических соединений на коммутационном поле, и для ее установки требовалось от двух до трех дней. Затем появились компьютеры с хранимой в памяти программой – исчезла потребность в ее монтаже.
Однако труд программиста по написанию, вводу и отладке программ по– прежнему был нелегким. Сначала программы писались на машинном языке (в двоичном коде), потом – в восьмеричном. Далее для облегчения участи программистов были придуманы подпрограммы, а затем первые ассемблеры. Но эффективность программирования от этого существенно не повысилась. Если бы кто-то мог написать транслятор, который бы переводил команды высокого уровня в машинный код, причем этот код не отличался от ручного кода программиста – это было бы реальным достижением.
И вот появился Джон Бэкус. Он родился в Филадельфии 3 декабря 1924 года. Учился в Вашингтоне, затем осенью 1942 года поступил в университет Вирджинии на химический факультет. Однако вскоре был отчислен и в начале 1943 года пошел в армию. После службы в армии в мае 1946 года он оказался в Нью-Йорке, где поступил в радиотехническую школу. Преподаватель по ремонту теле– и радиоаппаратуры пробудил в нем интерес к математике и убедил его продолжить учебу в Колумбийском университете.
Джону Бэкусу было 25 лет, когда он, получив степень магистра математики в Колумбийском университете, по приглашению Рекса Сибера – одного из изобретателей машины SSEC (Selective Sequence Electronic Calculator), поступил на работу программистом в фирму IBM. Это случилось в 1950 году.
Бэкус ничего не знал о компьютерах, когда пришел в фирму IBM, но проработав на SSEC около года, возглавил небольшую группу программистов, которая разработала интерпретатор Speedcoding для компьютера IBM 701. Затем он работал в составе группы по созданию преемника компьютера IBM 701 – компьютера IBM 704.
Koмпьютер IBM 701
В декабре 1953 года Джон Бэкус, неоднократно заявлявший, что «всегда был лентяем», обратился к своему шефу Кутберту Хэрду с предложением разработать практический язык программирования высокого уровня и компилятор для машины IBM 704. Ответ был восторженным и предложению Бэкуса был дан зеленый свет.
Местом рождения FORTRAN стала штаб-квартира фирмы IBM на Мэдисон-авеню в Нью-Йорке – в офисе на 19 этаже, где расположилась группа Бэкуса. Сначала с Бэкусом работал только Ирвинг Циллер, потом присоединился Харлан Геррик с полудюжиной математиков и техников.
В принципе разработчики и не думали, что их язык программирования будет когда-либо использоваться на машинах, отличных от IBM 704, но они были уверены, что если они преуспеют, их работа будет иметь огромное воздействие на компьютерный мир.
Итак, работа началась. Сначала они выделили основные понятия языка, в частности оператор присваивания, задававший переменным определенное значение, затем они ввели индексируемые переменные и очень важный оператор цикла – DO. Как говорил Бэкус, большинство пользователей "считали, что основной вклад FORTRAN – это возможность иметь программы в виде алгебраических формул, но на самом деле это не так". По мнению Бэкуса, "что делал FORTRAN в первую очередь, так это автоматизировал организацию циклов" – свойство, незаменимое в научных приложениях.
Работа в целом над проектом и, в частности, над языком шла быстро. Когда кто-то спрашивал разработчиков, через какое время он будет закончен, они всегда отвечали, что через шесть месяцев. Ученые действительно полагали, что это будет так. Но фактически потребовалось три года.
Критической проблемой для Бэкуса и его группы стала не разработка языка, а разработка компилятора. Создать эффективный надежный компилятор FORTRAN оказалось более трудной задачей, чем предполагалось. Группе пришлось иметь дело со вводом, выводом, циклами и многими другими запутанными вещами, необходимыми для преобразования команд, написанных на языке высокого уровня, в машинный код. Из трех лет, затраченных на разработку проекта в целом, более двух лет заняла работа над компилятором. Если первое сообщение о создании языка группа сделала в 1954 году, то о разработке компилятора – только в апреле 1957 года. Кстати, о названии. Бэкус придумал несколько банальных названий, но каждый раз они не устраивали коллег. Но однажды он предложил FORTRAN (FORmula TRANSlation). Реакция была аналогичной, но это название было принято из-за отсутствия лучшего.
Пользователи признали FORTRAN очень неохотно. Как вспоминает Бэкус, программисты "весьма скептически воспринимали все наши заявки". Однако в дальнейшем многие поняли его простоту в обучении и использовании и он стал незаменимым языком для научных и инженерных приложений.
Питер Наур
Даже в середине 80-х годов XX века Джон Бэкус испытывал чувство гордости от долговечности FORTRAN: «FORTRAN существовал в течение тридцати лет. Какой компьютер просуществовал более пяти лет?»
В числе своих главных достижений в течение первых десяти лет исследований (от 1950 года и до 1969 года) главными Бэкус считал два: создание и развитие FORTRAN и применение для описания ALGOL способа формальной записи – БНФ (Бэкуса Нормальная Форма). Позднее аббревиатуру БНФ стали расшифровывать как "Бэкуса – Наура Форма", отмечая заслуги датского программиста Питера Наура в развитии языка ALGOL.
В дальнейшие годы Джон Бэкус принимал участие во многих различных проектах, проводимых Исследовательской лабораторией фирмы IBM в Сан-Хосе, Калифорния. В 70-е годы он разработал функциональный стиль программирования, основанный на использовании комбинированных форм для создания программ. Этот стиль включает типы данных для функционального программирования, алгебраические преобразования программ и оптимизацию. Совместно с Джоном Уильямсом и Эдвардом Уимерсом он разработал новый язык программирования FL. Это универсальный язык, поддерживающий общие файлы ввода-вывода и интерактивные программы. В языке особое внимание уделено точному семантическому описанию и обработке абстрактных типов данных. Также вместе со своими сотрудниками Бэкус разработал оптимизирующий компилятор, использующий алгебраические преобразования.
Кроме премии Алана Тьюринга, о которой было сказано выше, Джон Бэкус в 1976 году был награжден Национальной медалью за вклад в науку.
Как пишет Лесли Гофф: "Иногда стимулом к изобретению становится не полет творческой мысли и не необходимость, а желание отдохнуть от нудной и тяжелой работы. Джон Бэкус убежден, что именно это заставило его разработать язык, в значительной мере автоматизирующий работу программиста".