Архивы: по дате | по разделам | по авторам

В плену у совершенства

Архив
автор : Игорь Гордиенко   12.03.2001

Вполне уместно начать рассказ о Дональде Кнуте с риторического изумления: «И это все - один человек?!» Легендарная персона мировой компьютерной науки, Кнут стоял у основ теории компиляции языков программирования, теории формальных грамматик...

The road to wisdom?
Well it’s plain
and simple to express:

Err
and err
and err again

but less
and less
and less.
Piet Hein


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

На сей день Кнут опубликовал более 20 книг и более 150 трудов по самым разным вопросам компьютерной науки: от исследования цифровых феноменов в библейских текстах и истории происхождения и изменения начертания буквы «S» до абстрактных математических проблем. Будучи профессором математики, он подготовил немало уникальных учебных курсов. Среди многочисленных премий и наград, коими награжден Дональд Кнут, самые значительные - Премия Тьюринга (1974), Национальная медаль за заслуги в науке (1979), которую традиционно вручает президент США (тогда - Джими Картер), Премия Киото (1996). Он является действительным членом Американской академии искусств и наук, Национальной академии наук, Национальной академии инженерных наук. Более двух десятков университетов (в том числе Санкт-Петербургский) шести стран мира признали Кнута доктором honoris causa. Он - одна из немногих фигур, окруженных мифами еще при жизни.

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

В преддверии

Дональд Кнут родился 10 января 1938 года в Милуоки, штат Висконсин. Пусть вам не покажется патокой: с младых лет Дон был влюблен в книги. В библиотеке его матери недавно обнаружилась первая азбука, в которой он тщательно пересчитал все буквы определенных шрифтов. Кнут гордится тем, что рано научился читать и писать и что был самым младшим в клубе книголюбов публичной библиотеки Милуоки. Столь же рано к нему пришла страсть к книгопечатанию. Он вспоминает, как помогал отцу работать с небольшим ротатором, на котором тиражировались церковные тексты (его отец Эрвин был лютеранским проповедником).

Способность мальчика легко манипулировать символами впервые проявились в восьмом классе. Местная кондитерская фабрика объявила конкурс для школьников: кто предложит больше слов, составленных из букв, образующих название фирменной марки шоколада - «Ziegler’s Giant Bar». У судей был заготовлен список из 2500 слов, и они полагали, что превзойти этот результат невозможно. Дональд предложил 4500 (!) слов, но остался недоволен: судьи не разрешили использовать апостроф. Однако деваться фабрике было некуда: школе подарили телевизор, бывший в те годы большой роскошью, а каждый ученик получил по плитке шоколада.

Плодотворная работа Кнута началась в колледже (Milwaukee Lutheran High School). Его научный доклад был отмечен на конкурсе поиска талантов, регулярно проводившимся фондом Вестингауза. Дональд придумал собственную систему мер, которую назвал «The Portzebie System of Weights and Measures». Базовой единицей длины в ней была избрана толщина недавнего выпуска журнала «MAD Magazine», а главная единица энергии называлась «чтоменябеспокоит». Редакторы «MAD Magazine», оценив неординарность мышления студента, выдали ему гонорар в 25 долларов и опубликовали доклад в 33-м номере журнала за июнь 1957 года. По сути, это и есть первая публикация Кнута.

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

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

Начала

Помыслы о карьере профессионального музыканта сами собой отошли в сторону, когда в 1956 году Дональд поступилв Технологический институт Кейза (Case Institute of Technology, ныне Case Western Reserve), Кливленд, штат Огайо.

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

Это случилось, когда, упустив автобус, он слонялся по станции в ожидании следующего рейса. Простое и изящное решение пришло в голову точно по волшебству: Дональд получил отметку «А» и - свободу от занятий по математике до конца семестра. Испытывая некоторые сомнения в такой оценке своих способностей, Кнут занялся изучением предмета самостоятельно, а в следующем семестре снова получил высшую отметку по курсу абстрактной математики. Кроме того, ему было предоставлено право выбора факультативных курсов - с наибольшим благоприятствованием в углубленных занятиях теперь уже любимой математикой.

