Рубріки: Истории

Не нравится язык программирования — создай свой: как Эдсгер Дейкстра развеивал миф, что программирование — это колдовство

Вікторія Пушкіна

Базовая информация, которую вы должны (или можете) знать об Эдсгере Дейкстре — он придумал алгоритм Дейкстры. Если коротко, то это алгоритм нахождения кратчайшего пути от одной вершины графа к другой.

Но если вы прочтете биографию этого нидерландского ученого, вы скорее всего решите, что были бы не прочь не только применять его алгоритм, но и выпить с ним в баре. Например, однажды Эдсгер Дейкстра создал новый язык программирования из одной только ненависти к языку FORTRAN.

Какие еще курьезы случались с Дейкстрой и что из его убеждений стоит вспомнить разработчикам в 2021 году, читайте в материале Highload.

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

Стал программистом, когда этой профессии еще не существовало

Эдсгер Дейкстра родился в 1930 году в Роттердаме. В детстве он думал стать послом ООН от Нидерландов, но в итоге поступил на кафедру теоретической физики. Через три года после начала обучения он решил стать программистом, но диплом физика все-таки получил — из принципа.

Кстати, в 1957 году, когда Дейкстра женился, в документах в графе «профессия» он написал «программист». Но ему сказали, что такой профессии не существует, и заставили все переписать. Пришлось на бумаге снова быть «физиком-теоретиком».

На самом деле решение стать программистом далось Дейкстре нелегко. В 2021 году «программист» звучит гордо. В середине же 20 века это было скорее «нереспектабельно». То ли дело физика.

Другой вопрос, который волновал Дейкстру: «Что такое программирование и на чем оно основывается как наука?». За свою карьеру ученый в итоге ответил на этот вопрос сполна.

Выдержка из воспоминаний Дейкстры на английском
Источник: https://www.cs.utexas.edu/~EWD/ewd03xx/EWD340.PDF

Именно он показал, что программирование — это не «колдовство над странными машинами» (такое мнение лидировало в те годы), а интеллектуальное творчество, твердо стоящее на математической логике.

Удалось ему это в том числе потому, что в своих научных публикациях он объяснял все максимально просто и даже немного дружественно — как будто общался с кем-нибудь по переписке. Но с названиями у него были явные проблемы: он все подписывал просто EWD_X (где Х — номер публикации, а EWD — инициалы) 🙂

Кусочек списка публикаций Дейкстры на сайте архива его текстов

Создал компилятор на спор

Официально становление Эдсгера Дейкстры как программиста началось 1 марта 1952 года, когда он начал работать в Математическом центре в Амстердаме. Знания для работы он получил на трехнедельных компьютерных курсах в Кембридже.

Кстати, Дейкстра стал первым голландцем, который получил должность «программист». Неудивительно, что у него потом были такие проблемы с документами!

Первое время Эдсгер Дейкстра работал на языках программирования низкого уровня. В этот период он и придумал знаменитый алгоритм поиска кратчайшего пути для вершин графов. Это было в 1956 году (опубликован алгоритм в 1959-м).

Схема работы алгоритма Дейкстры
Источник: https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

И все-таки машинные коды были слишком неудобными — так что когда в 1957 году появился FORTRAN, Дейкстра перешел на него и… разочаровался. Позже, когда ученый стал преподавателем в университете, он все еще скептически относился к этому языку и даже говорил, что не будет учить студентов со знанием FORTRAN, ведь тот провоцирует развитие «дурных привычек программирования».

Так что когда в 1958 году на недельной конференции в Швейцарской высшей технической школе Цюриха великие умы собрались придумывать альтернативу FORTRAN — Алгол, Эдсгер Дейкстра был среди них. 

Ученый работал над компилятором языка. И, как будто одной ненависти к FORTRAN ему было мало, придумал себе дополнительный челлендж — не бриться, пока компилятор не будет закончен. В итоге, Дейкстра отрастил шестинедельную бороду 🙂

А еще в рамках этого проекта он изобрел новое правило компиляции — «вызов по имени» (call-by-name), когда аргументы не перечисляются перед функцией, а подставляются непосредственно в ее тело.

Пример реализации call-by-name на Scala
Источник: https://www.scala-lang.org/old/node/138

Случайно перевернул мировой подход к программированию

Эдсгер Дейкстра работал в Математическом центре Амстердама десять лет, а затем — с 1962 года и до конца жизни переключился на преподавание в университетах. Но изобретательскую деятельность не оставил.

Эдсгер Дейкстра читает лекцию в 1968 году

Благодаря тому, что он любил программирование в целом и относился к нему как к искусству, он изобрел несколько глобальных вещей. Например, ему частично принадлежит концепция структурного программирования — то есть представление кода блоками.

В 1968 году Дейкстра в пух и прах разнес целесообразность использования goto в своей статье Goto considered harmfulОператор Goto считается вредным»). В результате это привело к созданию другого подхода, где программа пишется пошагово и в ней есть ветвления, циклы и подпрограммы. То есть то, что предотвращает появление «спагетти-кода».

Кстати, сам Дейкстра называл эту статью «краеугольным камнем своей славы». Дело в том, что изначально текст назывался совсем не так броско — это были просто «Доводы против» (или EWD215 🙂 ). Но редактор журнала, в который направил статью ученый, хотел привлечь к ней больше внимания и изменил название.

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

Боялся что программирование станет тривиальным и доступным

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

Эдсгер Дейкстра неоднократно говорил, что:

  • для хорошей программы важно выбрать правильный и логичный алгоритм;
  • решение задачи должно опираться на ее математическое описание;
  • основная работа программиста — продумать это решение, а не писать код.

Больше всего Дейкстра боялся, что разработка превратится в тривиальный процесс и предостерегал от попыток превратить программирование в занятие, доступное каждому. «Это обречено на провал», — говорил ученый.

Как думаете, как бы он оценил ситуацию в IT в 2021?

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023