Дональд Кнут рассказывающий истории

  •  21 /
Дональд Кнут всю свою жизнь рассказывал истории о компьютерных программах.
Spread the love

Для новатора в области компьютерных наук Дональда Кнута хорошее кодирование является синонимом красивого выражения.

Дональд Кнут — ученый-компьютерщик, достигший совершеннолетия в своей области. В период зарождения компьютерного программирования в середине прошлого века компания по производству сладостей провела конкурс, в котором были задействованы его таланты в 13-летнем возрасте. В конкурсе детям предлагалось определить, сколько слов можно составить из букв названия конфеты: «Гигантский батончик Циглера». Это была четко определенная проблема с отдельными частями, именно такая, которую он любил.

«У меня была обсессивно-компульсивная полоса, которая влекла меня к цифровым, дискретным проблемам. И мне нравилось копаться в больших массивах информации», — сказал Кнут.

Кнут методично пролистал 2000-страничный полный словарь «Funk & Wagnalls» в подвале. Он даже убедил своих родителей, что он болен, выиграв две недели учебы в школе, чтобы поработать над проблемой. После маркировки учетных карточек заголовками, такими как «Aa», «Ab» и «Ba» на основе начала возможных слов с использованием букв из названия конфеты, он прошел вниз по столбцам словаря, отмечая слова, которые соответствуют критериям. Он обнаружил, что может пропускать целые разделы словаря, например, страницы для слов, начинающихся с буквы «C», или части слов «B», второй буквой которых является «U».

Официальные лица конкурса определили примерно 2000 слов, которые они могли ожидать, но Кнут нашел более 4700. В награду он получил место на телевидении и шоколад для всего класса. В дальнейшем он получил еще много наград, включая первую премию ACM Grace Murray Hopper, Национальную медаль науки и премию AM Turing .

В конце концов Кнут объединил свою двойную любовь к дискретным цифровым задачам и большие коллекции информации в своем главном опусе «Искусство компьютерного программирования» — серии книг, которую он начал писать в 1962 году, будучи аспирантом, и еще не завершил. Он опубликовал первый том в 1968 году, а текущая версия находится в 42-м издании. Том 2 последовал в 1969 году, а том 3 — в 1973 году. К тому времени он был профессором информатики в Стэнфордском университете, но беспокоился, что его работа помешает ему завершить свои книги. Поэтому в 1990 году он взял отпуск, а затем ушел на пенсию в 1993 году, чтобы провести остаток своей жизни, завершая сборник из семи томов. Сейчас ему 82 года, он усердно работает над частью B четвертого тома и ожидает, что в книге будут хотя бы части от A до F.

Кнут в настоящее время работает над четвертым томом B книги «Искусство компьютерного программирования». Он ожидает, что в нем будет еще как минимум четыре части, а во всем наборе будет еще три тома.

Кнут в настоящее время работает над четвертым томом B книги «Искусство компьютерного программирования». Он ожидает, что в нем будет еще как минимум четыре части, а во всем наборе будет еще три тома.

Искусство программирования — это больше, чем руководство. Подобно тому, как Исаак Азимов и Эрик Темпл Белл вплетали повествования и персонажей в свои научные и математические истории, Кнут с удовольствием рассказывает истории о компьютерных науках.

«Лучший способ общаться от одного человека к другому — через рассказ», — сказал он.

Эта страсть к общению помогла ему сыграть еще одну главную роль в истории компьютерных наук, помимо его выдающегося произведения. Когда его издатель прислал ему гранки для второго издания тома 2 в 1970-х годах, Кнут был обеспокоен расположением и внешним видом чисел, символов и слов на страницах. Он прилетел в Лос-Анджелес, чтобы увидеть машину, которая печатает глянцевые журналы в цифровом формате, надеясь, что это может обеспечить эстетическое облегчение, но это было слишком дорого. Тем не менее, в этой поездке он начал разработку компьютерного языка, который позволил бы ему набирать математику в цифровом виде.

Я не могу устоять перед хорошей историей. Я считал себя не пионером, а журналистом.

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

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

Журнал Quanta говорил с Кнутом в феврале в его доме в кампусе Стэнфорда. Интервью было сокращено и отредактировано для ясности.

Вам всегда было интересно писать?

