Кен Томпсон: тихий архитектор всего
Когда в 1969 году Bell Labs вышла из проекта Multics, у Кена Томпсона (Ken Thompson) остались лишь устаревший мини-компьютер PDP-7 в углу и отсутствие официальных заданий. Тем не менее, он использовал его для создания операционной системы. Сегодня Unix и её многочисленные потомки работают почти на каждом сервере, телефоне и встроенном устройстве на планете. Деннис Ритчи (Dennis Ritchie), ближайший соратник Томпсона и сам по себе выдающаяся фигура, сказал об этой первой версии, что «большинство идей, как и большая часть работы, принадлежали ему».
Арифметика в двоичной системе
Кеннет Лейн Томпсон (Kenneth Lane Thompson) родился 4 февраля 1943 года в Новом Орлеане, штат Луизиана. Его рассказ о собственном детстве характерен своей простотой: «Я всегда был очарован логикой, и даже в начальной школе я решал арифметические задачи в двоичной системе, всякие такие вещи. Просто потому, что меня это восхищало». Эта последняя фраза описывает человека целиком — интеллектуальный голод, не обремененный никакими инструментальными целями.
Он получил степень бакалавра в 1965 году и магистра в 1966 году, обе в области электротехники и компьютерных наук, в Калифорнийском университете в Беркли (University of California, Berkeley), где его научным руководителем был специалист по теории кодирования Элвин Берлекамп (Elwyn Berlekamp). В 1966 году Bell Laboratories наняла его в Центр исследований вычислительных наук в Мюррей-Хилле, штат Нью-Джерси.
Unix
В период с 1967 по 1969 год Томпсон работал над Multics — амбициозным совместным проектом по созданию системы разделения времени между Bell Labs, MIT и General Electric. Проект Multics был огромным, медленным и отставал от графика; Bell Labs вышла из него. Томпсон вынес из этого убеждение: идеи были правильными, но реализация — неверной.
История происхождения проекта хорошо известна и слегка абсурдна. Он хотел продолжать играть в Space Travel — игру, которую написал сам, — и ему нужна была подходящая рабочая среда. На выброшенном PDP-7, при минимуме ресурсов и без институциональной поддержки, он построил ядро операционной системы: иерархическую файловую систему, процессы, файлы устройств, обрабатываемые как обычные файлы, интерпретатор командной строки, отделенный от ядра, и каналы (pipes) для цепочки программ. Каждое из этих решений сегодня настолько стандартно, что требуется усилие, чтобы увидеть в них когда-то принятый выбор.
Философия дизайна заключалась в сжатии. Вместо системы, предугадывающей любые нужды, Unix предложила небольшое количество комбинируемых примитивов, позволив пользователям собирать то, что им нужно. К 1973 году существовало уже более двадцати инсталляций. Чтобы упростить написание компонентов, не входящих в ядро, Томпсон создал язык программирования B, производный от BCPL, который Ритчи затем развил в C — язык, на котором до сих пор написана большая часть инфраструктурного программного обеспечения в мире.
Двадцать вопросов, восемь минут на часах и процентиль, измеренный по всем, кто его проходил. Без регистрации.
Пройти тест IQ →Малые инструменты, глубокие корни
Другие работы Томпсона несут на себе тот же отпечаток: компактная идея, которая оказывается несущей конструкцией. Он реализовал регулярные выражения в редакторах QED и ed и разработал «конструкцию Томпсона» (Thompson's construction) — алгоритм преобразования регулярного выражения в конечный автомат. Почти каждый движок регулярных выражений, используемый сегодня, является наследником этой нотации.
В 1971 году он написал шахматную программу, а затем вместе с Джозефом Кондоном (Joseph Condon) построил Belle — специализированную шахматную машину, которая доминировала в компьютерных шахматах своего времени. Позже он создал полные базы эндшпилей для четырех, пяти и шести фигур — исчерпывающие решения для целых классов шахматных позиций, что навсегда изменило теорию эндшпиля.
В 1992 году вместе с Робом Пайком (Rob Pike) он разработал UTF-8 — кодировку символов, позволяющую одному потоку байтов передавать любой алфавит на Земле, сохраняя при этом совместимость с ASCII. Сегодня она используется в более чем 90 процентах веб-сайтов. Он также сыграл ключевую роль в создании Plan 9 — распределенной операционной системы, которую Bell Labs построила в середине 1980-х годов, чтобы довести идеи Unix дальше, чем могла сама Unix.
В его лекции 1983 года при получении премии Тьюринга, «Размышления о доверии» (Reflections on Trusting Trust), был описан компилятор, который вставляет бэкдор в программы, которые он компилирует, а также в будущие версии самого себя, так что вредоносный код не появляется нигде в исходном коде, который кто-либо мог бы прочитать. «Хак Томпсона» (Thompson hack) — фундаментальный документ по компьютерной безопасности; исходный код был аннотирован и опубликован в 2023 году.
Google и Go
Томпсон ушел из Bell Labs в конце 2000 года и в 2006 году присоединился к Google, где вместе с Робом Пайком и Робертом Гриземером (Robert Griesemer) разработал язык программирования Go. Его объяснение мотивации звучит прямо: «Мы втроем собрались вместе и решили, что ненавидим C++» — язык, который он называл «кучей мусора из идей, которые исключают друг друга». Go был построен на правиле, что все трое разработчиков должны быть убеждены в каждой функции, что является дисциплиной для сохранения языка небольшим.
Награды накапливались одна за другой: избрание в Национальную инженерную академию (1980), премия IEEE Эмануэля Р. Пиора (1982), премия Тьюринга ACM совместно с Ритчи (1983), избрание в Национальную академию наук (1985), медаль Ричарда В. Хэмминга IEEE (1990), премия «Компьютерный пионер» (1994), стипендия Музея компьютерной истории (1997), Национальная медаль в области технологий (1998), инаугурационная премия Цутому Канаи (1999) и премия Японии за информационные технологии и коммуникации (2011).
Почему Кена называют гением
Формулировка премии Тьюринга ACM содержит необычайно точное утверждение, которое стоит процитировать, поскольку оно точно определяет качество: «Успех системы UNIX проистекает из её изысканного выбора нескольких ключевых идей и их элегантной реализации... Гений системы Unix заключается в её каркасе, который позволяет программистам опираться на работу других».
«Вкус» — здесь ключевое слово. Талант Томпсона заключается в вычитании — способности определить наименьший набор концепций, который создаст наибольшее пространство полезного поведения, а затем отказаться от всего остального. Каналы (pipes) — канонический пример: тривиальный механизм для соединения вывода одной программы с вводом другой, который превращает коллекцию мелких инструментов в комбинаторную систему. Регулярные выражения, UTF-8 и Go — всё это демонстрирует один и тот же паттерн минимально достаточного дизайна. Его регулярно называют в числе величайших программистов, когда-либо живших, и это суждение исходит от людей, которые пишут код профессионально, а не от премиальных комитетов.
Контраргументы слабее, чем у большинства в этом списке, но они существуют. Unix была результатом сотрудничества — Ритчи, Брайан Керниган (Brian Kernighan), Дуглас Макилрой (Douglas McIlroy), предложивший каналы, и другие глубоко повлияли на неё, и премия Тьюринга была общей. Многие идеи Unix были адаптированы из Multics, а не изобретены с нуля. Томпсон не создал никаких теоретических результатов в компьютерных науках, и его влияние полностью заключено в артефактах и проектных решениях. Является ли это гениальностью или чрезвычайно развитым мастерством — справедливый вопрос. Самый честный ответ: в программном обеспечении эти вещи трудно разделить, и мастерство Томпсона оказалось более значимым, чем теории большинства людей.
Наследие
Linux, macOS, Android, iOS и программное обеспечение, управляющее практически каждым интернет-сервером, произошли от решений, которые Томпсон принял в одиночку на выброшенной машине в 1969 году. Его кодировка символов используется практически во всем печатном тексте онлайн. Его алгоритм регулярных выражений находится внутри каждого текстового редактора. В 2024 году он записал долгую устную историю для Музея компьютерной истории, а в последние годы, отказавшись от продуктов Apple, использует Raspberry Pi OS.
.jpg)