# Почему программирование — это литература, а не инженерия

Источник: https://www.youtube.com/watch?v=EE1R8FYUJm0
Канал: Lex Fridman
Опубликовано: 09.09.2021

---

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

## 🤖 Рассвет алгоритмов: от факторизации чисел до обучения машин
[[JUMP:00:51]]

Путь Дональда Кнута в мир компьютерных наук начался летом 1957 года, когда он, будучи первокурсником, столкнулся с IBM 650 — одной из первых массовых вычислительных машин. В то время программирование еще не было окутано слоями абстракций, к которым мы привыкли сегодня. Кнут вспоминает, что писал свои первые строки кода не на языке ассемблера, о существовании которого узнал лишь годом позже, а на «чистом» десятичном машинном языке [0:51]. Машина оперировала не битами, а словами из десяти цифр. Каждая инструкция состояла из двух цифр кода операции (например, «69» означало загрузку данных в распределитель) и адресов данных и следующей инструкции [2:46].

Интерес Кнута к компьютерам подстегнуло низкое качество документации. Прочитав руководство пользователя IBM 650, он пришел к выводу, что оно написано настолько плохо, что он, простой первокурсник, определенно обладает талантом к этой дисциплине, раз способен разобраться в логике устройства лучше его авторов [3:11]. Это привело его к работе в компьютерном центре, где он начал писать собственные инструкции и руководства.

Самым первым серьезным проектом Дональда Кнута стала программа для факторизации чисел [3:53]. Процесс взаимодействия с машиной напоминал работу оператора сложного промышленного прибора: числа вводились с помощью поворотных дисков на огромном мейнфрейме, а результатом работы становились перфокарты с выбитыми множителями. В процессе написания этой программы Кнут впервые открыл для себя феномен отладки (debugging). 

Процесс отладки в 1957 году выглядел следующим образом:

*   Работа велась по ночам, когда доступ к компьютеру был свободен [5:12].
*   Программист использовал переключатели, чтобы заставить машину выполнять ровно одну инструкцию за раз.
*   Результаты каждой операции отслеживались по световым индикаторам на панели управления.

Первая версия программы занимала всего около 20 строк, но количество найденных ошибок в итоге превысило число строк кода [9:12]. Одной из главных проблем стали физические ограничения перфокарт: стандартная карта имела 80 колонок, и если у десятизначного числа оказывалось слишком много факторов, программа «вылетала» за границы памяти или носителя [9:51]. Несмотря на медлительность IBM 650 — поиск факторов для больших простых чисел мог занимать до десяти минут — Кнута завораживал сам процесс: возможность видеть мигающие огни и осознавать, что «магическая машина» делает работу, на которую у человека ушли бы часы ручного труда [10:42].

### Три «мозга» для крестиков-ноликов
[[JUMP:11:21]]

Третьим крупным проектом Кнута стала программа для игры в крестики-нолики, в которой он реализовал зачатки того, что сегодня мы называем машинным обучением [11:33]. Задача осложнялась критической нехваткой памяти: IBM 650 располагала всего двумя тысячами десятизначных слов [12:50]. Чтобы уместить логику игры и базу позиций в этот объем, Кнуту пришлось прибегнуть к математической оптимизации. Он рассчитал, что любую позицию на доске 3x3 можно представить как эквивалентную восьми другим за счет поворотов и зеркальных отражений, что позволило сократить объем хранимых данных в восемь раз [14:49].

Программа Кнута состояла из трех независимых алгоритмов, которые он назвал «мозгами»:

1.  **Brain 1 (Случайный):** Выбирал любой свободный квадрат на доске случайным образом [15:28].
2.  **Brain 2 (Оптимальный):** Содержал жестко запрограммированную стратегию, гарантирующую отсутствие проигрышей [15:53].
3.  **Brain 3 (Обучающийся):** Использовал метод подкрепления [17:14].

Система обучения строилась на изменении весов позиций. Кнут выделил по одной десятичной цифре для оценки каждой возможной ситуации на доске. Если программа выигрывала партию, ценность цепочки ходов, приведших к победе, увеличивалась; если проигрывала — уменьшалась [13:56]. Дональд Кнут запускал «мозги» друг против друга, например, заставляя случайный алгоритм играть против обучающегося.