Первое знакомство с компьютером состоялось в 1956 году. Это был электронный вычислитель IBM 650. С головой погрузившись в документацию, Кнут денно и нощно сочинял программы. В те времена, когда языки высокого уровня еще не получили распространения, программы составлялись на ассемблерах, мнемонических надстройках над машинными кодами. Безусловно, это занятие для сильных духом. Главный вывод, сделанный Кнутом после тяжких экспериментов, был таков: он способен составлять более качественные программы, чем те, что приведены в руководстве к IBM 650.

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

В 1960 году Кнут с отличием окончил институт Кейза и получил степень бакалавра. Одновременно, согласно беспрецедентному решению факультета, за значительные достижения он был удостоен степени мастера. Потом, в 1963 году, последовала докторская степень в области математики, заслуженная в Калифорнийском технологическом институте. В CalTech он и пребывал несколько лет в должности профессора математики. Наряду с этим молодой профессор был консультантом по проблемам разработки программного обеспечения в славной Burroughs Corporation. Там за, казалось бы, неплохую по тем временамсумму в 5500 долларов он спроектировал и написал очень компактный компилятор на Алголе. Дональд просто не знал, что за такие программы корпорации готовы выложить сотни тысяч долларов.

В 1968 году Кнут перешел в Стэнфордский университет, где, спустя девять лет, занял кресло первого мэтра в области компьютерных наук. В 1968-69 годах он работал математиком в отделении телекоммуникаций Института оборонных исследований. В 1972-м и 1973 годах в качестве приглашенного профессора читал лекции по математике в университете Осло, Норвегия.

В 1993 году Дональд Кнут ушел в отставку и получил титул почетного профессора Стэнфордского университета в искусстве программирования. В Стэнфорде под руководством профессора Кнута защитили докторские диссертации 28 соискателей. Но после ухода в отставку он больше не руководил аспирантами и соискателями, ибо знал, что 28 - число совершенное.

Дело жизни

Кнут вышел на стезю профессионального программирования примерно в 1962 году, когда институт был позади. В то время он уже начал давать частные консультации, писать компиляторы для языков программирования. Его имя становилось все более известным среди деятелей компьютерной индустрии. Именно в 1962 году издательство Addison-Wesley обратилось к Дональду с предложением написать книгу о компиляторах. В 1966 году Кнут завершил 3000-страничный манускрипт, в процессе написания которого он разработал универсальный метод разбора для формальных грамматик. Вспоминая то время, Кнут замечает: «Это никуда не годится, писать первую главу три с половиной года». Он полагал, что три тысячи страниц рукописи превратятся в 400, максимум в 500 страниц книги.

Издатели смогли оценить амбициозность проекта, предложенного в качестве первого тома: 3000 рукописных страниц превращались почти в 2000 страниц печатного текста! И в Addison-Wesley решили запустить грандиозную серию - энциклопедию алгоритмов и программирования в семи томах. Так было принято решение о Magnum Opus Дональда Кнута - «Искусство программирования для ЭВМ» (как в свое время называлась книга в переводе нашего издательства «Мир»). В 1968 году был опубликован первый том, в 1969-м - второй том, в 1973-м - третий.

Надо заметить, что книги этой серии уже больше двадцати лет остаются заветным источником знаний для программистов всех стран. В одном из интервью Билл Гейтс заявил, что каждый «хороший программист» просто обязан прочитать первый том главного произведения Кнута. Самый богатый человек мира рассказывал, что сам проявил невероятное усердие и дисциплину, усвоив за несколько месяцев все три тома. Тогда же Гейтс сделал заманчивое предложение: те, кому удастся то же самое, могут смело присылать ему свои резюме - о дальнейшей судьбе счастливчиков он позаботится.

