Чтение онлайн

ЖАНРЫ

Кодеры за работой. Размышления о ремесле программиста
Шрифт:

Сейбел: Изменился ли со временем тип человека, который может стать хорошим программистом?

Кнут: Судя по моему многолетнему опыту, практически всегда, когда я встречаю 100 человек из той или иной группы населения (не считая студентов специальности «компьютерные науки»), двое из них — программисты, в том смысле что действительно находят общий язык с машиной. В городе Василла (Аляска) проживает 10 000 человек, соответственно там должно быть 200 программистов.

Сейбел: Так изменилось ли программирование за это время настолько, что изменился тип людей, попадающих в эти два процента? Или тут все по-прежнему?

Кнут: Не знаю, ведь понятие «программирование» можно трактовать по-разному. Мы всегда

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

Сегодня машины настолько мощны, что люди, не очень-то смыслящие в программировании — в моем элитарном представлении, — способны решать с помощью этих машин задачи, которые на прежних машинах могли решать только очень сильные специалисты. А с новыми машинами эти люди, о которых я говорю, смогут решать даже те задачи, которые было невозможно решить с помощью старых компьютеров.

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

Сейбел: Но вам ведь все еще интересно программировать самому?

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

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

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

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

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

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

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

Не знаю, почему мне так важно — совместимо что-либо с практикой или нет. Есть математики, которые вообще никогда не думают о чем-либо конечном и практически никогда не работают со счетно бесконечными множествами; они публикуют потрясающие работы, в которых говорят о безумных видах бесконечности, про которые они все понимают, и это доставляет им удовольствие. То же самое можно обнаружить и в области изучения алгоритмов. Что касается меня, то мне намного больше нравится работать с идеями, которые я могу использовать на своем компьютере.

Сейбел: В 1974 году вы писали о том, что к 1984 году у нас будет «Утопия 84» — идеальный язык программирования, который вытеснит Кобол и Фортран; кроме того, вы говорили о явных признаках того, что такой язык постепенно обретает реальные очертания. С 1984 года прошло уже два десятилетия — похоже, ваши прогнозы не сбылись.

Кнут: Нет, ничего такого не было.

Сейбел: Это в вас тогда говорил ваш юношеский оптимизм?

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

Может быть, когда-нибудь кто-то скажет: «Хватит, я не собираюсь быть новатором; я просто хочу быть внятным и понятным — этих принципов и буду придерживаться». Паскаль начинал с подобной философии, но не продолжил ее. Может, мы и доживем до того времени, когда кто-нибудь скажет: «Давайте-ка сузим наш угол зрения и постараемся сделать что-то стабильное». Возможно, это окажется неплохой идеей.

Сейбел: Не является ли частью проблемы тот момент, что помимо ошибок есть и недостающие детали — а если чего-то недостает, то нужно как-то заполнить эту пустоту.

Кнут: Да, верно. Каким-то образом языки должны быть расширяемыми. Java не стала расширяемой в хорошем смысле этого слова.

Сейбел: Вы и сами создали несколько языков, пожалуй, самый популярный из них — ТеХ.

Кнут: Ну да, ТеХ — это язык программирования, но все эти дополнительные свойства я добавил после долгих споров и препираний. Гаю Стилу, Терри Винограду, Лесли Лэмпорту и другим были нужны определенные вещи, когда они использовали ТеХ в качестве внешнего интерфейса при работе над своим материалом. Кажется, Терри Виноград писал книгу о синтаксисе естественных языков, поэтому ему были нужны по-настоящему мощные макросы, чтобы сделать диаграммы для своей книги. Именно это подтолкнуло ТеХ по направлению к тому, чтобы превратиться в язык программирования уже в начале своего существования.

Сейбел: Вам когда-нибудь хотелось плотнее заняться разработкой языка как такового?

Кнут: Не знаю. Наверное, да. Мне по-своему очень не нравится, что считается, будто каждый язык должен быть универсальным, потому что они будут универсальными — но по-разному. Как в UNIX есть 30 определений регулярных выражений в одном флаконе — в зависимости от того, какую часть UNIX вы используете, вам предлагается немного отличное представление о регулярных выражениях. Если внутри каждого вашего инструмента находится машина Тьюринга — разве это нормально? Я на самом деле думал про ТеХ, что чем больше в нем языка программирования, тем меньше в нем того, что непосредственно связано с версткой.

Поделиться с друзьями: