Дональд Ремень (Donald Knuth) — учёный-компьютерщик, который достигнул совершеннолетия вкупе со собственной сферой научной деятельности. Талант программера в первый раз проявился у Бича в тринадцатилетнем возрасте, другими словами в середине прошедшего века, когда искусство компьютерного программирования лишь зарождалось. Тогда одна из кондитерских компаний организовала для деток конкурс, в рамках которого им следовало найти, сколько слов можно получить, используя буковкы, входящие в заглавие фирменной плитки шоколада Ziegler’s Giant Bar. Это была чётко сформулированная неувязка, состоящая из различных частей, — как раз таковая, какие ему нравились.
«У меня была обсессивно-компульсивная жилка, побуждавшая меня браться за решение цифровых, дискретных заморочек. И я обожал кропотливо учить огромные коллекции инфы», — вспоминает Ремень.
Ремень, сидя в подвале, методично пролистал все 2000 страничек полного обычного словаря британского языка Funk & Wagnalls. Чтоб ничто не отвлекало от решения конкурсной трудности, он даже смог сказаться нездоровым, и предки дозволили ему две недельки не ходить в школу. Пометив учётные карточки 2-мя знаками, которые были бы исходными для слова, содержащего лишь буковкы, входящие в заглавие шоколадной плитки, — к примеру «Aa», «Ab» и «Ba», — он скользил вниз по столбцам словаря, отмечая пригодные слова. Он нашел, что можно пропустить целые разделы словаря, к примеру те, что посвящены словам, начинающимся с буковкы «C», либо словам, в которых 1-ая буковка «B», а 2-ая «U».
По прикидкам организаторов конкурса, обязано было получиться около 2000 слов, но Кнуту удалось отыскать наиболее 4700. В заслугу за это его проявили по телевидению и угостили шоколадом вкупе со всеми его одноклассниками. А позже было много остальных наград, в том числе 1-ая премия ACM (Ассоциации вычислительной техники) имени Грейс Мюррей Хоппер (Grace Murray Hopper), Государственная научная медаль (National Medal of Science) и премия A.M. Тьюринга (A.M. Turing Award).
В конце концов, Ремень сделал так, что любовь к дискретным цифровым дилеммам соединилась у него с любовью к огромным коллекциям инфы в его magnum opus «Искусство программирования» (The Art of Computer Programming) — серии книжек, работу над которой он начал в 1962 году, ещё будучи аспирантом, и до сего времени не окончил. 1-ый том, в первый раз размещенный в 1968 году, выдержал 42 издания. 2-ой том вышел в 1969 году, 3-ий — в 1973 году. К тому времени Ремень уже работал доктором информатики в Стэнфордском институте (Stanford University), но его волновало, что эта работа помешает ему окончить серию книжек. И вот в 1990 году он брал отпуск, а потом в 1993 году ушёл в отставку, чтоб предназначить остаток жизни созданию семитомного произведения. На данный момент ему 82 года, и он усердно работает над частью B четвёртого тома. По его плану, в этом томе будет не две части, а больше — как минимум, от A до F.
«Искусство программирования» — это больше, чем просто управление для начинающих программистов. Подобно Айзеку Азимову (Isaac Asimov) и Эрику Темплу Беллу (Eric Temple Bell), вплетавшим науку и арифметику в повествования о приключениях персонажей, Ремень услаждается, рассказывая истории о компьютерных науках.
Благодаря данной нам страсти рассказчика Ремень стал одним из основных работающих лиц в истории информатики, и не только лишь как создатель собственного magnum opus. Когда в 1970-х годах издатель прислал ему гранки второго издания второго тома, Бича расстроили размещение и вид чисел, знаков и слов на страничках. Он полетел в Лос-Анджелес, чтоб посмотреть на машинку, печатавшую глянцевые журнальчики, используя их цифровой макет. С её помощью Ремень возлагал надежды сделать лучше эстетический вид собственного произведения, но затея оказалась очень дорогой. Тем не наименее, эта поездка не была никчемной: она побудила Бича приступить к разработке компьютерного языка, позволяющего печатать математические тексты, выставленные в цифровом виде.
«Я не могу удержаться от рассказа, когда встречаю неплохую историю. Я постоянно считал себя не учёным-первопроходцем, а журналистом».
Возвратившись в Стэнфорд, Ремень практически на 10 лет отставил в сторону «Искусство программирования», чтоб создать TEX (произносится «тех») — сложную, революционную программку, позволяющую поместить цифровую типографию в настольный комп. Он сделал эту программку с открытым начальным кодом, стремясь учитывать потребности проф математиков, учёных-компьютерщиков, экономистов, инженеров, языковедов, статистиков и остальных юзеров ПК (Персональный компьютер — компьютер, предназначенный для эксплуатации одним пользователем), страдавших от нехватки технических знаков, вводимых с помощью клавиатуры, и разбиравшихся в сложных формулах лучше, чем издатели их текстов. В мире компьютерных программ, часто чрезвычайно стремительно выходящих из потребления, TEX крепко держит позиции обычного инструмента, позволяющего придать научной статье такую изящность, какая очень упрощает спецам её чтение и осознание.
Не считая того, склонность Бича говорить истории побудила его создать философию грамотного программирования — способа написания компьютерных программ в виде литературных эссе. При таком программировании выходит «грамотная программка», в которой начальный код представляет собой вкрапления в элегантную прозу, написанную на естественном, к примеру британском, языке. Начальный код обеспечивает функциональность и эффективность, а экспозиция создана для читателя-человека, а не для компилятора компа. Тому, кто взялся обновить либо отладить «грамотную программку», не нужно выяснять задействованные её создателем методы, дизайнерские решения и стратегии реализации, что часто представляет собой очень трудоёмкое и дорогостоящее дело. Ремень относится к тем учёным-компьютерщикам, которые соображают, что слова имеют значение.
В феврале журнальчик Quanta брал у Бича интервью в его доме, находящемся на местности Стэнфордского института.
«XX2 век» дает вашему вниманию перевод этого интервью на российский язык.
Для вас постоянно хотелось писать?
Д. К. В детстве меня настраивали на то, что осознать настоящий мир мне будет очень трудно. Я не рассчитывал открыть что-то новое, но мне нравилось письменно выражать восхищение теми либо другими мыслями.
В шестом классе я и пара моих друзей с помощью копировальной машины взялись издавать двухстраничную газету. Мы забавлялись. В старших классах я, будучи редактором данной нам газеты, любой пн трудился ночь (то есть темное время суток) напролёт, чтоб выпустить очередной номер. Конкретно будучи редактором газеты в институте, я в первый раз узрел собственный текст написанным. На младших и старших курсах мы обучались писать обзоры на темы науки и техники. В один прекрасный момент я написал так: «Th5E4 CH3EmIC2Al2 Ca3P4Er». Каждое слово в заметке было хим формулой.
«Каждое слово в заметке было хим формулой…» / Фото — Jill Knuth.
И конкретно это привело вас к вашему magnum opus? Либо, на ваш взор, его возникновение представляет собой другую историю?
Д. К. «Искусство программирования» — это манифест. Он гласит о тех способах исследования, какие я люблю употреблять в арифметике, и о тех способах обучения, какие я приветствую у моих учителей. Начиная с первой странички, я рассказываю историю алгоритмов. В то время учебники, обычно, не изучили человечий нюанс открытий. Они просто обрисовывали результаты научной деятельности: «Вот так работает химия» либо «Вот так работает физика».
А ещё я рассказываю техно историю. Я говорю: «Вот то, что не работает, а вот метод решения данной нам трудности». Заместо того чтоб преподносить одни только факты, я добавляю драму. Учить науку намного легче, когда знаешь последовательность открытий. Не считая того, я не могу удержаться от рассказа, когда встречаю неплохую историю. Я постоянно считал себя не учёным-первопроходцем, а журналистом.
Что представляет собой «Искусство программирования» кроме таковой истории?
Д. К. Опосля 2-ух лет работы над книжкой я сообразил, что её новизна состоит в количественном определении степени совершенства программ. Мне не много сказать, что одна программка лучше иной. Мне охото сказать, что одна программка на 13,8% лучше иной, и разъяснить, как их необходимо ассоциировать.
Пусть создатель A поведал про собственный метод A, а создатель B — про собственный метод B, конкурирующий с методом А. При всем этом создатель A никогда не писал про метод B, а создатель B — про метод A. Не считая того, создатели A и B употребляли различные компы. Работая как нейтральный журналист, я оцениваю оба метода с одной точки зрения. Выяснять, как неплох в действительности тот либо другой метод, — интересная неувязка. Это анализ алгоритмов.
Не значит ли «анализ алгоритмов» то же самое, что и «искусство программирования»?
Д. К. В 1967 году, когда я был на конференции Общества промышленной и прикладной арифметики (Society for Industrial and Applied Mathematics), кто-то задал вопрос меня, чем я занимаюсь. В те деньки в информатике выделяли три области: численный анализ, искусственный ум и языки программирования. Вот и всё. Я сообразил, что мне необходимо придумать заглавие для того, что я делаю.
Новизна моей книжки заключалась в кропотливом исследовании степени совершенства алгоритмов. И я решил, что в последующий раз, когда мне зададут вопросец о том, чем я занимаюсь, я отвечу: «Анализом алгоритмов». Что же все-таки это такое, я определял так: если меня это интересует, это — анализ алгоритмов. Не очень серьезное определение.
«Я знал, что благодаря компьютерному программированию книжные тексты опять сумеют смотреться благопристойно».
Позже я решил сделать лучше это определение так: анализ алгоритмов — это количественное исследование степени их совершенства. Данное исследование распадается на две части: в рамках одной из их рассматриваются различные методы, созданные для решения определённой трудности, в рамках иной — один определенный метод, созданный для решения определённой трудности.
Анализ алгоритмов становился делом всей моей жизни. Я попросил собственного издателя поменять заглавие моей книжки на «Анализ алгоритмов». Издатель дал ответ так: «Это никто не купит». Считаю, что решение издательства было правильным. Тем не наименее, когда 40 лет спустя вышло 5 либо 6 книжек с заглавием «Анализ алгоритмов», я был счастлив.
Но, с вашей точки зрения, программирование не сводится к решению многофункциональных задач. К примеру, разрабатывая TEX, вы стремились к тому, чтоб кривые, соединяющие определённые точки, были «более приятными». Вы пробовали программировать красоту?
Д. К. Моя программка обязана была соединять точки так, как это мог бы созодать мастер-каллиграф. При написании буковкы «S» возникает точка, в которой кривизна заместо положительной становится отрицательной, но некое время линия может идти прямо. Вычерчивая буковкы, их дизайнеры придерживались определённой логики. Я желал поймать не лишь итог этого дизайна, да и склад ума его создателей. То, как они работают, походит на создание компьютерной программки.
Я говорил с дизайнерами, чтоб осознать, что они стремятся достигнуть. Математика нужна им для того, чтоб дизайн получил своё количественное выражение. С помощью арифметики я как будто снабжаю все элементы формы малеханькими цифровыми устройствами набора. К примеру, я могу указать, что у буковкы «А» тут есть точка, там — толщина, тут — углы, там — сужение, горб в нижней части и зарубки определённой длины.
Я никогда не собирался поменять собственной программкой дизайнеров. Я только желал в точности запечатлеть для будущих поколений то, что я и они делали в то время. Благодаря TEX дизайн воспроизводим.
Вы ждали, что TEX получит мировое признание и окажется умопомрачительно жизнестойким?
Д. К. TEX предназначался лишь для меня и моей секретарши. Филлис (Phyllis) [Астрид Бенсон Уинклер (Astrid Benson Winkler)] была восхитительной секретаршей. Она разбирала мой почерк, и делала это потрясающе. Разработка печати шла ко дну, поэтому что испытанные способы становились очень дорогими. Практически все математические труды, размещенные в 1970-х годах, выглядели страшно. В American Mathematical Monthly шрифт подстрочных индексов различался от шрифта основного текста. Я знал, что благодаря компьютерному программированию книжные тексты опять сумеют смотреться благопристойно.
Отладку пробной версии TEX я окончил в апреле 1978 года. В мае у меня было 10 юзеров, в июне — 100, в июле — 1000. И все могли бы сказать: «Эта восхитительная штука нужна». 5 лет спустя я опубликовал то, что, на самом деле, представляет собой сегодняшний TEX. Эта программка была разработана для янки. Потом её начали употреблять европейцы. Потому в 1980-х я сделал так, чтоб она могла работать с различными глобальными языками.
Похоже, вы постоянно стремились что-то открыть. Это так и сейчас?
Д. К. В среднем каждую недельку я создаю 5 новейших программ. Поэты должны писать стихи. Я должен писать компьютерные программки.
Конечная проверка того, понимаю ли я что-то, — моя способность разъяснить это компу. Я могу для вас о чём-то сказать, и вы кивнёте мне головой, да и в этом случае я не могу быть уверен, что выразил свою идея отлично. А комп не кивает головой. Он в точности повторяет всё, что я говорю. Можно одурачить кого угодно, но недозволено одурачить комп.
Вы не сможете не писать, но у вас есть и остальные интересы. Как вы планируете любой собственный денек?
Д. К. Любой денек, до этого чем с кем-то разговаривать, Джек Лондон был должен написать 1000 слов. Это было для него законом: «Никого не понимаю, пока не написал свою тыщу слов!» А в оставшееся время он пил либо правил написанное. У меня иной принцип планирования: поначалу созодать то, что я больше всего терпеть не могу. И в конце недельки я чрезвычайно счастлив.
По правде? Разве можно стать счастливым, сделав что-то ненавистное?
Д. К. Мне чрезвычайно просто встать в позу: «Я — гений, потому не должен чистить туалет». Но даже уборкой туалетов полностью можно заниматься. Мы с [моей женой] Джилл (Jill) заполучили спецкостюмы, комфортные для использования очистителя «Формула 409». Идёшь в туалет, разбрызгиваешь очиститель и, делая это, ощущаешь себя отлично!
Актуальный фуррор личности зависит от того, каковой у неё низший минимум, а не высший максимум. Если для вас удаётся созодать что-то по-настоящему отлично, но есть и что-то другое, что у вас не выходит, это другое будет мешать для вас идти вперёд. Но если практически всё, что вы делаете, у вас выходит, означает, ваша жизнь великолепна. Вот почему я учусь созодать то, что остальные считают противным.
У вас за плечами есть и много проектов, не имеющих ничего общего с информатикой, к примеру, ваша музыкальная композиция Fantasia Apocalyptica. Вы даже выстроили собственный дом вокруг двуэтажного органа. Это обилие тоже нужно для вас для счастья?
Д. К. Я написал пару книжек на богословские темы, в том числе «То, о чём изредка гласит учёный-компьютерщик» (Things a Computer Scientist Rarely Talks About). Эти книжки о том, что нереально обосновать, а не о дилеммах арифметики либо информатики. Моя жизнь не была бы полной, если б всё было ясным и понятным. Магические вещи, которые я не могу разъяснить, смиряют мою гордыню. Есть то, что за пределами моего осознания.
В арифметике я понимаю, какая аксиома — настоящее утверждение. Мне нравится это. Но в моей жизни не было бы почти всех вещей, если б всё было выполнимо. Познание о этом не подавляет меня. Напротив, оно помогает мне не погрязнуть в рутине.
Как принципиально вам окончить «Искусство программирования»?
Д. К. О, я понимаю, что информатика будет и далее жить и развиваться. Вот один из сценариев: заместо сегодняшних компов будут употребляться квантовые и везде воцарится машинное обучение (педагогический процесс, в результате которого учащиеся под руководством учителя овладевают знаниями, умениями и навыками). Тогда я мог бы окончить рассказ о истории неквантовых компов. Я становлюсь ещё наиболее счастливым, когда могу сказать: «Вот и конец истории». Это самый обычной метод представить, в каких критериях я закончу своё основное произведение. Но это не ответ на ваш вопросец.
Вы понимаете историю Тристрама Шенди? Во 2-ой половине XVIII века Лоренс Стерн (Laurence Sterne) написал автобиографическую книжку «Жизнь и представления Тристрама Шенди, джентльмена», которую он публиковал порциями, либо частями. В данной нам книжке практически 100 страничек ушло только на то, чтоб окончить описание первой недельки жизни головного героя. Создатель очевидно желал создать историю жизни полной, но это, естественно, неосуществимо. Стерн писал историю Тристрама Шенди до того времени, пока мог писать.
Я желаю и далее писать отличные рассказы в самой наилучшей, с моей точки зрения, манере и освещать вещи, о которых могу сказать что-то оригинальное. Заместо того, чтоб установить некий срок окончания собственной работы, скажу так: я сделаю столько, сколько смогу. Мне здорово подфартило, что меня несли волны информатики и что я родился в то время, которое оказалось более пригодным для развития моих неповторимых особенностей. Если не учесть «Искусство программирования», я выполнил все главные цели собственной жизни. И на данный момент дело обстоит так: я и впредь буду говорить различные истории, чтоб поделиться ими с читателями.