Вначале мне сказали, что реальный мир будет для меня слишком трудным. Я не ожидал обнаружить что-то новое, но мне нравилось выражать свое удовольствие от идей в письменной форме.

В шестом классе мы с парой друзей начали писать двухстраничную газету на том же аппарате. У нас были анекдоты. В старшей школе каждый понедельник вечером в качестве редактора газеты я всю ночь готовил газету. Я увидел свою первую строчку в колледже в качестве студенческого редактора бумажных копий. В мои младшие и старшие классы мы начали инженерный и научный обзор. Например, я написал: «Th 5 E 4 CH 3 EmIC 2 Al 2 Ca 3 P 4 Er». Каждое слово было химической формулой.

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

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

И что привело к вашему великому произведению? Вы думаете об этом как об отдельной истории?

Искусство программирования — это манифест. В нем описывается, как я люблю заниматься математикой и как мне хотелось бы, чтобы меня учили. Начиная со страницы 1, я рассказываю историю алгоритмов. В большинстве учебников того времени человеческая сторона открытий не рассматривалась. Они просто сказали: «Так работает химия» или «Так работает физика».

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

Помимо этой истории о чем Искусство программирования?

Через два года написания моей книги я понял, что ее новизна заключается в количественном определении того, насколько хороша программа. Я не просто хотел сказать, что одна программа лучше другой. Я хотел сказать, что один на 13,8% лучше другого, и объяснить, как их сравнивать.

Автор A говорил об алгоритме A, а автор B говорил о своем конкурирующем алгоритме B. И автор A никогда не писал об алгоритме B, а автор B никогда не писал об алгоритме A. Кроме того, авторы A и B использовали разные компьютеры. Как нейтральный журналист, я объяснил и то, и другое с одной точки зрения. На вопрос: «Насколько хорош алгоритм на самом деле?» это забавная проблема. Это анализ алгоритмов.

Является ли «анализ алгоритмов» просто другим способом сказать «искусство компьютерного программирования»?

Я был на конференции Общества промышленной и прикладной математики в 1967 году, когда кто-то спросил, чем я занимаюсь. В те дни информатика была разделена на числовой анализ, искусственный интеллект и языки программирования. Вот и все. Я понял, что мне нужно имя для того, что я делаю.

Новизна моей книги заключалась в тщательном исследовании того, насколько хороши алгоритмы. Я решил, что в следующий раз, когда мне зададут этот вопрос, я скажу: «Анализ алгоритмов». Мое определение было: если меня это интересует, то это анализ алгоритмов. Это было не очень хорошее определение.

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

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

Анализ алгоритмов должен был стать делом моей жизни. Я сказал своему издателю изменить название моей книги на «Анализ алгоритмов». Мой издатель сказал: «Это никогда не будет продаваться». Они приняли правильное решение. Тем не менее я был счастлив, когда 40 лет спустя вышло пять или шесть книг с названием « Анализ алгоритмов» .

Но для вас программирование — это не только функциональность. Например, когда вы проектировали TeX, вы хотели найти «наиболее приятную кривую», соединяющую определенные точки. Вы пытались запрограммировать красоту?

Моя программа должна была каким-то образом соединить точки, чтобы реконструировать то, что сделал бы хороший каллиграф. Буква «S» указывает на то, что кривизна меняется с положительной на отрицательную. Тогда, может быть, какое-то время он останется неизменным. Дизайнеры письма следовали некоторой логике, чтобы превратить линии в буквы. Я хотел запечатлеть не только результат дизайна, но и разум, стоящий за ним. Это похоже на написание компьютерной программы.

Я поговорил с дизайнерами, чтобы понять, чего они пытались достичь. Математика использовалась для количественного отражения дизайна. Что касается математики, я ставлю маленькие циферблаты на все. Я мог бы сказать, что буква «А» имеет эту точку, ту толщину, углы здесь, сужение там, выступ внизу и определенную длину засечки.

Я никогда не собирался заменять дизайнеров. Я только хотел запечатлеть для будущих поколений именно то, что мы делали тогда. С TeX дизайн воспроизводится.

Кнут в своем офисе в Стэнфорде вместе с дизайнером шрифтов Германом Цапфом в 1980 году, всего через несколько лет после выпуска типографической программы Кнута, TeX.