По словам самого Дональда Кнута, работая над книгой «Искусство программирования», он осознал, что это главное дело его жизни. Он ощутил потребность «организовать и суммировать знания о программировании компьютеров, дать этой науке строгие исторические и математические основания». К 1976 году были написаны три тома, которые разошлись общим тиражом не менее миллиона экземпляров.

Девять лет одного года

После нескольких лет невероятно интенсивной подготовки книг «Искусства программирования» Кнут прервал работу над сериалом, и неожиданно для самого исследователя перерыв продлился до 1986 года. За это время были созданы две системы подготовки текстов, а именно издательская система TеX (универсальный редактор) и конструктор шрифтов Metafont. Побочными продуктами этого процесса стали языковые системы WEB и CWEB - средства структурного документирования программ в сочетании с примыкающей методологией Literate Programming.

Название редактора Кнут составил из букв древнегреческого слова «искусство» - TеX (тау-эпсилон-хи) 1. Считается, что TеX был одной из первых серьезных программ, которые распространялась с открытыми исходниками. Ходит легенда, что заняться редактором для публикации научных текстов Кнута побудила тогдашняя попытка Xerox монополизировать подобные средства. Сам же он рассказывает, что ему просто захотелось облегчить жизнь себе и своим секретарям. Он и написал первую версию, которая распространялась в Стэнфорде свободно для всех желающих.

Все было спокойно до тех пор, пока в 1978 году в Стэнфорд не попал студент из Массачусетского технологического (как выяснилось впоследствии, это был нынешний Заслуженный инженер Sun Microsystems профессор Гай Стил [Guy Steele]). Возвратившись в MTI, он транслировал исходники редактора на мэйнфрейм. Тут все и началось… Сначала было десять пользователей, потом сто, потом тысяча, потом… «Это стало настоящим кошмаром, - рассказывает Кнут. - По мере увеличения числа пользователей выявлялось все больше ошибок, которые все труднее было исправлять». На подходе к десяти тысячам пользователей Кнут принял твердое решение: сообщил о прекращении поддержки версии и начал все с чистого листа. Позднее он пришел к выводу, что деградация первого ТеХ и возникновение нового, более совершенного продукта были объективной необходимостью - частью мирового замысла и порядка.

Итак, на протяжении почти девяти лет Дональд Кнут занимался главным образом своим редактором и его дополнениями и расширениями. Наконец, он понял, что в этих занятиях может пройти вся жизнь. А как же Magnum Opus? И Кнут составил план, рассчитанный на четыре года, в течение которых намеревался постепенно отойти от работ над TеX. Что и было успешно и почти безболезненно сделано.

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

[i38724]


1 (обратно к тексту) - Читается, соответственно, по-гречески, а не по-латыни, то есть «тех», а не «текс». - Ред.

Путь без конца

Посвятить разработке текстового редактора девять лет, а не год, как было задумано, - это воистину гениальный просчет, такой же, как попытка в несколько лет закончить семитомную серию «Искусство программирования».

Первые строчки книги Кнут написал в 1962 году, после заключения контракта с Addison-Wesley. Чтобы все-таки закончить свой суперпроект, в 1993 году он ушел в отставку, пытаясь высвободить время для главного дела. Вообще, замечает автор, он предпочитает не разбрасываться: ему всегда было удобнее работать в пакетном режиме.

К чести издателей из Addison-Wesley, они не намерены отступаться от продолжения проекта. 4-й том общим объемом 2000 страниц (в трех подтомах) планируется выпустить в 2004 году, а 5-й том - в 2009 году. Потом должны последовать 6-й и 7-й тома - если, как замечает Кнут, его исследования к тому времени еще будут представлять сколь-нибудь ценный опыт.

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

Совершенство - вот главное пристрастие и главный атрибут жизни для Кнута. К нему сходятся сообщения обо всех ошибках, обнаруженных читателями его книг и пользователями его программ, и за каждую обнаруженную ошибку Кнут выплачивает символический «двоичный доллар», равный 2,56 обычного доллара (256 - количество двоичных комбинаций в 8-разрядном байте).

