суббота, 7 марта 2009 г.

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

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

Об OpenSource и закрытом ПО:

Успех программ с открытыми текстами - это, вероятно, единственное явление в компьютерной области, которому я в последние несколько десятилетий не удивляюсь…
…Тем не менее, я думаю, что небольшая часть программ, таких как Adobe Photoshop, будет всегда превосходить конкурентов из категории open source, таких как Gimp, по неизвестной мне причине.

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

Все участники соревнования, кроме меня, работали в его лаборатории искусственного интеллекта, которая располагалась на холмах выше Стэнфорда, и использовали систему разделения времени WAITS. Я сидел внизу, на основной территории университета, и единственным доступным для меня компьютером был мейнфрейм, для которого я должен был пробивать перфокарты и отдавать их на обработку в пакетном режиме. Я пользовался системой Вирта ALGOL W (предшественником Pascal). Моя программа не заработала с первого раза, но, к счастью, я смог воспользоваться замечательной оффлайновой системой отладки Эдда Саттертвейта (Ed Satterthwaite), так что мне понадобилось всего два захода. Тем временем, ребята, пользовавшиеся WAITS, не смогли получить достаточного машинного времени, поскольку их машина была перегружена. (Я думаю, что программист, занявший второе место, который использовал этот “современный” подход, пришел к финишу почти через час после того, как я представил работающую программу, полученную с применением старомодных методов.) Это соревнование не было справедливым.

По поводу перехода к многоядерным архитектурам:

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

В этих словах я нашел подтверждение своим опасениям о том, что многопоточное программирование грозит превратиться в кошмар.

О том, почему literate programming не получило широкого признания:

Literate programming - это очень личная вещь. Мне оно кажется бесподобным, но это, может быть, потому, что я очень странный человек. У этого подхода имеются десятки тысяч поклонников, но не миллионы…
…Тем не менее, лично для меня literate programming - это наиболее важная вещь, вышедшая из проекта TeX. Этот подход не только позволил мне писать и поддерживать программы быстрее и надежнее, чем когда бы то ни было раньше, и он не только был для меня самым большим источником удовольствия, начиная с 1980-х гг. - он иногда оказывался незаменимым. Некоторые из моих основных программ, такие как метасимулятор MMIX, не могли бы быть написаны с применением любой другой методологии, о которой я когда-либо слышал. Сложность была просто чересчур устрашающей, чтобы с ней можно было справиться на основе моих ограниченных умственных возможностей; без применения literate programming все предприятие потерпело бы полную неудачу.
Если люди действительно обнаружат хорошие способы использования новомодных многоядерных машин, то я думаю, что это сделают те люди, которые повседневно используют literate programming. Literate programming - это то, что требуется для превышения обычного уровня достижений. Но я не считаю разумным навязывание идей кому бы то ни было. Если грамотное программирование - это не ваш стиль, забудьте о нем и делайте то, что вам нравится. Если этот подход не будет нравиться никому, кроме меня, пусть он умрет.

И еще одна цитата на эту тему:

Вероятно, правильно сказал Джон Бентли (Jon Bentley), когда его однажды спросили, почему грамотное программирование не овладело стремительно всем миром. Он заметил, что хорошо программировать умеет небольшая часть населения земного шара, а хорошо писать на естественном языке - другая небольшая часть. По-видимому, мне хотелось, чтобы каждый человек входил и в ту, в и другую группу.

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

О его подходе к работе:

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

Мне кажется, что не зря здесь упомянута большая корзина для мусора :) Чем-то напоминает вот эту историю о китайском художнике.

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

У меня имеется несколько самодельных инструментов, таких как мой собственный спел-чекер для TeX и CWEB внутри Emacs. Я разработал собственный растровый шрифт для использования с Emacs, потому что я терпеть не могу то, как символы ASCII “апостроф” и “левая открывающая кавычка” эволюционировали в независимые символы, не соответствующие друг другу визуально. В Emacs у меня имеются специальные режимы, помогающие мне классифицировать все мои десятки тысяч файлов со статьями и заметками, а также специальные “быстрые клавиши”, наличие которых превращает писание книги в некоторое подобие игры на органе.

О том, какую работоспособность имеет человек в 70(!) лет:

Сейчас я чувствую себя таким же здоровым, как и всегда, с поправкой на то, что мне уже 70 лет. Когда я пишу TAOCP, мои слова текут легко, и я пишу грамотные программы, предшествующие вариантам TAOCP. Я просыпаюсь утром с идеями, которые меня радуют, и некоторые из этих идей нравятся мне и позже, днем, когда я ввожу их в свой компьютер…
…Что касается текущих каталогов в моей машине, в этом году я пока написал 68 разных CWEB-программ. В 2007-м году их было 100, в 2006-м - 90, в 2005-м - 100, в 2004-м - 90 и т.д. Кроме того, в CWEB имеется исключительно удобный механизм <изменения файлов>, с помощью которого я быстро создаю несколько версий и вариаций на одну и ту же тему; пока в 2008-м г. я создал 73 вариации этих 68 тем. (Некоторые из вариаций являются совсем короткими, всего несколько байт; другие имеют размер в 5 Кб и больше. Некоторые CWEB-программы имеют значительный размер, как, например, 55-страничный пакет BDD, работу над которым я завершил в январе.)

Просто удивительно! Вероятно, именно то, что Кнут настолько серьезно и плодотворно работает каждый день и является залогом его долголетия.

Он так же раскрывает секрет экономии времени:

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

Интересно, может ли подобная методика пригодиться при работе с большим количеством блог-постов на тему многопоточности и модели актеров (которые сейчас плодятся в великом множестве, в том числе и с моей помощью)?

PS. Где-то я читал высказывание Кнута о том, что если бы у него был выбор между двумя равноценными средами разработки, то он лично предпочел бы ту, у которой лучше средства отладки. Буду очень признателен, если кто-нибудь укажет на ее первоисточник.

Отправить комментарий