Рассказывать об этом человеке можно очень долго и много. Только список его работ занимает "увесистый" десятимегабайтовый pdf-файл. Можно перечислять научные регалии, звания и степени, бесконечно повторять набившие оскомину слова "неоценимый вклад" и "основоположник". Всего этого мы делать не будем. Хотя бы потому, что самые выспренние слова не заменят чтения монографий и коротких работ Дейкстры, насыщенных несвойственным компьютерному миру одновременно лукаво-озорным и академически-метким юмором. Так что вместо сухого перечня заслуг Дейкстры-профессора давайте познакомимся с Дейкстрой-человеком...
Эдсгер В. Дейкстра, родившийся 11 мая 1930 г., -- третий ребенок в большой по
сегодняшним меркам семье (четверо детей). Его отец, по словам самого Эдсгера,
"был великолепным химиком". Не надо пытаться объяснять столь сильный
эпитет, употребленный Э. В. Дейкстрой, сыновьими чувствами -- Дав Вайб Дейкстра
(Дейкстра-старший) успешно совмещал работу преподавателя химии в средней школе
с изобретательской и научной деятельностью и... с должностью Президента Датского
Химического Сообщества. В воспоминаниях Э. В. Дейкстры подчеркивалось, что глубокие
знания его отца в области химии и физики сочетались с блестящими преподавательскими
способностями, на которые повысился спрос в условиях "идеализма после Второй
мировой войны" (здесь и далее по тексту в кавычках приводятся цитаты из разных
работ и воспоминаний Дейкстры). Учитывая, что и мать Эдсгера была математиком
и обладала "не столь энциклопедическими знаниями, как отец, но исключительно
быстрым умом... и любовью к элегантным решениям", будущее Дейкстры-сына оказалось
предрешенным. И он сам собирался продлить семейную династию -- стать школьным
учителем.
|
Эдсгер Вайб Дейкстра
|
Но амбиции, свойственные юношескому возрасту, "загнали" Эдсгера в Роттердамский
университет -- на факультет права. Будущий автор таких "компьютерно-народных"
слов и фраз, как "структурное программирование" и "тестирование
программ может выявить наличие ошибок, но не может служить доказательством их
отсутствия", по окончании школы лелеял мечту... представлять Данию в Организации
Объединенных Наций. Правда, Провидение с юношеской мечтой поступило достаточно
жестко -- вступительные экзамены были успешно провалены, и Эдсгеру ничего другого
не оставалось, кроме поступления в Лейденский университет на факультет теоретической
физики. Сам Дейкстра-младший об этом выборе говорил так: "Более старшие и
мудрые советовали мне, что куда безопаснее основывать свой выбор на способностях,
чем на идеализме".
Университетские годы для Дейкстры, как и для всех жителей послевоенной Европы, были очень трудными -- "мы были крайне бедны, очень тяжело работали, никогда не высыпались и часто не ели вдоволь". Впрочем, такие трудности тогда людей уже не пугали. Постоянный подписчик журнала "Nature", Дейкстра-старший, "высмотрел" в нем рекламу трехнедельных курсов программирования в Кембридже (на которых изучалась ЭВМ EDSAC) и предложил Эдсгеру поучиться дополнительно. "Я счел это хорошей идеей, потому что собирался стать лучшим физиком-теоретиком, и чувствовал, что умение использовать электронные вычислители в достижении такой цели будет полезным", -- так об этом вспоминал Э. Дейкстра. Но еще до сентября 1951 г. (в первые три недели именно этого сентября должны были проводиться курсы) будущая не менее знаменитая в компьютинге личность -- ван Вингаарден (van Wijngaarden), прослышав о планах студента, пригласил его на работу в Математический Центр в Амстердаме. И с 1952 г. неудавшийся юрист и пока несостоявшийся физик-теоретик Дейкстра стал первым датчанином, получающим заработную плату по ведомости, в графе "профессия" которой стояло слово "программист".
Совершенно новая по тем временам область деятельности оказалась настолько интересной, что Э. Дейкстра был поставлен перед выбором между изучением теоретической физики или программирования. "Я выбрал последнее, и физика стала формальностью. После получения степени в 1956 г. я немедленно переехал из Лейдена в Амстердам и с этого момента работал только в Математическом Центре".
Посвятив немало лет своей научной жизни тому, чтобы прояснить
задачи программиста и сделать их более подвластными нашему интеллекту, я обнаружил
с удивлением (и раздражением), что мое стремление внести ясность приводит к систематическим
обвинениям в том, что я "внес в программирование трудности". Но эти
трудности всегда в нем были; и только сделав их видимыми, мы сможем надеяться,
что научимся разрабатывать программы с высокой степенью надежности, а не просто
"лепить команды", т. е. выдавать тексты, основанные на неубедительных
предположениях, несостоятельность которых выявится после первого же противоречащего
примера. |
В воспоминаниях Дейкстры проскальзывает бесценная информация о том, как реально
развивалась европейская академическая наука в те нелегкие послевоенные годы. Оказывается,
тогда совершенно нормальным явлением была работа двух студентов-физиков Муниципального
университета Амстердама над созданием... компьютера для Математического Центра.
Именно в команду из двух "конструкторов" и попадает Дейкстра. В момент
прихода Эдсгера в Центр новый компьютер был неработоспособным, но "они много
учились, в том числе и тому, что когда в ходе проектирования совершено слишком
много ошибок, лучше всего начинать все с начала". И первый датский программист
включается в проект создания "очередного компьютера". Скупые строчки
воспоминаний Дейкстры об этом этапе могли бы стать образцом для подражания многим
"последователям-самодельщикам" (будь то программисты или разработчики
аппаратных средств): "Без всяких обсуждений дисциплины проектирования, что
могло бы показаться ужасным сегодня, мы начали с того, что написали руководство
программиста будущего компьютера, включающее полное функциональное описание машины
(по ряду причин, этим занимался я один). Данный документ использовался как контрактное
соглашение между мной и командой: они знали, что они должны проектировать, я знал,
что должен писать". А теперь давайте удивимся -- группе из трех молодых людей,
работающих в совершенно новой области, меньше чем за год удалось создать действующую
вычислительную машину во времена, когда в помине не было никаких микропроцессоров,
микросхем и систем автоматизированного проектирования!
С одной стороны, математическая основа программирования очень
проста. Конечная последовательность нулей и единиц подвергается конечному числу
простых операций, и в некотором смысле программирование должно быть тривиальным.
С другой стороны, память объемом в много миллионов бит настолько велика, а обработка
этих бит происходит с такой невообразимо большой скоростью, что возможные вычислительные
процессы (т. е. те процессы, которые мы изобретаем) превосходят уровень тривиальности
на несколько порядков. Именно это уникальное единство простоты и изощренности
характерно для задачи программирования.
Что означает это единство, можно понять, если сравнить программиста, например,
с хирургом, делающим сложную операцию. Оба должны быть в высшей степени аккуратны
и внимательны... Хирурга не порицают за то, что его умение ограничено: неисчерпаемая
сложность человеческого тела -- общепризнанный факт. Но программист едва ли может
апеллировать к неисчерпаемой сложности своей программы, так как она создана им
самим! Программист должен платить за то, что все находится в его полном распоряжении:
это следствие элементарности основ программирования. |
Итак, самодельный компьютер заработал, получил название, и настало время продемонстрировать
его вычислительную мощь, для чего Дейкстра создает, по его словам, "свой
первый нетривиальный алгоритм". Сегодня его знает любой человек, изучающий
курс программирования, -- это знаменитый алгоритм поиска кратчайшего пути в графе.
Здесь сразу уместно будет привести несколько фрагментов из воспоминаний Дейкстры.
Во-первых, алгоритм этот создавался не из простого любопытства, а для решения
вполне конкретной задачи, а именно, -- минимизации длины проводников на аналоге
"материнской платы" нового разрабатываемого командой компьютера X1,
так что лавровый венок создателя первой "утилиты всех времен и народов"
класса CAD-CAE Дейкстре можно присваивать смело. А вот "во-вторых" лучше
сказать словами самого Дейкстры: "На много лет и в широких кругах алгоритм
поиска кратчайшего пути был основным источником моей славы, что мне всегда казалось
странным -- ведь он был создан даже без карандаша и бумаги, за чашкой кофе на
солнечной террасе кафе в Амстердаме, в качестве демонстрации решения проблемы
с X1 для моей жены ...".
Очередному компьютеру-самоделке X1 мы косвенно обязаны не только самым известным алгоритмом Дейкстры. "Департамент проектирования аппаратных средств" в лице двух авторов за тяжелых три месяца добился от Главного Разработчика Архитектуры (в лице Э. Дейкстры) согласия на реализацию системы прерываний реального времени. Ведущий архитектор боялся ухода из-под ног детерминизма в поведении будущей машины, конструкторы же настаивали: "Мы понимаем, что это сделает решение ваших задач невообразимо трудным, но кто-то вроде вас должен справляться и с такими трудностями". В конце концов Дейкстра идет на уступку, которая оборачивается для него докторской степенью. Именно вопросу построения такой сегодня обыденной (но и такой далекой от простоты) программной подсистемы -- обработчику прерываний реального времени -- и была посвящена докторская диссертация Дейкстры. Защита диссертации по времени почти совпала с первой публикацией знаменитого алгоритма в первом выпуске первого датского "компьютерного" журнала "Numerische Mathematik" в 1959 г.
Иногда нам открываются неприятные истины:
- программирование -- одна из наиболее трудных областей прикладной математики;
чистым математикам в ней делать нечего -- пусть лучше занимаются чистой математикой;
- простейший вид приложений -- это технические и научные вычислительные задачи;
- инструменты, которые мы используем, определяют наши мыслительные возможности
и, таким образом, мыслительные способности;
- об использовании языка программирования можно сказать так: невозможно остро
отточить карандаш тупым топором и уж совершенно тщетно пытаться выполнить
эту задачу десятью тупыми топорами;
- простота -- это необходимое условие надежности;
- использование антропоморфной терминологии в отношении компьютеров -- симптом
профессиональной незрелости.
|
Период "компьютерных самоделок" буквально осязаем в самом "фривольном"
эпистолярном наследии Дейкстры. Его резкие высказывания (в том числе и в адрес
общепринятых грандов компьютерной индустрии) стали классикой нового жанра -- "компьютерного
юмора": "Проект IBM 360 был намного эффективнее Манхеттенского проекта
(в рамках которого создавались первые атомные бомбы.
-- Прим. автора статьи)
-- при равных затратах он обладал большей поражающей способностью", "Ожидание
-- это самый забавный вид деятельности, потому что вы не можете ожидать в два
раза быстрее", "Computer Science имеет такое же отношение к изучению
компьютеров, как астрономия к изучению телескопов". Что тут можно сказать...
Когда три человека проходят фактически самостоятельно по еще нехоженому пути и
добиваются впечатляющих результатов, им многое простительно. Тем более, когда
это "многое" базируется на энциклопедических знаниях и огромном опыте.
С лета 1959 г. Дейкстра начинает работать над еще одним проектом, плоды которого неразрывно ассоциируются с его именем. Конечно же, речь идет о языке Algol 60 -- прародителе подавляющего большинства современных массово-распространенных языков программирования (которые в честь этого пусть не всегда явного родства называют "алголоподобными"). "По ходу дела" (именно так он относится к этим фактам в своих воспоминаниях) Дейкстра создает способы реализации рекурсивных программ, самостоятельно разрабатывает основу процесса трансляции -- использование механизма стека для преобразования выражений в тогда еще безымянную "обратную польскую запись" (это название появилось значительно позже). Сегодня эти маленькие открытия никого не удивляют, но тогда, в 1959 г., они были далеко не такими маленькими, и с публикацией в 1960 г. статьи "Рекурсивное программирование" лексикон программистов пополнился двумя новыми словами: "стек" и "рекурсия", изобретенными Дейкстрой...
"Появление автоматических вычислительных машин означало
появление не только нового средства, но и новых проблем; и поскольку это средство
оказалось беспрецедентным, такими же оказались и проблемы. Эти проблемы имели
(и до сих пор имеют) два аспекта. Во-первых, перед нами стоит задача поиска новых
(разумных) сфер применения; это не так просто, потому что сфера применения может
быть такой же революционизирующей, как и само средство...
Во-вторых, когда сфера применения (будем надеяться, разумная) определена, мы сталкиваемся
с задачей программирования, т. е. с задачей приспособления нашего общего средства
к данной специфической цели". |
Работа над первым компилятором Algol 60 для компьютера X1 велась в такой атмосфере,
что каждый участник проекта каждый день забирал с собой домой все материалы по
проекту... на случай пожара в лаборатории. Пожар, естественно, не случился. А
вот результатам работы на Algol мы прямо или косвенно обязаны фундаментальным
понятиям мультипрограммирования, усовершенствованным фактически до современного
уровня в рамках следующего проекта с активнейшим участием Дейкстры -- операционной
системы THE. "Создавая THE, мы знали, что творим историю, потому что это
была первая в мире ОС, основанная на независимых синхронизируемых взаимодействующих
процессах с защитой от тупиковых ситуаций (дедлоков)". Дейкстра в этой фразе
умолчал о главном -- по-настоящему исторический характер THE проявился тогда,
когда стало слишком очевидным несоответствие между крохотной командой разработчиков
и масштабами задачи.
Почти полгода Дейкстра пребывал в "задумчивой депрессии" и, наконец, в качестве терапии... написал "Заметки о структурном программировании". Разосланные друзьям всего лишь 20 копий "Заметок..." сделали то, что мы называем Историей. Они начали эпоху Структурного Программирования.
Впоследствии, уже работая в знаменитых своими условиями для академических ученых лабораториях компании Burroughs, Дейкстра издал одну из лучших (а может быть и вообще лучшую) книг по программированию, ставшую настольной для нескольких поколений программистов. Порядок, который внесла методология структурного программирования в наш беспорядочный мир, трудно переоценить -- слава Богу и Дейкстре, но баллистические ракеты непроизвольно не стартуют из своих шахт, бортовая электроника автомобилей не "взбрыкивает" при движении, грубые ошибки систем управления воздушным движением по вине программ -- редкость. И все это длится десятилетиями...
Пик популярности работ Эдсгера Вайб Дейкстры, пришедшийся на середину 70-х годов,
сегодня прошел. Модой и умами правят совсем другие имена. И все-таки... автору
статьи кажется, что изучение "Дисциплины программирования" -- как минимум
необходимое условие для того, чтобы записанная в ведомости на получение зарплаты
должность "программист" выглядела достойной имени первого датского программиста.
Когда неспециалист просит объяснить, что в программировании понимается
под "модуляризацией", самое первое, что приходит в голову, -- это, по-видимому,
то, как в мире науки из всей суммы знаний и умений выкристаллизовывались отдельные
научные дисциплины.
Научные дисциплины имеют некоторый "размер", определяемый человеческими
константами: необходимая сумма знаний должна умещаться в человеческой голове,
число необходимых умений должно быть не больше того, чему человек может научиться
и в дальнейшем не терять полученных навыков. С другой стороны, научная дисциплина
не должна быть слишком маленькой или слишком узкой, чтобы она не исчерпалась в
течение по крайней мере одного поколения. Но не любой набор отрывочных фактов
или небывалых умений, даже достаточного размера, составляет живую научную дисциплину!
Есть еще два требования. Внутреннее требование соответствия: умение должно позволять
накапливать знания, а знания -- совершенствовать умения. И наконец, есть внешнее
требование (мы назовем его "узким интерфейсом") -- сущность дисциплины
допустимо изучать в достаточно высокой степени изолированности, чтобы она не зависела
в каждый момент критически от развития других областей науки. |
Про DCIM у забезпеченні успішної роботи ІТ-директора