Эксперимент показал, что программе требовалось около 600 партий, чтобы научиться всегда сводить игру к ничьей [17:40]. Интересно, что программа училась не столько «побеждать», сколько «не совершать ошибок». Кнут отмечает, что на его интерес к этой теме повлиял не только личный азарт, но и исторический контекст: позже он узнал, что Чарльз Бэббидж еще в XIX веке задумывался о программировании крестиков-ноликов для своей Аналитической машины [16:20].

### Стиль программирования как отпечаток личности
[[JUMP:21:13]]

Размышляя о тех годах, Дональд Кнут подчеркивает, что его подход был скорее инженерным («tinkering mindset»), чем философским. Его не занимали вопросы глобального значения вычислений для человечества или природа универсальных машин Тьюринга — он просто наслаждался контролем над устройством и ощущением совершающегося чуда [20:19]. 

Тем не менее именно тогда начало формироваться его восприятие кода как формы искусства. Кнут утверждает, что при чтении исходного кода можно безошибочно определить, когда автор программы сменился. Программирование имеет свой стиль, сравнимый со стилем Хемингуэя в литературе или Гершвина в музыке [21:26]. В одном из компиляторов, написанных в Карнеги-Меллон, он замечал резкие переходы: от участков, где автор неэффективно перемещал данные между регистрами, до «вспышек гениальности», где две задачи решались одной инструкцией [23:00].

Свой собственный стиль Кнут характеризует как специфический: он часто использует глобальные переменные и предпочитает встраивать код (inline expansion) вместо вызова функций, что сегодня считается нетипичным [24:42]. Эти ранние эксперименты с IBM 650 заложили фундамент для его будущей философии «грамотного программирования» (literate programming), где код рассматривается как текст, предназначенный прежде всего для чтения человеком, а не только машиной [25:09]. О деталях этого подхода, а также о красоте и юморе в коде, Кнут и Лекс Фридман подробнее поговорят далее.

## 🖋️ Искусство кода: от литературного текста к философии оптимизации
[[JUMP:25:09]]

### Грамотное программирование как литературный жанр
[[JUMP:25:09]]

Дональд Кнут считает, что самым значимым достижением его многолетней работы над системой TeX стала не сама программа, а концепция «грамотного программирования» (Literate Programming). Основная идея заключается в том, что программы должны писаться в первую очередь для людей, а не только для машин [25:22]. С помощью типографики и структурированного повествования программист объясняет логику алгоритмов так, будто пишет роман или учебник.

В качестве эталонного примера Кнут приводит книгу Мэтта Фарра «Physically Based Rendering» [26:03]. Это издание, получившее награду «Оскар» за вклад в развитие графических эффектов в кино, целиком представляет собой «грамотную программу». Читатель может одновременно изучать теорию затенения и текстурирования и тут же видеть работающий код. Для Кнута такой подход — высшая форма обучения программированию, превращающая сухие инструкции в связную историю [26:44]. По его мнению, лучший тест на качество кода — это способность автора легко понять собственную логику спустя неделю или год [27:09].

### Эстетика, юмор и зашифрованные шутки
[[JUMP:27:36]]

На вопрос Лекса Фридмана о том, что делает программу по-настоящему красивой, Кнут отвечает, что универсального определения не существует. Красота многогранна: для кого-то это просто работоспособность системы, для кого-то — элегантность мысли, а для Кнута важной составляющей эстетики является остроумие [28:17].

В процессе обсуждения Кнут делится историей о получении архива документов из издательства Addison-Wesley за 1960-е годы [29:10]. Изучая старую переписку, он обнаружил свои споры с рецензентами, в частности с Бобом Флойдом, о допустимости юмора в технической литературе [30:15]. Кнут настаивает на том, что шутки в коде и комментариях необходимы — они показывают личность автора и делают процесс чтения увлекательным.

Его философия юмора в «Искусстве программирования» строится на тонких намеках:

*   Читатель должен чувствовать, что где-то здесь скрыта шутка, даже если он её не сразу понял — это мотивирует думать глубже [31:08].
*   Юмор должен быть частью жизни, а программирование — приносить радость [32:00].
*   Во втором томе своего труда Кнут даже зашифровал послание с помощью RSA-ключа такой длины, что на его взлом современным компьютерам может потребоваться 100 лет [33:02]. Он с иронией отмечает, что когда-нибудь потомки взломают шифр и наконец-то посмеются.

