Эдсгер Вайб Дейкстра

Материал из Letopisi.Ru — «Время вернуться домой»
Перейти к: навигация, поиск

ЭдсгерВайбДейкстра.jpg

Содержание

Биография

11 мая 1930 года в городе Роттердам (Голландия) родился Эдсгер Вайб Дейкстра (Edsger Wybe Dijkstra), выдающийся ученый и классик программирования. Разработав множество концепций теории программирования, Дейкстра превратил его в серьезную науку, развивавшуюся до этого преимущественно на интуитивно-любительском уровне.

Эдсгер вырос в семье ученых (его мать была математиком, а отец - химиком) и получил прекрасное образование: с детства его окружали точные науки, их четкая логика позднее и легла в основу знаменитых трудов великого теоретика и критика программирования. Окончив Гимназию Эразма в Роттердаме, он получил степень магистра математики и теоретической физики в Лейденском университете (University of Leyden). Однако уже в 1955 г. Эдсгер, устроившись программистом в Математический Центр Амстердама (Mathematisch Centrum), забыл о своей профессии: <Я решил покончить с карьерой физика-теоретика, но профессии программиста в то время просто не существовало>, - писал молодой ученый. Позднее он получил степень доктора компьютерных наук в Университете Амстердама (University of Amsterdam).

В 1962 г. Дейкстра становится профессором математики в Технологическом университете Эйндховена (Eindhoven, Нидерланды), отказавшись занять предложенную здесь же должность профессора Computing Science. Спустя семь лет, он вновь утверждал, что эта область знания еще не оформилась как самостоятельная дисциплина: <Честность заставляет меня согласится с тем, что сегодня уровень достоверности, достигнутый в профессии программиста, в среднем все еще не такой, каким он должен быть, а совсем наоборот!> Так, в последующее десятилетие становление фундаментальных основ программирования легло на плечи господина Дейкстры.

Известность пришла к ученому после скандальной статьи <О вреде оператора Go To> (Go To Statement Considered Harmful), опубликованной в журнале Communications of the ACM (Association for Computing Machinery) в 1968 г. <Необдуманное применение оператора Go To ведет к тому, что становится ужасно трудно найти осмысленный набор координат, в которых описывается состояние процесса: Он создает слишком сильное побуждение внести путаницу в программу>, - действительно, алгоритм, построенный на основе команд безусловного перехода Go To, очень похож на некую документальную публикацию, изобилующую ссылками и примечаниями. Оператор Go To используется для передачи выполнения инструкций от одного участка программы к другому, нарушая тем самым ее последовательную логическую структуру, что особенно опасно при попытке обнаружить и исправить ошибки в такой программе. В этом случае зачастую отладка или внесение дополнений приводят к появлению новых ошибок, окончательно ставя программиста в тупик. Что тогда говорить о совместном создании алгоритмов. Если сам разработчик не сможет разобраться в написанном, вряд ли за него это сделает его коллега.

Именно поэтому Дейкстра призывал отказаться от привычного и вездесущего Go To: <Оператор Go To производит пагубный эффект, и я убежден в том, что он должен быть отменен в языках программирования "высокого уровня" (то есть везде, кроме простого машинного кода)>. В качестве альтернативы ученый предложил использовать в теле программы операторы повторения (повторение цикла до момента соблюдения заданного условия - while X repeat Y или repeat Y until X), последовательное выполнение команд, идущих друг за другом, условные операторы (if X then Y) и операторы ветвления. По сути, в своей работе Дейкстра изложил основные идеи структурного программирования, без понимания которых даже самому опытному программисту, по его мнению, не добиться успеха в решении постоянно усложняющихся задач.

Построение любой программы должно основываться на четких принципах формальной логики, облегчающих не только поиск ошибок, но и помогающих представить программу в наглядном виде, что в конечном итоге позволит убедиться в ее корректности не только визуально, но и формально, - так, пожалуй, звучит девиз всех трудов Дейкстры. Естественно, на заре развития вычислителей, когда проблемы были столь же примитивны, как и инструменты для их исполнения, программирование не представляло никакой сложности. Видимо поэтому оно и не воспринималось всерьез изначально, а позднее превратилось в некую плюралистическую науку, где каждый действовал, руководствуясь лишь собственным представлениями и пониманием. Но, как говорится, любая уважающая себя дисциплина требует строгих терминов и правил, а где как не в программировании эти правила должны диктоваться математической логикой?

