Эдсгер Дейкстра – Поэзия программирования


Страница 1 из 2 Эдсгер Дейкстра был одним из первых, кто беспокоился о том, какой должна быть программа, и он возвысил процесс программирования до уровня искусства и науки. Если вы знаете только одну цитату Дейкстры, она должна быть такой: «Информатика – это не больше компьютеров, чем астрономия – телескопы».

Кто-то может сказать, что история программного обеспечения все еще с нами – просто посмотрите на любой компьютер, чтобы увидеть это!

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

Неужели кому-то пришлось изобрести команду Goto, массив, переменную?

Это была медленная борьба, чтобы понять, что такое программирование, и Эдсгер Дейкстра имел честь видеть более ясно раньше, чем остальные из нас.

Эдсгер Вайбе Дейкстра (1930 – 2002)

Как это было

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

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

Команды условного перехода расширяют идею до проведения теста и последующего выполнения перехода только в том случае, если проверка окажется истинной или ложной. Используя переходы и условные переходы, программисты быстро изобретают для себя циклы различных видов и эквиваленты операторов «if».

Для современного программиста это не слишком удивительно.

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

Это означает, что они могли и могут писать программы, не имея четкого представления о том, что происходит в более широком масштабе. Можно сказать, что строительные блоки, используемые первыми программистами высокого уровня, были смоделированы на основе того, что предоставляла машина, и то, что предоставляла машина, было простым, потому что оборудование должно быть простым. Итак, вы составляете программу вместе с условными операторами, построенными из if..then goto и циклов, соединенных с goto и if..then goto.

Что плохого в подходе «программирование на месте»?

Ответ таков: если вы не понимаете, для чего вы используете GOTO, вы склонны использовать его по любой причине, которая приходит в голову.

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

У вас может быть рабочая программа, но сейчас ее очень сложно понять и, как следствие, сложно изменить. Беспорядочная программа обычно содержит ошибки, и это было большой проблемой в конце 60-х годов. Люди писали программы, просматривая следующий фрагмент кода, который необходимо было выполнить, и записывая GOTO, чтобы получить их там. Результат обычно назывался спагетти-кодом, потому что вы получали запутанный беспорядок, если брали палец и прослеживали все возможные пути выполнения.

Входит Дейкстра.

Эдсгер Дейкстра родился в 1930 году в Роттердаме и изучал математику и теоретическую физику в Лейдене. По ряду совпадений он закончил программированием одного из первых компьютеров в Голландии, в Математическом центре в Амстердаме.

В конце концов он обнаружил, что занятия физикой и использование компьютера сложно сочетать, и однажды в 1955 году он пошел поговорить со своим боссом Адрианом ван Вейнгардом о том, чтобы стать профессиональным программистом.

Его беспокоил тот факт, что не совсем ясно, что программирование – это респектабельная интеллектуальная дисциплина, как теоретическая физика. Ван Вейнгаард был вынужден согласиться с тем, что в программировании не так уж много смысла, но Дейкстра мог бы подумать о том, чтобы что-то с этим сделать, ведь компьютеры явно были здесь, чтобы остаться. Как объяснил Дейкстра в своей лекции ACM Тьюринга 1972 года:

“Когда я покинул его офис несколько часов спустя, я был другим человеком”

кто был мотивирован сыграть свою роль в нанесении неизвестной дисциплины на карту.

Чтобы проиллюстрировать, насколько неизвестным было предметное программирование, когда Дейкстра женился два года спустя, он заявил о своей профессии как “программист”, но это было неприемлемо на том основании, что такой профессии не было, и ему пришлось сменить ее на ” Физик-теоретик”!

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

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

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

Он проиграл свою единственную ставку, потому что Карел Шолтен, человек, который спроектировал и построил компьютер, который использовал Дейкстра, модифицировал его и тайно добавил инструкцию, которая позволила бы ему написать более короткую программу.

Позже Дейкстра сказал:

«Два мнения о программировании относятся к тем временам. Я вспомнил их сейчас.

Одно мнение заключалось в том, что действительно компетентный программист должен разбираться в головоломках и очень любить хитрые трюки; другое мнение заключалось в том, что программирование – это не что иное, как оптимизация эффективности вычислительного процесса ».

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

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

Одно из его высказываний прекрасно резюмирует эту идею:

«Информатика – это не больше компьютеров, чем астрономия – телескопы».

Назад – Вперед >>


Добавить комментарий