Кнут в своем офисе в Стэнфорде вместе с дизайнером шрифтов Германом Цапфом в 1980 году, всего через несколько лет после выпуска типографической программы Кнута, TeX.

Ожидали ли вы глобального признания TeX?

TeX должен был быть только для меня и моей секретарши. Филлис [Астрид Бенсон Винклер] была замечательным секретарем. Она умела читать мой почерк и сделать его красивым. Технология печати падала вниз, потому что проверенные методы становились слишком дорогими. Почти все статьи по математике, опубликованные в 1970-х годах, выглядели ужасно. В American Mathematical Monthly нижние индексы были шрифтом, отличным от шрифта основной строки. Я знал, что компьютерное программирование может снова сделать книги красивыми.

Я закончил отладку пробной версии TeX в апреле 1978 года. В мае у меня было 10 пользователей. В июне у меня было 100 пользователей. В июле у меня было 1000. Каждая новая группа говорила: «У вас должна быть эта функция». Пять лет спустя я выпустил то, что по сути является TeX, который у нас есть сейчас. Это было разработано для американцев. Потом его начали использовать европейцы. Итак, в 1980-х годах я заставил это работать для мировых языков.

Похоже, что открытие всегда было частью вашего процесса. Это остается правдой сегодня?

Я пишу в среднем пять новых программ каждую неделю. Поэты должны писать стихи. Я должен писать компьютерные программы.

Окончательная проверка того, понимаю ли я что-то, — могу ли я объяснить это компьютеру. Я могу тебе что-то сказать, и ты кивнешь головой, но я не уверен, что хорошо объяснил. Но компьютер не кивает. Он в точности повторяет то, что я ему говорю. В большинстве случаев вы можете блефовать, но не с компьютерами.

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

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

Вы проводите дни за писанием, но у вас есть и другие интересы. Как вы подходите к каждому дню?

Джек Лондон писал 1000 слов каждый день, прежде чем поговорить с кем-нибудь. Он был полностью: «Оставьте меня в покое, пока я не наберу тысячу слов!» Затем он выпивал или проверял остаток дня. Нет, мой принцип расписания — делать то, что я больше всего ненавижу в своем списке дел. К концу недели я очень счастлив.

В самом деле? Как то, что вы ненавидите, делает вас счастливым?

Мне было бы очень легко сказать: «О, позволь мне быть гением и никогда не мыть унитаз». Но даже мыть туалеты можно. [Моя жена] Джилл и я получили униформу, в которой есть прорезь для пылесоса 409. Вы идете туда, брызгаете и чувствуете себя хорошо, чистя туалет!

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

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

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

У вас также есть много проектов, не имеющих ничего общего с информатикой, например, ваша музыкальная композиция Fantasia Apocalyptica. Вы даже построили свой дом вокруг двухэтажного органа. Это разнообразие тоже делает вас счастливыми?

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

В математике я знаю, когда теорема верна. Мне нравится это. Но у меня не было бы много жизни, если бы все было возможно. Это знание меня не разлучает. Скорее, это гарантирует, что я не застряну в колее.

Имеет ли значение, законченность «Искусства компьютерного программирования»?

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

Вы знаете историю Тристрама Шенди? Лоуренс Стерн в конце 1700-х годов написал автобиографическую книгу «Жизнь и мнения Тристрама Шенди, джентльмена», которую он опубликовал частями или частями. Всего за первую неделю его жизни там около 100 страниц. Он хочет, чтобы история жизни была полной, но, конечно, у него не получается. Стерн писал историю Тристрама Шенди до тех пор, пока не мог больше писать.

Я хочу продолжать писать хороший контент наилучшим из известных мне способов и освещать вещи, о которых у меня есть что сказать оригинально. Я сделаю все, что в моих силах, вместо того, чтобы говорить, что мне нужно закончить к определенному сроку. Мне так повезло кататься на волнах и я родился в то время, которое было как раз подходящим для моей специфической особенности. Теперь я достиг всех целей своей жизни, кроме «Искусства компьютерного программирования». Я в ситуации, когда я продолжу рассказывать любые истории, которые найду, и передавать их.

По материалам https://www.quantamagazine.org/computer-scientist-donald-knuth-cant-stop-telling-stories-20200416/

Добавить комментарий