### Риски автоматизации и потеря контроля над «истиной»
[[JUMP:33:15]]

Обсуждая современные инструменты вроде GitHub Copilot и OpenAI Codex, Лекс Фридман отмечает, что они в каком-то смысле перекликаются с идеями Кнута: человек пишет комментарий, а нейросеть «дописывает» историю, генерируя код [33:43]. Однако Дональд Кнут видит в этом серьезную опасность. Главный риск автоматизации — постепенная потеря контроля человека над тем, что именно делает машина [34:48].

Кнут вспоминает своего коллегу-профессора из Калтеха 1960-х годов, который утверждал, что «счастье важнее истины» и неважно, выдает ли компьютер правильный ответ, пока заказчик доволен [35:30]. Сегодня этот подход становится реальностью: системы обучаются на предыдущих данных, и с каждым годом мы всё больше отдаляемся от понимания фундаментальных процессов.

Кнут выделяет несколько критических точек:

1.  **Отрыв от основ:** когда код надстраивается над кодом, который никто до конца не понимает, система становится хрупкой [36:10].
2.  **Этический выбор:** автоматизация полезна в медицине для спасения жизней, но она же может привести к созданию «ботов-убийц» или автономных систем вооружения [37:43].
3.  **Экзистенциальный тупик:** Кнут в шутку предполагает, что отсутствие сигналов от внеземных цивилизаций может быть связано с тем, что они тоже изобрели подобный ИИ и он привел их к гибели [39:03].

Несмотря на это, ученый сохраняет сдержанный оптимизм, поражаясь тому, как много сложных систем в нашей цивилизации — от мостов до карандашей — всё еще работают исправно, несмотря на нерациональность людей [40:47].

### Преждевременная оптимизация — корень всех зол
[[JUMP:42:33]]

Одной из самых цитируемых фраз Кнута является утверждение, что преждевременная оптимизация — корень всех зол в программировании [42:33]. Ученый разъясняет контекст этой мысли: в 1960-х слово «оптимизировать» в словарях еще означало «смотреть на мир с оптимизмом», а в среде программистов оно означало тонкую настройку кода под конкретную машину [43:37].

Кнут заметил, что программисты часто тратят массу времени на полировку тех частей программы, которые им было сложнее всего писать, ошибочно полагая, что именно там компьютер будет «тормозить» [44:40]. На практике же всё иначе. Он приводит пример с компилятором Фортрана, который тратил 80% времени просто на чтение карточек с комментариями [45:18]. Если бы разработчики знали это заранее, они могли бы удвоить скорость работы системы за десять минут, вместо того чтобы неделями оптимизировать сложные арифметические выражения, занимавшие менее 1% процессорного времени.

Главный совет Кнута — придерживаться принципа «позднего связывания» (late binding) [47:04]:

*   Не принимать окончательных решений слишком рано.
*   Сохранять гибкость структуры данных, чтобы программу можно было легко изменить.
*   Проводить эмпирические замеры (профилирование) только после того, как программа готова, чтобы понять, где оптимизация действительно необходима [45:59].

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

## 🧬 Сознание, сюрреальные числа и искусство компромисса
[[JUMP:50:24]]

Обсуждая глубокие вопросы устройства разума и вселенной, Дональд Кнут (Donald Knuth) придерживается позиции строгого исследователя: он предпочитает говорить о том, что можно доказать или формализовать. В беседе с Лексом Фридманом (Lex Fridman) он признает, что природа человеческого сознания может лежать в плоскости науки, но на данный момент она находится «за пределами познания» [52:04]. Для Кнута такие вопросы, как гипотеза Римана, представляют гораздо больший интерес, поскольку они поддаются математическому анализу, в то время как дискуссии о сознании часто скатываются в то, что ученый называет «чепухой» (hogwash) [53:07].

### Границы познания: сознание как «голосование» мыслей
[[JUMP:50:24]]

