10 января 1938 года в Милуоки (штат Висконсин, США) родился Дональд Эрвин Кнут. Сегодня ему исполнилось 76 лет. В биографии его нет длинного перечня названий городов и стран, где он жил и работал. Математик по образованию, в 1960-м окончил Кейсовский технологический институт, через три года в Калифорнийском технологическом институте стал доктором математики, а с 1968 года преподавал в Стэнфордском университете, профессор.
В 1990 году досрочно уходит на пенсию, чтобы полностью посвятить себя главному делу, которое он для себя избрал, — написанию фундаментальной монографии «The Art of Computer Programming», из семи запланированных томов которой свет увидели пока лишь три и первая часть четвёртого.
Сегодня Дональд Кнут является почётным профессором информатики Стэнфорда и ряда университетов разных стран мира, в том числе Санкт-Петербургского. Удостоен премии Ассоциации вычислительной техники имени Грейс Мюррей Хоппер, престижнейшей премии Тьюринга, имеет Национальную медаль США за научные заслуги, является лауреатом премии Харви, премии Киото, премии Института инженеров по электротехнике и электронике, а также премии Математической ассоциации США. Кнут издал 19 монографий и 160 статей.
Является создателем программ для издательской подготовки математических публикаций TEX и METAFONT. В прошлом году занимал 37-е место в списке наиболее цитируемых авторов в области компьютерных наук по версии системы индексирования научных публикаций CiteSeer.
Что интересно при таком обилии официальных знаков признания: отношение к мэтру со стороны представителей математического сообщества и программистов далеко от, казалось бы, ожидаемого — восторженного. Разумеется, в нём нет непочтительности или сомнений в ценности сделанного и значимости заслуг. Но есть нечто от переживаний студентов или даже школьников, которым… слишком много задали на дом. А ведь кроме «своих», айтишников, есть имеются спецы в области патентных прав и участники перманентной «битвы» сторонников проприетарного и свободного ПО, у которых свои резоны соглашаться или не соглашаться с доводами Дональда Кнута… На фоне всей этой бурлящей пестроты слов, взглядов, точек зрения и оценок того, о чем говорит и пишет наш юбиляр, очень хочется задать всего один вопрос. Кто вы, профессор Кнут?
Математик? Книга «Конкретная математика. Основание информатики», написанная в соавторстве Дональдом Кнутом, Рональдом Грэхэмом и Ореном Паташником, как известно, создана на базе одноимённого курса лекций для Стэнфордского университета. Значительная часть её в той или иной мере повторяет содержание главы «Математическое введение» первого тома «Искусства программирования». Слова «конкретная математика» — игра даже не слов, а понятий, которую очень любит профессор Кнут. Это и комбинация КОНтинуальной и дисКРЕТНОЙ математики. Здесь и ненавязчивый посыл в адрес целевой аудитории: это книга для практиков, решающих конкретные задачи. Тут и противопоставление математики прикладной и абстрактной…
Но что важно — это не фундаментальный математический труд, предпосланный желающим изучить предмет. Это — фундаментальный учебник. Несколько фраз из Введения: «Что же в действительности представляет собой конкретная математика? Это осмысленное оперирование математическими формулами с использованием определённых наборов методов решения задач… Предпочтение здесь будет отдаваться технической стороне дела, а не теоремам существования и комбинаторным рассуждениям». В книгу помещено около 500 заданий для самостоятельного решения (кстати, с аккуратным перечислением их авторов и источников).
После некоторого количества абсолютно понятного, чрезвычайно доходчивого, блестяще написанного текста книги эти задачки воспринимаются как ушат холодной воды за шиворот. И, что греха таить, именно эта особенность книг профессора Кнута вызывает максимум внутренней борьбы читающей публики. Зато позволяет предположить ответ на первый наш вопрос…
Программист? В 1960 году «свежеиспечённый» бакалавр математики Дональд Кнут вплотную занялся программированием. Причём без дураков. Системное программирование — что может быть круче? Он настолько успешно справился с проектом по созданию компилятора ALGOL-а, что в 1962-м издательство Addison–Wesley предложило ему написать книгу о компиляторах. В это же время он начинает активную преподавательскую деятельность в должности ассистента профессора Калифорнийского технологического института.
В процессе работы над книгой сама концепция издания претерпела коренные изменения. Автора больше не интересовала частная проблема создания компиляторов. При поддержке издательства он начинает подготовку семитомной монографии «Искусство программирования». В 1965 году вышел из печати первый том… Трёхтомник Кнута оказался бестселлером Addison–Wesley. Двухтысячный тираж каждого тома расходился за месяц, начиная с первого издания и далее — в продолжение десяти лет. Книги были переведены на 5 иностранных языков, включая русский. На молодого профессора буквально обрушилась слава. А в 1979 году он получает из рук президента Картера Национальную медаль в области науки…
Именно тогда Дональд Кнут берет «тайм-аут» и вновь — на пять лет — возвращается в программирование. Результатом стали TEX и METAFONT, а также — попутно — новая концепция программирования, получившая название «Literate Programming». («Грамотное программирование». Часто можно встретить некорректный перевод «Литературное программирование»… Ох уж этот профессор — любитель каламбуров и непереводимых названий…)
В 1986 году на торжественном приёме в Addison–Wesley Кнут заявил, что на завершение оставшихся четырёх томов ему потребуется два десятилетия. Через тринадцать лет, в 1999-м, он сообщил, что намерен вплотную заняться следующими двумя томами, а для повышения актуальности монографии запланировал переписать все описания и примеры, данные в книгах на языке ассемблера «морально устаревшего» виртуального компьютера MIX 1009, на язык более современного RISC-процессора MMIX 2009. С этой целью Дональд Кнут разработал архитектуру этого виртуального процессора, написал симулятор и ассемблер.
Что интересно: все без исключения тома «Искусства программирования» были восприняты публикой с величайшим пиететом. Наличие «Кнута» в домашней библиотеке каждого программиста стало считаться само собой разумеющимся. Но лишь немногие разработчики ПО действительно извлекают пользу из этих книг. Причина? Да та же самая: там все построено на принципе практического обучения. Нужно решать задачки… Короче говоря, по некоторым оценкам, на сотню владельцев «Кнута» реально проштудировавших эти книги найдётся едва ли десяток… Как по поводу этого шутил (шутил ли?) Билл Гейтс, наверное, все помнят.
Однажды в интервью Питеру Сейбелу, автору книги «Кодеры за работой. Размышления о ремесле программиста», Дональд Кнут признался: «Я узнал очень много нового… В частности, как много ресурсов мозга съедает разработка ПО. Я не мог одновременно преподавать на полную ставку и полноценно заниматься разработкой ПО. Но я мог преподавать на полную ставку и полноценно заниматься написанием книг»…
Это намёк к нашему второму вопросу…
Борец за свободу «софта»? В 1994 году Дональд Кнут вернулся к вопросу о взаимоотношениях программирования и математики с неожиданной стороны. Совместно с другими учёными он пытался инициировать процесс пересмотра патентной практики в США, касающейся патентования программного обеспечения. Не получилось… Ни в этот раз, ни в 2009-м, когда он вновь попытался повлиять на патентную политику, на этот раз — в Европе. Тем не менее гражданская позиция профессора Кнута, несомненно, заслуживает уважения.
Она предельно ясно выражена в его письме в адрес Комиссара по патентам и товарным знакам Вашингтона (округ Колумбия), где, в частности, говорится:
«Я хотел бы попросить вас пересмотреть текущую политику предоставления патентов на вычислительные процессы… В 1945–1980 годах было принято считать, что патентное право не относится к программному обеспечению. Однако теперь выясняется, что некоторые люди получили патенты на алгоритмы, имеющие большое практическое значение (например, сжатия Зива и RSA-шифрования с открытым ключом), что в настоящее время юридически ограничивает других программистов в использовании этих алгоритмов… Я боюсь, это изменение будет вредно для общества.
Мне сказали, что суды пытаются провести различие между математическими алгоритмами и нематематическими. Для компьютерного учёного это лишено смысла, потому что каждый алгоритм является математическим. Алгоритм — это абстрактное понятие, не связанное с физическими законами Вселенной.
Идея принятия законов, какие-то алгоритмы относящих к математике, а какие-то — нет, напоминает мне попытки в XIX веке в штате Индиана принять закон, что отношение длины окружности к её диаметру равно в точности 3, а не примерно 3,1416… Или церковное постановление о том, что Солнце вращается вокруг Земли. Представляете, что произойдёт, если отдельные юристы запатентуют свои методы защиты и если судьи Верховного суда смогут запатентовать свои прецеденты? Сегодня я твёрдо уверен, что тенденция к патентованию алгоритмов приносит пользу небольшому числу адвокатов и изобретателей и серьёзно вредит подавляющему большинству людей, которые хотят делать какие-то полезные вещи с помощью компьютеров…»