Еще Эммануил Кант говорил о том, что <в каждой естественной науке заключено столько истины, сколько в ней математики>. Язык программирования - тончайшее средство, позволяющее нам шаг за шагом описывать набор тех действий, совокупность которых в конечном итоге и даст желаемый результат. И здесь не обойтись без аккуратности, строгого синтаксиса и соблюдения всех семантических условностей, иначе ошибок не избежать. Но попробуйте представить весь объем исходных текстов, например, Windows, не содержащих в первичном варианте ни единой ошибки. При всем старании опытнейших программистов это просто невозможно. На тестирование и отладку каждого блока, содержащего тысячи команд, порой уходит во много раз больше времени и сил, чем их потребовалось для написания исходного кода. А если в проекте участвуют сотни человек, каждый из которых создает и отлаживает отдельный модуль, позднее включаемый в единый программный код, им просто необходимо <говорить> на простом и понятном всем языке. Случись иначе, мы бы никогда не увидели ни единого программного продукта, предаваясь метафоре - всех их постигла бы участь Вавилонской башни.

Признание подхода Дейкстры к программированию пришло не сразу. Есть, к сожалению, в научных кругах традиция отвергать и высмеивать неведомые доселе истины, а уж потом только принимать их как само собой разумеющиеся. Всерьез задумываться о ценности идей Дейкстры стали только после наступления так называемого <кризиса программного производства> (в 1968 г. в США эта проблема обсуждалась даже на международной конференции). В начале 1970-х годов принципами структурного программирования (которые, кстати, позднее легли в основу объектно-ориентированного программирования) впервые воспользовалась компания IBM при создании банка данных газеты и, надо сказать, очень удачно - работа была выполнена быстро и практически безошибочно.

Теоретические основы создания программ, предложенные Дейкстрой, отнюдь не исчерпываются рассмотренными выше положениями. Дейкстра является автором алгоритма Shortest Path Algorithm (алгоритм кратчайшего пути, известный как алгоритм Дейкстры), ставшего актуальным для маршрутизаторов Интернета. Идея синхронизации последовательных процессов (<семафоров>) в работе многозадачных систем (например, при одновременном выполнении операционной системой нескольких процессов) также принадлежит ему1).

Дейкстра принимал непосредственное участие в создании языка Алгол-60 (Algol 60), который по праву можно назвать первым структурным языком программирования, им же написан и первый компилятор с Алгола-60. Многие идеи Дейкстры затем стали основополагающими при создании языков Паскаль, Бейсик и Си.

В 1973 г. ученый становится исследователем одной из авторитетнейших в то время американских компаний - "Барроуз" (Burroughs Corporation). Даже ради престижной должности Дейкстра не покинул родину, а сотрудничал с Burroughs дистанционно. Интересно, что компания заинтересовалась своеобразным хобби своего нового работника: с 1967 г. Дейкстра писал и рассылал своим корреспондентам и работодателям письма (написанные исключительно авторучкой), в которых подробно излагал основные идеи теории программирования, эти письма по просьбе автора Burroughs распространяла в программистских кругах. Естественно, взгляды Дейкстры принимались с уважением далеко не всегда, однако сейчас эти работы признаны классическими. На протяжении всей жизни Дейкстра отправил около 1300 писем, некоторые из которых вошли в сборник, опубликованный в 1982 г.

Эдсгер Дейкстра: <Поднимите свои стандарты качества так высоко, как можете, избегайте траты времени на рутинные проблемы и всегда старайтесь работать настолько близко к границе ваших способностей, насколько это возможно. Поступайте так потому, что это единственный способ эту границу определить и отодвинуть>

<Сквозь терния к звездам>, - да, профессору Дейкстре знакомо и то, и другое. Терпя саркастические насмешки над своими идеями в начале карьеры (которой ученый отдал более 40 лет), он, в конце концов, получил всемирное признание научной общественности. Декстра был почетным заведующим кафедрой Computer Science Техасского ун членом Колевской Академии Нидерландов, Британского Компьютерного Общества (British Computer Society), Американской Академии Наук и Искусств. За многочисленные научные заслуги в 1972 г. он удостоился премии Алана Тьюринга, в 1982 г. получил премию Пионера Компьютерного Сообщества IEEE. В 2002 г. фонд C&C (Япония) выразил благодарность Дейкстре <за пионерский вклад в создание научной базы компьютерного программного обеспечения благодаря творческим исследованиям по основам теории програмного обеспечения, теории алгоритмов, структурного программирования и семафоров>. И это далеко не весь список:

Дейкстра обладал незаурядным чувством юмора и едко критиковал неудавшиеся труды программистов. Однажды, к примеру, он назвал Фортран (FORTRAN) <младенческим расстройством> с двадцатилетним стажем, а APL - языком будущего для программистской техники прошлого. Эдсгер часто играл Моцарта на фортепиано, путешествовал с женой по национальным паркам в маленьком фургончике, названном <Машиной Тьюринга> и ко всем заслугам был отцом трех детей и дедушкой двух внуков. 6 августа 2002 г. ученый скончался от рака на родине, в Нидерландах. Что ж, нам остается лишь вспомнить слова, прозвучавшие на одной из церемоний в его адрес: <Это образец ученого, который программирует, не прикасаясь к компьютеру, и делает все возможное, чтобы его студенты поступали так же и представляли информатику как раздел математики>[1]. 6 августа в своем доме в Нидерландах умер от рака. Дейкстра был выдающимся учёным, идеи которого оказали огромное влияние на развитие компьютерной индустрии. Ему было 72 года [5].


Научные достижения

Известность Дейкстре принесли его работы в области применения математической логики при разработке компьютерных программ. Он активно участвовал в разработке языка программирования Алгол и написал первый компилятор Алгол-60. Будучи одним из авторов концепции структурного программирования, он проповедовал отказ от использования инструкции GOTO. Также ему принадлежит идея применения «семафоров» для синхронизации процессов в многозадачных системах и алгоритм нахождения кратчайшего пути на ориентированном графе с неотрицательными весами рёбер, известный как Алгоритм Дейкстры. В 1972 году Дейкстра стал лауреатом премии Тьюринга[2].



ЭдсгерВайбДейкстра2.jpg

Литературные труды

Дейкстра был активным писателем, его перу принадлежит множество книг и статей, самыми известными из которых являются книги «Дисциплина программирования» и «Заметки по структурному программированию», и статья «О вреде оператора GOTO» — классические книги по теории структурного программирования.

Помимо обсуждения специальных вопросов, в своих статьях и книгах Дейкстра последовательно отстаивал необходимость математического подхода к программированию, который предполагает предварительное точное, всестороннее математическое описание задачи и способа её решения, формальное доказательство правильности выбранного алгоритма и последующую реализацию алгоритма в виде максимально простой, структурированной программы, корректность которой должна быть формально доказана. По мнению Дейкстры, господствующий в компьютерной индустрии подход к программированию как к процессу достижения результата методом проб и ошибок порочен, поскольку стимулирует программистов не думать над задачей, а писать код, при этом совершенно не гарантирует корректность программ, которая не может быть доказана тестированием в принципе.

Дейкстра многократно предостерегал от попыток превратить разработку программ в некий тривиальный процесс; по его мнению, программирование, в сути своей — чрезвычайно сложная научная и инженерная деятельность, и никакие новые методы и инструменты не смогут кардинально изменить это положение — они лишь освобождают программиста от части рутинной работы. Попытки же превратить программирование в простое занятие, доступное каждому, обречены на провал [3].



Влияние

Дейкстра также приобрёл немалую известность за пределами академических кругов благодаря своим резким и афористичным высказываниям по актуальным проблемам компьютерной индустрии. Вот некоторые из его афоризмов: Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации. Вопрос «умеет ли компьютер думать» имеет не больше смысла, чем вопрос «умеет ли подводная лодка плавать». Проекты, предлагающие программирование на естественном языке, гибельны по своей сути. Когда советское правительство приняло решение о переходе советской промышленности к копированию модельного ряда IBM/360, Дейкстра назвал это решение величайшей победой Запада в холодной войне, а выбранную для клонирования модель IBM/360 — величайшей диверсией Запада против СССР [4].

ЭдсгерВайбДейкстра3.jpg


Ссылки

1.http://www.vspu.ac.ru/~chul/dijkstra/index.htm 2.http://www.physics.uni-altai.ru/community/wiki/JedsgerDejjkstra 3.http://49l.ru/a/deykstra_edsger_vibe_-_nauchnyie_dostijeniya 4.http://49l.ru/a/deykstra_edsger_vibe_-_vliyanie 5.http://science.compulenta.ru/33110/

Персональные инструменты
Инструменты