Дональд Кнут подчеркивает, что не является экспертом в нейробиологии, однако внимательно следит за попытками формализовать работу мозга. Он упоминает работу своего коллеги Христоса Пападимитриу, который предложил математическую архитектуру мозга и своего рода «машинный язык» для проверки гипотез о сознании [54:50]. 

Сам Кнут склоняется к модели, которую он называет «естественным отбором» внутри головы:
> «Лучшая модель, которую я слышал, объясняющая чудо сознания, заключается в том, что внутри нашего мозга происходит непрерывная конкуренция за выживание наиболее приспособленных идей. Пока я говорю с вами, все возможные варианты того, что я хочу сказать, борются между собой, происходит своего рода голосование, и один из них побеждает, определяя следующую фразу» [55:28].

Лекс Фридман в ответ замечает, что этот процесс напоминает создание истории в реальном времени — своего рода внутреннее «грамотное программирование» (концепция, которую Кнут детально развивал ранее), где мозг создает для нас связный нарратив из хаотичных вычислений [56:34]. Ученый соглашается, добавляя, что сознание может быть понято наукой лишь через сотни лет, а пока он предпочитает фокусироваться на доказуемых вещах [52:42].

### Игра «Жизнь» и детерминированная свобода воли
[[JUMP:57:12]]

Одним из примеров того, как невероятная сложность и подобие жизни могут возникнуть из простейших правил, для Кнута является игра «Жизнь» Джона Конвея. Несмотря на то что это абсолютно детерминированная система, в ней возникают структуры, которые кажутся живыми и обладающими собственной волей [58:07].

Кнут видит в этой игре ключ к пониманию свободы воли. С одной стороны, правила системы фиксированы, с другой — результат их работы непредсказуем без запуска самого процесса. Он вспоминает, что сам Джон Конвей задавался вопросом, не является ли аморальным выключение компьютера, когда в игре развивается особенно интересная «цивилизация» [58:22].

Для анализа таких систем Кнут использовал математический аппарат из своего многотомника «Искусство программирования», составив десятки упражнений для оценки алгоритмов в клеточных автоматах [59:30]. Он также упоминает Билла Госпера и его алгоритм Hashlife, реализованный в программе Golly, который позволяет симулировать игру «Жизнь» с невероятной скоростью [59:55].

### Джон Конвей: от салфетки в Калгари до «Сюрреальных чисел»
[[JUMP:1:00:08]]

Дональд Кнут с большой теплотой вспоминает Джона Конвея, называя его неисчерпаемым источником вдохновения. Их знакомство началось еще в 1967 году в Оксфорде, где Конвей поразил аудиторию лекцией по теории узлов, собирая их из детского конструктора прямо на глазах у публики [1:02:08].

Центральным событием их общения стала встреча в Калгари весной 1972 года. Во время обеда Конвей на обычной салфетке записал основные аксиомы и теоремы своей новой математической теории, которую он называл просто «числами» [1:03:00]. Кнута настолько захватила красота этой концепции, что позже, находясь в творческом отпуске в Осло, он решил написать об этом книгу. 

История создания этой работы похожа на литературный марафон:

*   Кнут снял номер в отеле в центре Осло, чтобы его ничего не отвлекало [1:04:41].
*   Он поставил цель: написать книгу за одну неделю.
*   Книга была написана в форме сократического диалога между двумя героями, которые заново открывают математику.
*   Именно Кнут придумал термин «сюрреальные числа» (surreal numbers), который позже стал каноническим [1:04:55].

Кнут признается, что эта неделя была одной из самых напряженных в его жизни — он работал в состоянии, похожем на транс [1:06:28]. Позже выяснилось, что он немного ошибся в одной из аксиом, из-за чего разработка теории в книге оказалась сложнее, чем у Конвея, но в итоге это лишь добавило тексту глубины [1:07:23].

Помимо теории чисел, Конвей внес вклад и в другие области, которыми интересовался Кнут. Однажды на вечеринке в Монреале, услышав от Дональда о задаче «устойчивых браков», Конвей тут же, «на полях» праздника, доказал теорему о том, что множество таких браков образует дистрибутивную решетку [1:09:21].

### 60 лет семейного союза: математика брака и рождественские открытки
[[JUMP:1:10:01]]

Разговор об «устойчивых браках» плавно перешел к личной истории Дональда. В октябре 2021 года он и его жена Джилл отпраздновали 60-летие совместной жизни [1:10:14]. Кнут с юмором вспоминает их знакомство: на втором курсе он начал встречаться с соседкой Джилл по комнате и обратился к самой Джилл за советом, как лучше выстроить «стратегию» свиданий. В процессе он понял, что советы и общество Джилл нравятся ему гораздо больше, чем ее подруга [1:12:00].

Их союз — это классический пример объединения противоположностей: Кнут называет себя «гиком» (computer science geek), в то время как Джилл — профессиональный художник [1:10:39]. За годы совместной жизни они выработали свою формулу стабильности, основанную на принятии несовершенства.
> «До тех пор, пока вы не ожидаете 24 часов блаженства в сутки, у вас есть большие шансы на стабильность. Если же вы решите, что в жизни не должно быть места разочарованиям, вы обречены» [1:12:51].

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

В конце этой части беседы Кнут упоминает Ричарда Фейнмана, с которым он общался в Калтехе. Хотя их подходы к науке различались (эту тему физиков и математиков они подробно разберут далее), Кнут всегда восхищался честностью Фейнмана и его способностью видеть изъяны в системе образования, превращающей получение знаний в простую погоню за дипломами [1:14:21].

## 🧠 Природа алгоритмического мышления и числа, выходящие за пределы воображения
[[JUMP:1:16:17]]

Разговор Лекса Фридмана с Дональдом Кнутом в этой части беседы смещается от общих философских вопросов к фундаментальным различиям в том, как человеческий разум воспринимает структуру мира. Кнут, будучи архитектором современного анализа алгоритмов, признается, что его восприятие реальности глубоко дискретно. Это подводит их к обсуждению того, чем мышление «компьютерного человека» (computer person) отличается от интуиции физика и как абстрактные математические теоремы внезапно становятся ключом к написанию эффективного кода.

### Физики против математиков: волны и дискретные шаги
[[JUMP:1:16:17]]

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

Кнут выделяет несколько ключевых отличий в ментальности:

*   **Непрерывность против дискретности:** Физики, по его мнению, склонны мыслить категориями волн и континуума. Для Кнута же размышление о волнах подобно «собаке, идущей на задних лапах» — это возможно, но крайне неестественно [1:17:50].
*   **Интуиция против алгоритма:** Великие физики, такие как Ричард Фейнман, обладали феноменальной интуицией, которая часто заменяла им пошаговые вычисления. Фейнман мог скрывать глубокие вычислительные процессы за блестящей интуитивной догадкой [1:20:17]. 
*   **Язык формул:** Кнут вспоминает слова Стивена Хокинга о том, что каждая формула в книге уменьшает количество читателей вдвое. Именно поэтому Кнут не смог понять книгу Хокинга — в ней не было математического скелета, за который мог бы зацепиться его разум [1:20:05].

Для Кнута информатика — это резонанс мозга с определёнными концепциями. Он отмечает, что даже внутри математики есть разделение: он хорош в алгебре, но слаб в геометрии [1:17:37]. Это подчёркивает его тезис о том, что «программистское» мышление — это особый дар видеть мир как последовательность чётких, дискретных состояний.

### Стрелочная нотация: математика сверхбольших чисел
[[JUMP:1:20:30]]

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

1.  **Умножение** — это повторяющееся сложение ($x + x + x...$).
2.  **Возведение в степень** — это повторяющееся умножение ($x \cdot x \cdot x...$). В нотации Кнута это одна стрелка вверх: $x \uparrow n$ [1:21:22].
3.  **Тетрация** — это повторяющееся возведение в степень (башня из степеней). Это обозначается двумя стрелками: $x \uparrow\uparrow n$ [1:22:00]. Например, $2 \uparrow\uparrow 3$ — это $2^{2^2}$, что равно 16.

С добавлением каждой новой стрелки числа растут с устрашающей быстротой. Число типа «10 с четырьмя стрелками 3» настолько огромно, что его невозможно представить, даже если использовать все атомы во Вселенной для записи нулей [1:22:53].