Дональд Кнут знаменит тем, что первым заявил об эстетике программ. Он согласен, что программа никогда не может быть доведена до полного совершенства - просто потому, что она живет, исполняется. Но к совершенству должно стремиться!

И программы могут быть изящными, даже очаровательными. А само программирование нужно отнести к сфере муз. Алгоритмы же подобны таким чудесным проявления человеческого гения и духа, как музыка и стихи.

Дом на холмах

Дональд Кнут проживает в доме на холмах неподалеку от кампуса Стэнфордского университета вместе с женой Джилл. У них двое детей - сын Джон и дочь Дженнифер. У входа в дом на стене выгравированы слова датского поэта Пита Хейна, вынесенные в эпиграф. Понять их может каждый.

Идет работа над четвертым томом. Отвечая на многочисленные вопросы о причинах ранней отставки с должности почетного профессора, Кнут поясняет: чтобы завершить «Искусство программирования», ему требуется еще не менее двадцати лет полного посвящения себя только этому проекту. Кнут запретил себе дальние поездки, с публикой контактирует лишь во время регулярных лекций из цикла «Раздумья о программировании», на которые люди съезжаются издалека.

Мастер выдает по одной печатной странице в день. Когда-то он говорил о двух страницах, но сейчас признает, что это многовато. Нужно быть хорошим отцом, и хорошим мужем, а производство в режиме 24х7 мешает. Поэтому он обещает писать для четвертого тома по 250 страниц в год.

Непоколебимую веру Кнута в достижение поставленной цели поддерживают образ жизни и факторы наследственности. Его мать, которой уже 88 лет, пребывает в добром здравии и до сих пор работает в офисе агентства недвижимости. Отец, правда, скончался в 62 года. Но дед по отцовской линии дожил до 97, и Кнут собирается следовать примеру деда.

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

Орган, установленный в доме Кнутов, был изготовлен лос-анжелесской компанией Abbot & Sieker и получил уникальное название «Opus 67». В нем 812 деревянных и металлических труб, разделенных на три клавишные и педальную секции. Голосовые свойства органа выдержаны в традиции North German Baroque, характерной для времен Баха. Немало деталей инструмента изготовлено по заказам Abbot & Sieker в Германии и Швейцарии.

Водружение органа в доме состоялось 6 июня 1975 года. Первым к клавиатуре прикоснулся Рут Шепман, исполнивший произведения Фрескобальди, Букстехюде, Баха, Фюлленвайдера, Элена и Мендельсона. После чего Дон и Джил в четыре руки сыграли «Каприз для двоих» («Fancy For Two To Play») Томаса Томкинса.

Отец Дональда служил лютеранским проповедником и был церковным органистом. Дональд обучался игре на пианино, потом - на органе. Во время работы в CalTech его часто и надолго приглашали как органиста в лютеранскую церковь в Пасадене, штат Калифорния.

Дональд редко играет для публики, и, по его ироничному замечанию, за это публика должна быть ему благодарна. Но как член общества любителей камерной музыки он порой участвует в концертах, нередко - устраиваясь зароялем Bцsendorfer, стоящим в доме Кнутов напротив органа. Кроме того, с роялем соседствует пианино Monarch, унаследованное от отца. Многочисленные полки заняты партитурами произведений для игры в четыре и восемь рук.

Дональд Кнут является членом Американской гильдии органистов (с 1965 года), Американского математического общества (1961), Ассоциации компьютерной техники (ACM) (1959), Математической ассоциации Америки (1959), Общества промышленной и прикладной математики (1965), действительным членом Британского компьютерного общества (1980), почетным членом IEEE (1982).

