Шрифт:
Кнут: Да, верно. Каким-то образом языки должны быть расширяемыми. Java не стала расширяемой в хорошем смысле этого слова.
Сейбел: Вы и сами создали несколько языков, пожалуй, самый популярный из них — ТеХ.
Кнут: Ну да, ТеХ — это язык программирования, но все эти дополнительные свойства я добавил после долгих споров и препираний. Гаю Стилу, Терри Винограду, Лесли Лэмпорту и другим были нужны определенные вещи, когда они использовали ТеХ в качестве внешнего интерфейса при работе над своим материалом. Кажется, Терри Виноград писал книгу о синтаксисе естественных языков, поэтому ему были нужны по-настоящему мощные макросы, чтобы сделать диаграммы для своей книги. Именно это подтолкнуло ТеХ по направлению к тому, чтобы превратиться в язык программирования уже в начале своего существования.
Сейбел: Вам когда-нибудь хотелось плотнее заняться разработкой языка как такового?
Кнут: Не знаю. Наверное, да. Мне по-своему очень не нравится, что считается, будто каждый язык должен быть универсальным, потому что они будут универсальными — но по-разному. Как в UNIX есть 30 определений регулярных выражений в одном флаконе — в зависимости от того, какую часть UNIX вы используете, вам предлагается немного отличное представление о регулярных выражениях. Если внутри каждого вашего инструмента находится машина Тьюринга — разве это нормально? Я на самом деле думал про ТеХ, что чем больше в нем языка программирования, тем меньше в нем того, что непосредственно связано с версткой.
Вводя расчет простых чисел в руководство по использованию ТеХ, я не считал это должным использованием ТеХ. Я представлял себе это так: «Да, кстати, глядите-ка: собаки могут стоять на задних лапах, а ТеХ может вычислять простые числа».
Сейбел: Но люди пользуются тем, что это тьюринг-полный язык программирования для вычислений, связанных с версткой. Если бы он не обладал полнотой по Тьюрингу, им бы не удалось делать все это.
Кнут: Да, это так. В 1960-х годах я написал язык программирования для эмуляции, на завершение которого потратил много сил, поскольку у него было множество пользователей, но когда появилась Симула, она понравилась мне больше, и я просил людей забыть о моем языке SOL. Вообще-то, мне не кажется, что у меня какой-то особенный талант к разработке языков.
Во время работы над ТеХ я обращался к сотням лет истории человечества, не желая отказываться от всего того, до чего дизайнеры книг дошли за многие века, и начинать заново, сказав: «В общем, забудьте тех ребят; знаете, мы будем рассуждать логически». В этом случае суть дела сводилась, в основном, к тому, чтобы выбрать чудовищно сложную задачу и найти сравнительно небольшой набор базисных элементов для ее поддержки. Вместо 1000 элементов у меня 100 базисных элементов или около того. Но пойти дальше, сведя все к 50 или 10 элементам — что нужно было бы сделать для математической ясности, — мне кажется, такой путь просто не сработает. Задача изготовления книг очень сильно взаимосвязана со сложностью реального мира, который просто противится любым упрощениям.
Сейбел: Я не проводил никаких специальных исследований, но у меня складывается такое ощущение, что подавляющее большинство математических и научных работ в наши дни сверстаны в ТеХ. Наверняка вы не раз видели какие-то исследования, сверстанные в ТеХ, и думали: «Ого, моя программа играет здесь определенную роль».
Кнут: Доказательство великой теоремы Ферма — один из таких случаев. Это одна из самых известных математических работ. И все равно постоянно встречаются книги, которые, я знаю, не были бы написаны, если бы их авторы шли по проторенным дорожкам. Опять же это своего рода проблема черных ящиков.
Как было раньше: что-то печатаешь, отдаешь это наборщику, затем получаешь гранки и так далее. Проходишь через всевозможных людей разных уровней, которые не являются математиками, но от которых зависит конечный результат. Поэтому не рискуешь сделать что-либо такое, что сможет смутить людей во всей этой цепочке.
Но если можешь сам наблюдать за тем, что из всего этого получается, и можешь сам разработать систему нотации, а не взять ее из чьего-то списка стилей, потому что точно знаешь, какой должна быть нотация для твоей работы, то у тебя больше шансов воодушевиться на создание гораздо более качественной работы.
Поэтому мне всегда очень приятно осознавать тот факт, что люди смогли пробиться через все это и что плоды их творчества поступают напрямую к их читателям.
Сейбел: Как по-вашему, программисты и ученые в области компьютерных наук хорошо знают историю нашей области знания? Ведь она, в общем-то, не столь продолжительна.
Кнут: Не так уж и много сейчас ученых. Даже когда я начинал писать книги — в 1963 году, — мне не казалось, что люди знали тогда, что происходило в 1959 году. На прошлой неделе я прочел в «American Scientist», что был заново открыт алгоритм, который Бойер и Мур открыли в 1980 году. Я на каждом шагу сталкиваюсь с тем, что люди не осознают все великолепие нашей истории. Многим молодым программистам кажется странной мысль о том, что в 1970-х люди тоже что-то знали, понимали и умели.
Неизбежно, что в такой сложной области знания люди чего-то не знают. Надеюсь, с такими вещами, как Википедия, достижения не будут так легко предаваться забвению, как это происходило раньше. Но надеюсь и на то, что мне удастся многим привить свою любовь к чтению первоисточников. Не просто знать, что такой-то известен тем, что сделал то-то, но обратиться к его работам и прочитать, что говорил этот человек, его собственные слова. Думаю, это превосходный способ улучшить свои навыки.
Очень важно уметь понимать образ мышления другого человека, декодировать его словарь, нотацию. Если вы поймете что-то о том, как они думали, и о том, как делали свои открытия, то это поможет вам делать собственные открытия. Я часто читаю первоисточники — что гении прошлого говорили о той или иной проблеме. Их мысли выражаются в непривычных для сегодняшнего человека формулировках, но они стоят того, чтобы разбираться в их нотации и пытаться как следует вникнуть в их идеи.