Кнут вспоминает любопытную дискуссию с Ричардом Фейнманом об этой системе. Фейнман, верный своей физической интуиции, тут же попытался обобщить дискретную нотацию: «А что, если использовать комплексные числа вместо целых в качестве количества стрелок?» [1:23:17]. Он утверждал, что не существует аналитической функции, которая могла бы интерполировать эти значения, что заставило Кнута задуматься о границах применимости таких абстракций.

### Алгоритм КМП: как теория автоматов спасла практику
[[JUMP:1:24:14]]

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

Джим Моррис заметил, что если мы уже прочитали часть слова, нам не нужно перечитывать эти буквы заново [1:26:25]. Однако его код был настолько сложным и непонятным, что другие программисты в Беркли просто удалили его, посчитав ошибочным [1:27:18].

Кнут пришёл к решению через чистую теорию. В то время Стивен Кук (которому Беркли, по иронии судьбы, отказал в пожизненном контракте [1:28:11]) доказал абстрактную теорему о «стековых автоматах». Теорема гласила: если какая-то задача может быть решена медленным стековым автоматом, то существует способ решить её на обычном компьютере за время $N \log N$ [1:29:30].

Кнут решил проверить эту теорему на практике:

*   Он заполнил всю доску вычислениями, пытаясь понять паттерн трансформации Кука [1:30:38].
*   В процессе он осознал, что именно должен «помнить» алгоритм при поиске строки.
*   Это привело к созданию эффективного алгоритма, который работает без возвратов назад.

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

Завершая этот блок, Кнут упоминает о «рождении гигантской компоненты» в случайных графах — теме, которая на стыке математики и физики описывает внезапные фазовые переходы в сложных системах [1:34:23]. Ранее в разговоре они уже касались природы случайности, и этот пример стал мостом к обсуждению самых сложных проблем, с которыми Кнуту доводилось сталкиваться.

## 🧬 Математика хаоса, TeX и «честная» случайность числа Пи
[[JUMP:1:40:16]]

### Эволюция случайных графов и «замедление Большого взрыва»
[[JUMP:1:40:29]]

В математике существует феномен, который Дональд Кнут называет «замедлением Большого взрыва» — это детальное изучение момента возникновения сложности в случайных структурах. В Стэндфорде долгое время циркулировал слух о том, что в процессе эволюции случайного графа (когда мы постепенно добавляем ребра между случайными узлами) в нем почти никогда не возникает более одного компонента с циклами одновременно [1:41:10]. Кнут решил проверить это и обнаружил, что утверждение почти верно: существует лишь крайне короткий интервал времени, когда в графе могут сосуществовать два независимых цикла, но они невероятно быстро сливаются в одну «гигантскую компоненту» [1:41:48].

Для описания этого процесса Кнут ввел понятие «сложности компонента», где:

*   **Дерево** имеет сложность –1 (количество ребер на одно меньше количества вершин) [1:43:58].
*   **Циклическая компонента** имеет сложность 0 (один цикл, к которому могут быть прикреплены древовидные структуры) [1:43:32].
*   **«Велосипед» (bicycle)** имеет сложность 1 (на одно ребро больше, чем вершин) [1:44:53].

Кнут провел бессонную ночь, вычисляя вероятности переходов между этими состояниями. Около трех часов утра он обнаружил, что знаменатель в его формуле — число 23023 — раскладывается на множители 7, 11, 13 и 23 [1:47:14]. Это напомнило ему о его самом первом опыте программирования на IBM 650, где те же простые числа играли ключевую роль (о чем они с Лексом Фридманом упоминали ранее). Это открытие позволило ему логарифмировать формулу и найти элегантное решение задачи, которая казалась неприступной [1:47:55].

Любопытно, что на следующий день после этого открытия Стэндфорд посетил Билл Гейтс. Университет надеялся получить пожертвование на новое здание, и Кнуту дали возможность пообщаться с ним. Дональд нарисовал на доске схему эволюции графа, и Гейтс был настолько впечатлен теорией «гигантской компоненты», что позже вспоминал этот разговор как одно из самых ярких впечатлений от визита [1:48:47]. В конечном итоге Кнут доказал, что вероятность того, что в графе всегда будет только одна компонента с циклом, связана с числом Пи и составляет примерно $12/\pi^2$ [1:50:33].

### История TeX и философия открытого ПО
[[JUMP:1:51:11]]