Кнут обладает правами на пять патентов США. Он был членом редакционных коллегий 31 периодического издания! До сих пор остается редактором «Applied Mathematics Letters», «Combinatorica, Discrete and Computational Geometry», «Japan Journal of Industrial and Applied Mathematics», «Journal of Algorithms», «Journal of Computer and System Sciences», «Mathematica Journal», «Random Structures and Algorithms», «Software Concepts and Tools» и др.

Каждые полтора года ACM Special Interest Group on Algorithms and Computing Theory и IEEE Technical Committee on the Mathematical Foundations of Computing присуждают Премию Дональда Э. Кнута - за вклад в основы компьютерной науки. Премия состоит из двух частей: 5000 долларов собственно вознаграждения и 1000 долларов для прибытия к месту торжественного события и пребывания там. Но в данном случае, как вы понимаете, дело не в деньгах…

Врезка 1: Дональд Э. Кнут. Искусство программирования. Пер. с англ. - М.: Издательский дом «Вильямс», 2000
Врезка 2: WEB-мастер


Webлиография

  1. Addison-Wesley Publishing Family.

  2. Advanced RISC Machines (ARM).

  3. The Art of Computer Programming.

  4. Association for Computing Machinery (ACM) - Turing Award.

  5. Attribute Grammars.

  6. Beyond RISC - The Post-RISC Architecture.

  7. California Institute of Technology.

  8. Case Western Reserve University.

  9. Catalog of Compiler Construction Products.

  10. Computers: History and Development.

  11. Computer Musing.

  12. CWEB program for experiments.

  13. Digital Typography.

  14. Free Compilers and Interpreters.

  15. History of Computing - IBM 650.

  16. MMIX.

  17. Don Knuth’s Home Page.

  18. Knuth: Digital Typography.

  19. Donald Knuth wins Kyoto Prize.

  20. Literate Programming Library.

  21. MAD Magazine.

  22. National Medal of Science.

  23. Newsweek.com.

  24. Softpro Books - Art of Programming.

  25. Stanford University.

  26. Webopedia - algorithms.

  27. Webopedia - machine language.

  28. Westinghouse Science Honors Institute.


