Кодеры за работой. Размышления о ремесле программиста - страница 284
Не знаю, почему мне так важно - совместимо что-либо с практикой или нет. Есть математики, которые вообще никогда не думают о чем-либо конечном и практически никогда не работают со счетно бесконечными множествами; они публикуют потрясающие работы, в которых говорят о безумных видах бесконечности, про которые они все понимают, и это доставляет им удовольствие. То же самое можно обнаружить и в области изучения алгоритмов. Что касается меня, то мне намного больше нравится работать с идеями, которые я могу использовать на своем компьютере.
Сейбел: В 1974 году вы писали о том, что к 1984 году у нас будет “Утопия 84” - идеальный язык программирования, который вытеснит Кобол и Фортран; кроме того, вы говорили о явных признаках того, что такой язык постепенно обретает реальные очертания. С 1984 года прошло уже два десятилетия - похоже, ваши прогнозы не сбылись.
Кнут: Нет, ничего такого не было.
Сейбел: Это в вас тогда говорил ваш юношеский оптимизм?
Кнут: Видимо, когда я писал об этом, то думал о Симуле и тенденциях в объектно-ориентированном программировании. Думаю, на самом деле с появлением каждого нового языка приводятся в порядок знания о старых языках и добавляется что-то новое, экспериментальное и так далее; но никогда не было так, что создается новый язык и все - дальше идти некуда, можно останавливаться на уже достигнутом. Всегда появляется желание развиваться дальше.
Может быть, когда-нибудь кто-то скажет: “Хватит, я не собираюсь быть новатором; я просто хочу быть внятным и понятным - этих принципов и буду придерживаться”. Паскаль начинал с подобной философии, но не продолжил ее. Может, мы и доживем до того времени, когда кто-нибудь скажет: “Давайте-ка сузим наш угол зрения и постараемся сделать что-то стабильное”. Возможно, это окажется неплохой идеей.
Сейбел: Не является ли частью проблемы тот момент, что помимо ошибок есть и недостающие детали - а если чего-то недостает, то нужно как-то заполнить эту пустоту.
Кнут: Да, верно. Каким-то образом языки должны быть расширяемыми. Java не стала расширяемой в хорошем смысле этого слова.
Сейбел: Вы и сами создали несколько языков, пожалуй, самый популярный из них - ТеХ.
Кнут: Ну да, ТеХ - это язык программирования, но все эти дополнительные свойства я добавил после долгих споров и препираний. Гаю Стилу, Терри Винограду, Лесли Лэмпорту и другим были нужны определенные вещи, когда они использовали ТеХ в качестве внешнего интерфейса при работе над своим материалом. Кажется, Терри Виноград писал книгу о синтаксисе естественных языков, поэтому ему были нужны по-настоящему мощные макросы, чтобы сделать диаграммы для своей книги. Именно это подтолкнуло ТеХ по направлению к тому, чтобы превратиться в язык программирования уже в начале своего существования.
Сейбел: Вам когда-нибудь хотелось плотнее заняться разработкой языка как такового?
Кнут: Не знаю. Наверное, да. Мне по-своему очень не нравится, что считается, будто каждый язык должен быть универсальным, потому что они будут универсальными - но по-разному. Как в UNIX есть 30 определений регулярных выражений в одном флаконе - в зависимости от того, какую часть UNIX вы используете, вам предлагается немного отличное представление о регулярных выражениях. Если внутри каждого вашего инструмента находится машина Тьюринга - разве это нормально? Я на самом деле думал про ТеХ, что чем больше в нем языка программирования, тем меньше в нем того, что непосредственно связано с версткой.
Вводя расчет простых чисел в руководство по использованию ТеХ, я не считал это должным использованием ТеХ. Я представлял себе это так: “Да, кстати, глядите-ка: собаки могут стоять на задних лапах, а ТеХ может вычислять простые числа”.