Когда Лекс Фридман спрашивает Кнута о причинах, по которым тот сделал систему типографики TeX бесплатной и открытой, Дональд объясняет это стремлением защитить знания от монополизации. В 1950-х годах в индустрии печати каждый производитель оборудования создавал свой собственный проприетарный язык разметки [1:52:28]. Это тормозило прогресс: купив дорогой станок, типография оказывалась «запертой» в экосистеме одного бренда на десятилетия.

Кнут ориентировался на пример языка Fortran от IBM: компания могла оставить его эксклюзивным для своих машин, но позволила другим создавать компиляторы, что сделало язык мировым стандартом [1:52:03]. Дональд подчеркивает, что не нуждался в дополнительном доходе от TeX, так как его книги приносили достаточно средств. Он описывает это через «пороговую функцию дохода»:

*   Если вы ниже порога — вы голодаете.
*   Если вы выше порога — дополнительные деньги перестают менять качество жизни, и вы начинаете думать о филантропии или общественном благе [1:53:21].

При этом Кнут не считает, что все ПО должно быть бесплатным. Он разделяет «тривиальный» софт и продукты с глубокой интеллектуальной собственностью. В качестве примера он приводит Adobe Photoshop, восхищаясь алгоритмами функции «отмены» (undo), которые позволяют мгновенно возвращаться на тысячи шагов назад в сложной графике [1:54:52].

Сам Кнут остается верен принципам стабильности и контроля. Для работы, которую он называет «семейными драгоценностями» (свои основные труды и код), он использует ноутбук с Ubuntu Linux, не подключенный к интернету [1:55:44]. Он предпочитает старые версии системы (например, Ubuntu 14) из-за их надежности, используя флеш-накопители для переноса данных на компьютеры с выходом в сеть [1:56:10].

### Число Пи как эталон «честной» случайности
[[JUMP:1:56:52]]

В разговоре о красоте символов и математики Кнут признается в глубокой симпатии к числу Пи ($\pi$). Для него это не просто константа, а идеальный источник «честных» случайных чисел. Когда ученому нужно привести пример задачи, который не был бы специально «подтасован» или упрощен, он берет цифры из десятичного разложения Пи [1:59:43].

Одним из примеров такого подхода стало использование Пи в японской головоломке Масю (Masyu). Это визуальный пазл с черными и белыми жемчужинами на сетке, где нужно провести замкнутую линию по определенным правилам [2:00:21]. Кнут решил создать задачу, в которой расположение жемчужин в точности повторяло бы очертания греческой буквы $\pi$. Для него это был вызов: можно ли доказать, что у такой «случайной» конфигурации существует единственное и верное решение? Его алгоритмы подтвердили — это возможно [2:01:53].

Кнут часто использует этот метод, чтобы показать объективность своих исследований. Даже работая над прикладными задачами вроде «грациозной» разметки карты США (где каждому штату присваивается число так, чтобы разности между соседями не повторялись), он и его коллеги в конечном итоге прибегали к Пи [2:04:04]. Так, в одном из решений его коллега Тамара Кикиропулос обнаружила, что метки для штатов Вашингтон и Айдахо совпали с цифрами 31 и 41 из разложения Пи, что стало для Кнута своеобразным знаком математической гармонии [2:05:20].

## 🧩 Грация графов, борьба с ленью и поиски высшего смысла
[[JUMP:2:05:20]]

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

### Грациозные графы и карта США
[[JUMP:2:05:35]]

Одним из примеров того, как теоретическая математика пересекается с реальностью, для Кнута стала задача о «грациозной маркировке» графов. Речь идет о специфическом способе присвоения чисел узлам графа, при котором разности между числами на соединенных узлах образуют последовательный ряд. Ученый применил эту концепцию к сухопутным границам штатов США [2:05:35]. 

Кнут называет «чудом» тот факт, что ему удалось найти грациозную маркировку для такой сложной структуры, причем в процессе работы вновь всплыло число Пи. Ранее в разговоре собеседники уже касались темы Пи как источника случайности, но здесь Кнут подчеркивает иную грань: это число словно пронизывает все самые сложные задачи, над которыми он работает [2:06:06]. Для него это символ того, что в математике «все дороги ведут к Пи», даже если оно скрыто в самой глубине проблемы.

