Опубликовано в «Компьютерре» №32 от 20.08.2002 г.
6 августа скончался профессор Дейкстра, выдающийся теоретик компьютерного программирования.
Эдсгер Вайб Дейкстра родился в 1930 году в Роттердаме в семье ученых. Окончил Эразмовскую гимназию, Университет Лейдена и Университет Амстердама. Работал программистом в Математическом центре Амстердама и преподавал математику в Университете Eindhoven, выполнял исследования для корпорации Барроуз. Лауреат Тьюринговской премии 1972 г. С 1973 по 1999 гг. возглавлял кафедру информатики Университета Техаса в Остине.
На протяжении своей академической карьеры Дейкстра обращался к самым разным темам в теории и практики информатики: от конструирования языков программирования до синхронизации системных процессов. Даже из ранних его работ многие остаются основой учебных курсов, и сегодня читаемых в университетах разных стран.
Дейкстре приписывают роль экзорциста, изгнавшего из теории правильных вычислений демона абстракции исполнения и распространившего на компьютерное программирование системные методологические представления.
Отказ от абстракции исполнения означает, что мы, грубо говоря, перестаем водить по тексту программы пальцем, соображая, как она будет исполнена, имитируя этот процесс, а рассматриваем ее запись как структуру, свойства которой могут исследоваться и доказываться формально. (Отсюда наиболее часто употребляемое название этого подхода «структурное программирование» - перевод structured programming как «структурированное программирование» кажется мне не слишком удачным).
Это очень вежливое и лестное утверждение (и весьма скромное, если учесть, что на Дейкстру «валят вину» за это даже ближайшие его сотрудники), но исторически точным его назвать трудно.
И дело не в том, что «Соображениям о более развитом программировании» Дейкстры и последовавшей за ним «дискуссии об операторе GOTO» (1968-70 гг.) сопутствовали не менее жаркие баталии вокруг чуть ранее высказанных в сообществе логических программистов тезисов Дж. Маккарти («Нужно не испытывать программы до тех пор, пока они не окажутся отлаженными, а доказывать, что они имеют желаемые свойства»). И даже не в том, что в ретроспективе «абстракция исполнения» кажется не столь важным моментом (в том же логическом программировании она, по-видимому, никогда не играла такой роли, как в процедурном). По большому счету никто серьезно и не сомневался в том, что коль скоро компьютер - это релейная машина, ничего такого, что нельзя было бы описать в терминах алгебры Буля (исчисления элементарных высказываний), на нем не напрограммируешь.
Заслуга Дейкстры, на мой взгляд, может быть названа в высоком смысле слова педагогической: он показал, как программа на языке, весьма приближенном к «естественным» для программиста, становится математическим объектом, и что из этого следует.
На мой взгляд, именно педагогическая (и эстетическая: «Я задумал изложить некоторое количество изящных алгоритмов таким способом, чтобы читатель смог прочувствовать их красоту») постановка вопроса, ориентация на демонстрацию и заставили его найти те красивые формализмы, которые вошли в «Дисциплину программирования» и mutatis mutandis 1 в теоретическое программирование, каким мы его знаем. В предисловии к своему фундаментальному труду он делится с нами радостью открытия:
«Неожиданность состояла в том, что так называемые «преобразователи предикатов», выбранные мною в качестве средства изъяснения, позволили прямо определять связь между начальным и конечным состояниями без каких-либо ссылок на промежуточные состояния, которые могут возникать во время выполнения программы. Я обрадовался тому, что это позволяет провести четкое разграничение двух основных проблематик программирования: проблематики математической корректности… и инженерной проблематики эффективности.
Пожалуй, самое полезное открытие состоит в том, что один и тот же текст программы допускает две (в известном смысле дополняющие друг друга) интерпретации. Интерпретация в виде кода преобразователей предикатов, которая представляется более подходящей для нас, противостоит интерпретации в виде кода для выполнения - ее я предпочитаю оставлять машинам!»
Дейкстрианской революции в программировании как профессии (пока) не произошло. Практика программирования во многом остается искусством - искусством отладки и тестирования. Однако на эволюцию программирования подход, продемонстрированный Дейкстрой, оказал такое огромное влияние, что его очень просто и не заметить. Как не замечаем мы картины мира Коперника, «сквозь» которую смотрим на звездное небо.
Более тысячи трехсот (!) работ (около восьми тысяч страниц) покойного профессора в электронной форме благодаря усилиям его коллег доступны сегодня на сайте кафедры информатики Университета Техаса (www.cs.utexas.edu/users/EWD). По-русски публиковалась самая известная монография Дейкстры «Дисциплина программирования» (М.: «Мир», 1976), их совместная с У. Далом и К. Хоором книга «Структурное программирование» (М.: «Мир», 1975) и ряд статей. В том же издательстве «Мир» в 1984 году вышел перевод учебника «Наука программирования», написанного одним из самых горячих приверженцев подхода Дейкстры Д. Грисом. Для знакомства не обладающих опытом профессионального программирования студентов с идеями великого теоретика этот труд подходит даже больше, чем оригинальная монография.
1 (обратно к тексту) - лат. - внеся необходимые изменения.