Библиография

  • Albers, Donald J. and G.L. Alexanderson (eds.), Mathematical People: Profiles and Interviews (Boston: Birkhauser, 1985).

  • Gates, Bill, «Algorithms and Blues: If You Can Fathom Programming Text, Send Bill a Resume», The Toronto Sun, April 26, 1995, Section Connect, p. 46.

  • Knuth, Donald E., The Art of Computer Programming, Volume 1: Fundamental Algorithms, Second Edition (Reading, MA: Addison-Wesley).

  • Knuth, Donald E., Literate Programming, CSLI Lecture Number 27, Center for the Study of Language and Information, 1992.

  • Shasha, Dennis and Kathy Lazere, Out of Their Minds: The Lives and Discoveries of 15 Great Computer Scientists (New York: Springer-Verlag, 1995).

  • Woehr, Jack, «An Interview with Donald Knuth: One of the World’s Top computer Scientists», Dr. Dobb’s Journal, Vol. 21; No. 4; p. 16, April 1996.

  • Дональд Э. Кнут. Искусство программирования.
    Пер. с англ. - М.: Издательский дом «Вильямс», 2000

    Свершилось!

    Возможно, именно этим возгласом многие математики и компьютерщики приветствовали долгожданное переиздание трехтомника Дональда Кнута - классической монографии по составлению и анализу компьютерных алгоритмов. Те пухлые, мышиного цвета талмуды первого русского издания, вышедшие почти четверть века назад, славно потрудились на ниве автоматизации народного хозяйства, став настоящим бестселлером (насколько это возможно при отсутствии свободного рынка). Эта увесистая серия входила в золотой фонд любого уважающего себя специалиста по АСУП, достать же ее в библиотеках было практически невозможно: редкие счастливчики держали у себя драгоценные тома годами. Хорошо помню резкий «скачок акций» Кнута в родной alma mater в связи с открытием специализации «инженер-программист». Рецидивы прошлого, кстати, дают себя знать и поныне: узнав о готовящемся в «Вильямсе» переиздании, ваш покорный слуга, как и многие другие поклонники искусства программирования, сделал онлайновый заказ на них еще в канун Рождества и с тех пор не раз стоически переносил объявления на сайте о переносе даты выхода в свет Кнута-2000. Что ж, ожидание не было напрасным: свежеиспеченная троица надежно обосновалась на моем столе. Раздобыв по такому случаю старые, видавшие виды тома прежнего издания, могу засвидетельствовать: «апгрейд» Кнута до «новой версии» вполне оправдан хотя бы потому, что ни искусство программирования, ни искусство полиграфии все эти годы не теряли времени даром.

    Разумеется, не терял времени и сам Дональд Кнут, значительно дополнивший и исправивший главный труд своей жизни. Им внесены в текст сотни правок, многие из которых на счету его онлайновых корреспондентов. К слову, главный «искусствовед программирования» держит слово, исправно выплачивая символические 256 центов за каждую ошибку, найденную в тексте монографии (что несколько напоминает тактику разработки open source, столь популярную сегодня). Судя по тому, как непросто отыскать брешь в фундаментальных построениях маэстро Кнута, этот гонорар просто бесценен для его обладателя.

    Творчески перерабатывая материал в духе времени, автор вместе с тем остался верен «генеральной линии», намеченной им добрые четыре десятка лет назад: система нумерации глав не изменилась ни на йоту, при этом каждый из томов остался самодостаточным и практически независимым по тематике от двух других. Новая версия перевода учла изменения, произошедшие в русскоязычной терминологии за эти годы, заменив, к примеру, допотопные «ЭВМ» современными «компьютерами», «табло» - «диаграммами», а «отрезки» - «сериями». Вместе с тем отсутствие слова «компьютер» в русскоязычном названии серии (как известно, Кнут назвал свое детище «The Art Of Computer Programming») мне представляется довольно спорным, особенно в наши дни, когда значение термина «программирование» размыто донельзя (примером тому - НЛП).

    Верстка нового трехтомника просто изумительна, и во многом благодаря стараниям автора, который задумал и воплотил в жизнь настольные издательские системы TеX и Metafont, идеально подходящие для подготовки математических книг, а также лично бдел над оригинал-макетом своего детища. И все же не обошлось без ложки дегтя: схема-вкладыш из 3-го тома, иллюстрирующая слияние массивов данных на лентах (поистине транспарант, который впору вешать на стену), в «новом» Кнуте просто-напросто впечатана в текст в виде нескольких «слепых» страниц с ненавязчивым призывом «сделай сам». Не исключено, впрочем, что это было допущено намеренно, дабы погрязшие в drag-n-drop компьютерщики не забыли, как следует обращаться с ножницами и клеем.

    Коллекция завершающих каждую главу алгоритмических упражнений, любовно собираемых автором на протяжении четырех десятилетий (именно их красоте и изяществу книга во многом обязана своей популярностью), выросла чуть ли не вдвое. Каждое из них традиционно оценивается в баллах сложности, где 50 баллов по «шкале Кнута» представляют неразрешимую научную проблему, а «штиль» подразумевает немедленный ответ. Впечатляет стремление автора быть на острие прогресса даже в упражнениях: так, цена одной из задач, предлагаемых Кнутом в каждом томе «для затравки» (!), «усохла» с 50 баллов в старом издании до 45 в новом. Причиной «девальвации» стало… всколыхнувшее недавно математический мир доказательство Великой теоремы Ферма!

    Что ждет нас, читателей, в XXI веке? Не пора ли подыскивать место на полках для следующих томов «Искусства программирования» (насколько известно, серия должна включать семь томов)? На эти и многие другие вопросы Кнут отвечает на своей Web-страничке. По словам автора, выход английской версии 4-го тома, посвященного комбинаторным алгоритмам и рекурсии, запланирован на 2003 год, но зато он «распухнет» настолько, что выйдет тремя отдельными книгами - «Алгоритмы перебора с возвратом», «Алгоритмы на сетях и графах», «Оптимизация и рекурсия». Морально устаревшую машину MIX в трудах Кнута к тому времени вытеснит новая машина MMIX (не путать с MMX!), имеющая полноценную RISC-архитектуру.

    Стало уже притчей во языцех высказывание Билла Гейтса об «Искусстве программирования»: он настоятельно рекомендует всякому, кто прочитал эти тома от корки до корки, отослать ему свое резюме. Не оставаясь в долгу, Кнут включает в предисловие афоризм самого Билла о том, что «за последние двадцать лет мир изменился». Что ж, изменения действительно налицо. И радует тот факт, что в следующий век программисты всея Руси вступят, имея под рукой обновленные книги Дона Кнута. А уж то, что эти книги позволяют справиться с более серьезными проблемами, чем написание резюме, можете быть уверены.

    Денис Коновальчик
    [dyukon@mail.ru]

    WEB-мастер

    Должен признаться, что выбор названия отчасти злонамерен. В семидесятые я, как и все, был насильно вовлечен в реализацию идей структурного программирования, поскольку не мог вынести обвинения в неструктурированности своих программ. Теперь у меня есть возможность поквитаться. Вводя термин «грамотное программирование», я возлагаю на всякого, кто его слышит, моральное обязательство. Никто ведь не захочет признать, что пишет неграмотные программы.
    Дональд Э. Кнут  [1]

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

    • Во-первых, «нормальный» код гораздо чаще читается людьми, чем компилятором.

    • Во-вторых, «нормальный» программист читает гораздо больше кода, чем пишет.

    • В-третьих, очень небольшая часть производимого всеми программистами кода превращается в «устройства» (регулярно используемый исполняемый код).

    На поверку программирование оказывается по преимуществу «коммуникативной», а не «производственной» практикой, и проблемы программирования как профессии - по большей части проблемы, типичные для коммуникативных практик: нормирование «речи» «языками» и развитие «языков», исходя из потребностей «речевой» выразительности и объяснительной потенции.

    В кавычках «язык» и «речь» стоят только потому, что «язык» здесь - аналог не только языков (включая профессиональные арго), но и нормирующих знаковых систем, языками в строгом смысле не являющихся (математической и химической нотации, биологической номенклатуры, схемотехники, чертежных норм).

    «Грамотное программирование» и WEB

    В своей ранней статье «Грамотное программирование» («Literate Programming» можно перевести и как «просвещенное программирование») Кнут предлагает изменить основную парадигму: «Вместо того, чтобы полагать своей главной задачей инструктирование компьютера, давайте сконцентрируемся на объяснении того, чего мы хотим от компьютера, человеку»  [1].

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

    WEB 1 - это, по сути, метаязык, строящийся на основе двух формальных языков: языка программирования и языка разметки текста. Первоначально Кнут использовал Паскаль и TеX, соответственно, но заложил подход достаточно общий, чтобы впоследствии круг поддерживаемых языков программирования расширился (сегодня он включает C, C++, Java, Lisp, ML и др.).

    Из используемых систем на базе WEB (их число перевалило за дюжину) наибольшее распространение получила, видимо, CWEB, разрабатываемая Кнутом и Сильвио Леви с 1987 года  [4]; CWEB адаптирована к использованию C в качестве языка программирования. На сайте  [3] можно найти примеры использования других языков программирования и эксперименты с другими языками разметки. В этой главке я использую CWEB как пример WEB-системы.

    CWEB предполагает, что программист структурирует свою работу, разбивая ее на «секции» (которым могут соответствовать «модули», «подпрограммы/функции» или просто фрагменты кода; Кнут и Сильвио рекомендуют ограничиться «дюжиной строчек»  [4]), причем каждая секция состоит из трех частей:

    1. TеX-часть, содержащую разработческую документацию: разъяснение содержимого секции,

    2. промежуточную часть, содержащую специфические для секции макроопределения, и

    3. C-часть, содержащую собственно код.

    Далее предполагается, что все изменения, которые вносятся в программу, производятся на уровне CWEB-файлов - «метаисходников» в своем роде. CWEB-файл подвергается двоякой обработке:

    1. программа CTANGLE генерирует из него C-файл, подвергающийся затем трансляции (причем он снабжается директивами препроцессора, потребными для того, чтобы отладчик и другие штатные инструменты программиста отсылали его к CWEB-«метаисходнику», а не к тексту на C);

    2. программа CWEAVE создает TеX-файл, содержащий код секции (оформленный в соответствии с традиционными типографскими соглашениями о публикации исходных текстов) и пояснения к нему. Новейшая версия (3.61) допускает «отливку» также в формат PDF с гиперссылками. Вполне логично разработчики назвали возможность создания гипертекстовой документации «гипердокументацией».

    Таким образом поддерживается синхронность нелинейного (состоящего из «переплетающихся», как паутина (web), кусков) кода и разработческой документации. Будучи использованной, WEB-система навязывает программисту элементы грамотности по Кнуту - концентрацию на экспозиции материала и стиле (что, разумеется, не гарантирует адекватность этого стиля), начиная от декомпозиции программ на секции и кончая такими вещами, как выбор адекватных имен и использование понятных конструкций.

    WEB и Web: код как публичный контент

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

    Эти соображения, а также недавно введенная в инструментарий упомянутая идея «гипердокументации» (как с перекрестными ссылками, так и ссылками на код) позволяют взглянуть на идеи грамотного программирования в несколько ином аспекте: исходный код становится просто одним из видов публичного контента, доступного посредством совокупности соглашений и их реализаций, известных как WWW. И оказывается, что WEB-мастер Кнут намного опередил время, еще в середине восьмидесятых введя идею - говоря языком гипермедиа - множественного рендеринга контента - ныне лежащего в ядре развития Web, - я имею в виду X(HT)ML.

    Построение исполняемого кода (или интерпретация кода) становится одним из типов рендеринга. И, может быть, не менее важно то, что развитые браузеры и редакторы гипермедиа потенциально способны стать средством, гораздо более приспособленным для чтения и написания кода программистами «безбумажной» эпохи, чем ориентированные в основном на бумагу TеX и LaTеX.

    Максим Отставнов
    [maksim@otstavnov.com]


    1 (обратно к тексту) - Его существование - одна из причин, по которым программисты предпочитают труднопроизносимое «triple-double-U (WWW)» попсовому «Web» (читающемуся так же, как «WEB»). «WEB» изначально обозначало «паутину», в то время, как «Web» в «WorldWide Web» на студенческом сленге - Webster’s (равно как и любой другой объемный словарь или справочник).

    Источники

    [1] (обратно к тексту) - Donald E. Knuth. Literate Programming // The Computer Journal, 27(2):97{111, May 1984. - Ранняя статья, компактно излагающая концепцию грамотного программирования.

    [2] (обратно к тексту) - Donald E. Knuth. Literate Programming (CSLI Lecture Notes, No. 27). - Stanford: Center for the Study of Language and Information, 1992, ISBN 0-937073-80-6. - Книга, пространно излагающая концепцию грамотного программирования.

    [3] (обратно к тексту) - www.literateprogramming.com - Центр «тусовки» приверженцев идеи грамотного программирования. Содержит массу ссылок на инструментарий, документацию, публикации, другие сайты, посвященные тому же предмету. Несмотря на «замерзший» список обновлений, актуальные обновления достаточно часты.

    [4] (обратно к тексту) - Дональд Э. Кнут, Сильвио Леви. «Система структурного документирования CWEB» (пер. с англ. Сергея Коропа), 36 с. - Очень хороший перевод Руководства пользователя CWEB.

    © ООО "Компьютерра-Онлайн", 1997-2019
    При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.