### Принципы продуктивности: стратегия «неприятного дела»
[[JUMP:2:06:06]]

Когда Лекс Фридман переводит тему на личную эффективность, Кнут делится своим главным правилом планирования: всегда начинать список дел с того пункта, который вызывает наибольшее отвращение [2:06:19]. Его логика проста: если выполнить самое неприятное задание в начале недели, все оставшееся время принесет только радость и удовлетворение от уже сделанного.

Ученый признается, что пандемия COVID-19 заметно снизила его продуктивность — примерно вдвое [2:06:56]. Основной причиной стала необходимость общаться письменно. Кнут — перфекционист в тексте; он не может позволить себе отправить «плохое предложение», поэтому тратит огромное количество времени на редактирование и перечитывание каждого сообщения [2:07:10]. 

Интересен и подход Кнута к планированию, который он унаследовал от матери. В отличие от сложных систем «планирования», принятых в робототехнике, её принцип звучал так: «Увидел, что нужно сделать — сделай это» [2:07:49]. Кнут применяет это в работе над «Искусством программирования»: он берется за самые тяжелые части книги именно тогда, когда чувствует, что не сможет сделать их лучше в будущем, даже если это причиняет дискомфорт [2:08:28]. При этом он сознательно скрывает следы этих страданий в итоговом тексте, стараясь, чтобы читатель видел только юмор, красоту и восторг от открытий [2:09:06].

### Советы молодым: как не быть скучным
[[JUMP:2:09:48]]

На вопрос о советах подрастающему поколению Кнут отвечает лаконично: не следуйте моде. Он убежден, что человек должен заниматься тем, к чему чувствует личное призвание, а не тем, чего от него ждут окружающие [2:10:29]. Процесс самопознания он сравнивает с алгоритмом бинарного поиска: нужно пробовать разные сферы, чтобы понять, где твоя интуиция работает лучше всего, а где у тебя «нет своего имени» [2:11:07].

Главным навыком в жизни Кнут считает умение находить интерес в чем угодно. Его расстраивает, когда люди называют что-то «скучным» [2:11:59]. По мнению ученого, скука — это не характеристика объекта, а неспособность наблюдателя разглядеть в нем красоту.
> «Ключ к жизни в том, чтобы быть "нескучающим" (unborable). Если вам скучно, это не потому, что предмет скучен, а потому, что вы еще не научились находить в нем радость и веселье» [2:12:38].

Сам Дональд находит повод для восхищения в самых простых вещах: в красивых цветах в садовом центре или в том, чтобы просто сидеть и смотреть на дерево [2:13:32]. Для него мир полон удивительных вещей, которые заслуживают внимания.

### Смысл жизни и резонанс с высшим разумом
[[JUMP:2:13:57]]

В финале беседы Кнут касается темы Бога и смысла существования. Он признает, что верит в некую сущность, выходящую за пределы человеческих способностей, которую он осторожно называет Богом или, в шутку, сверхмощным ИИ [2:15:04]. Его вера — это не набор догм, а стремление «резонировать» с волей этого высшего существа [2:15:17].

Смысл жизни для Кнута заключается в самом процессе этого поиска:

*   Жизнь — это путь от одной подсказки высшего разума к другой [2:16:51].
*   Важен не пункт назначения, а само путешествие и взаимопомощь людей в кризисные моменты [2:17:03].
*   Осознание того, что человеческие решения (особенно в политике и истории) часто слишком сложны, чтобы быть гарантированно верными [2:19:52].

Кнут упоминает исторический роман Кена Фоллета о Первой мировой войне, размышляя о том, насколько непостижимо трудными бывают судьбоносные решения правителей [2:17:55]. Он признается, что сам не имел бы уверенности в правильности своих действий на месте мировых лидеров. Его надежда — в развитии человеческих способностей через демократию и, конечно, через усиление наших возможностей с помощью алгоритмов [2:20:34].

Завершая разговор, Дональд Кнут повторяет свой знаменитый афоризм, определяющий границу между технологией и человеческим духом: «Наука — это то, что мы понимаем достаточно хорошо, чтобы объяснить это компьютеру. Искусство — это всё остальное, что мы делаем» [2:21:02].