История UNIX, языка C и магия Bell Labs в рассказе Брайана Кернигана

Lex Fridman 756 тыс. 1 ч 43 мин 5 мин 18.07.2020
Главное

Брайан Керниган — живая легенда компьютерных наук, чьё имя неразрывно связано с созданием операционной системы UNIX и языка программирования C. В этой беседе с Лексом Фридманом он погружается в историю «золотого века» Bell Labs, рассуждает об эволюции языков программирования и делится своим видением будущего, где ИИ и алгоритмы всё плотнее вплетаются в ткань человеческого бытия.

🕰️ От перфокарт к разделению времени: истоки UNIX 4:20

История UNIX началась более 50 лет назад, но её корни уходят ещё глубже — в эпоху мейнфреймов 1950-х и начала 1960-х годов . В то время программирование было медленным и итеративным процессом: программист набивал колоду перфокарт, отдавал её оператору и ждал часами, а иногда и днями, чтобы получить распечатку с ошибкой .

Ситуация начала меняться с появлением систем разделения времени (time-sharing). Керниган вспоминает:

Затем последовал проект Multics, амбициозная попытка создать «информационную утилиту», подобную электрической сети . Однако к 1969 году Bell Labs вышла из проекта, посчитав его слишком сложным и дорогим. Это оставило группу талантливых исследователей, включая Кена Томпсона и Денниса Ритчи, без комфортной среды для работы .

🐣 Рождение UNIX: трехнедельный подвиг Кена Томпсона 14:54

Когда Bell Labs прекратила работу над Multics, Кен Томпсон начал искать альтернативы. Он нашёл малоиспользуемый мини-компьютер PDP-7 с 16 тысячами 16-битных слов памяти .

Легендарный момент создания UNIX произошёл, когда жена Томпсона уехала в Калифорнию на три недели с их годовалым сыном. За это время Кен в одиночку написал:

  1. Операционную систему (ядро).
  2. Файловую систему.
  3. Ассемблер для PDP-7.
  4. Текстовый редактор .

По словам Брайана Кернигана, Томпсон является «сингулярностью» среди программистов, обладая способностью видеть всю картину целиком и реализовывать её с невероятной скоростью . Несмотря на то что первые версии были написаны на ассемблере, система заложила основы современной вычислительной архитектуры .

🧪 Культура Bell Labs: магия Мюррей-Хилл 11:46

Bell Labs была уникальным научным хабом в Нью-Джерси. В здании Мюррей-Хилл работали тысячи специалистов, многие из которых имели докторские степени в физике, химии и математике .

Особенности среды, по воспоминаниям Кернигана:

Керниган отмечает, что успех UNIX — это результат «ошибки выжившего». Если бы этого не произошло в Bell Labs, нечто подобное могло бы родиться в Xerox PARC или MIT, но именно лицензионная политика AT&T (бесплатная раздача исходного кода университетам) позволила UNIX захватить мир .

🛠️ Философия программирования и язык AWK 29:53

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

Сам Брайан стал соавтором языка AWK (вместе с Альфредом Ахо и Питером Вайнбергером) . Этот язык предназначен для быстрой обработки текстовых данных. Его преимущество в «умолчаниях»: он автоматически проходит по строкам файла, разбивает их на поля и применяет шаблоны . Керниган признаётся, что до сих пор пишет на AWK больше, чем на любом другом языке, когда нужно быстро проанализировать данные .

📖 Язык C и «Библия» программирования 52:08

Язык C стал «золотой серединой» между выразительностью и эффективностью . Он позволил писать переносимые операционные системы, что раньше считалось невозможным (системы писались только на ассемблере под конкретное железо) .

В 1978 году Брайан Керниган и Деннис Ритчи опубликовали книгу «The C Programming Language» (известную как K&R). Керниган скромно оценивает свою роль, утверждая, что он просто «выкрутил Деннису руки», чтобы тот согласился написать книгу .

♾️ Математика, AMPL и P vs NP 1:10:46

Помимо языков общего назначения, Керниган участвовал в создании AMPL — языка алгебраического моделирования для задач крупномасштабной оптимизации . AMPL позволяет отделять математическую модель (объективную функцию и ограничения) от конкретных данных и используемых решателей (solvers) .

Рассуждая о фундаментальных вопросах информатики, Брайан делает ставку на то, что P не равно NP (P ≠ NP), основываясь на интуиции своих коллег, хотя сам признаёт, что больше склонен к практическому написанию кода, чем к чистой теории . Его докторская диссертация была посвящена разбиению графов, где он разрабатывал эвристики для задачи, оказавшейся NP-полной .

🤖 Искусственный интеллект: лето 1964-го и сегодня 1:22:26

Керниган застал «лето ИИ» ещё в 1964 году, когда будучи студентом в Торонто, читал оптимистичные прогнозы о машинном переводе и доказательстве теорем . Он отмечает, что люди склонны переоценивать технологии в краткосрочной перспективе и недооценивать в долгосрочной (цитируя Артура Кларка) .

Относительно современного ИИ и машинного обучения гость высказывает следующие опасения:

🎓 Образование и будущее вычислительной техники 1:32:58

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

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

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

💬 Цитаты

«В начале было слово, и слово было временем... Системы разделения времени давали каждому пользователю иллюзию владения всей машиной.»

Брайан Керниган 06:51

«Кен Томпсон — это своего рода сингулярность среди программистов.»

Брайан Керниган 19:21

«Не комментируйте плохой код — перепишите его.»

Брайан Керниган 1:42:57
👥 Спикеры
📚 Упомянутые книги
🔗 Упомянутые сайты и проекты
📖 Термины
Разделение времени (Time-sharing)
Метод, позволяющий многим пользователям одновременно работать на одном мощном компьютере через удаленные терминалы.
Ассемблер
Язык программирования низкого уровня, команды которого соответствуют машинным инструкциям конкретного процессора.
Эвристика
Алгоритм, который находит достаточно хорошее решение задачи за разумное время, не гарантируя абсолютной точности.
P vs NP
Одна из важнейших открытых проблем математики: можно ли быстро найти решение задачи, если его можно быстро проверить.
📊 Цифры
🗓 Хронология
  1. 1964 Брайан Керниган изучает ИИ в Университете Торонто во время его первого периода популярности.
  2. 1966 Керниган работает интерном в MIT над системой CTSS.
  3. 1969 Bell Labs выходит из проекта Multics; Кен Томпсон создает первую версию UNIX.
  4. 1973 UNIX переписывается на языке C, что делает систему переносимой.
  5. 1978 Публикация первого издания книги «The C Programming Language» (K&R).
  6. 1984 Создание языка AMPL для математической оптимизации.
⚖️ Другая сторона
Технологии и IT Брайан Керниган UNIX Bell Labs язык C Кен Томпсон