- PVSM.RU - https://www.pvsm.ru -
В этой рубрике мы уже рассказывали про Кена Томпсона [2] и Денниса Ритчи [3], соавторов Unix, UTF-8 и операционной системы Plan 9 [4]. Они практически всю жизнь работали вместе в Bell Labs (AT&T, потом Lucent) как коллеги и единомышленники. Так вот, третьим членом их коллектива был Роб Пайк [5].
Кроме соавторства Unix и нескольких [6] учебников [7] по программированию, он известен как создатель языка программирования Go [8]. Этот язык родился из философии простоты в программировании, которую Пайк пропагандирует всю жизнь.
Роб Пайк родился 10 ноября в 1956 году в Канаде. С юности интересовался астрономией, откуда впоследствии возник интерес к вычислениям, математике и программированию.
В одном из интервью Роб рассказывает [9], что в юности они с друзьями проводили наблюдения за солнечными пятнами, и тогда он написал свою первую серьёзную программу на Fortran IV для статистического анализа данных. Эта программа стала практическим введением в программирование как средство автоматизации научных вычислений в конце 60-х — начале 70-х. Он также писал на Algol и LISP — и это до получения формального образования. Его первая научная статья 1974 года [10] посвящена наблюдениям за солнечными вспышками.
В университете Роб продолжил изучать пересечение физики и информатики, участвуя в проектах по компьютерной графике и астрономическому моделированию. Например, в 1976 году совместно с Даффом разработал алгоритм преобразования растровых изображений [11] с устранением скрытых поверхностей в 2,5-мерном пространстве.
Он также создал систему KEPLER [12], инструмент для компьютерной анимации астрономических явлений. Во время учёбы в университете Пайк опубликовал несколько научных работ по наблюдательной астрономии, включая простую компьютерную модель светового загрязнения в городских условиях [13].
После получения степени бакалавра в Торонто поступил в аспирантуру Калифорнийского технологического института, где в 1980 году получил степень по физике. Исследования в те годы были сосредоточены на физике высоких энергий, и он присоединился к группе по разработке ПО в этой области. К сожалению, детали его диссертации отсутствуют в открытом доступе.
В начале 80-х Роб Пайк пришёл на работу в Bell Labs, где познакомился с вышеупомянутыми коллегами — и начал многолетнюю работу над Unix, Plan 9 [4] и другими инновационными компьютерными системами.
После ухода из Bell Labs в 2002 году присоединился к Google на должности «выдающегося инженера» (Distinguished Engineer), занявшись распределёнными системами и высокопроизводительным ПО. В 2007 году совместно с Робертом Грисемером и Кеном Томпсоном создал язык программирования Go, чтобы решить проблемы параллелизма в инфраструктуре Google. Этот язык представил такие сущности, как горутины и каналы (вместо тяжёлых системных потоков), по образцу более ранних экспериментов Пайка в Newsqueak [14] (1990 год) и Limbo [15] (1997).
На протяжении всей карьеры Пайк подчёркивал простоту и практичность в разработке программного обеспечения. Его работа оказала влияние на несколько поколений системных программистов. Но наверное, больше всего — на современное поколение программистов в 2020-е годы, потому что мы не только впитали принципы простоты в программировании, но ещё и получили новый язык Go, который идеально воплощает эти принципы и лучше всего подходит для системного программирования высоконагруженных веб‑сервисов.
По Пайку, вот ключевые принципы дизайна ПО, реализованные в языке Go:
Простота. Пайк всегда выступал против избыточных фич, сложных иерархий наследования и ментальной перегрузки разработчика.
Читаемость важнее лаконичности: Код пишется один раз, а читается сотни раз. Явное всегда лучше скрытого (explicit is better than implicit).
Композиция вместо наследования: Вместо жёстких структур Go использует интерфейсы, что делает системы гибкими и простыми в поддержке.
Ортогональность: Возможности языка не должны дублировать или усложнять друг друга.
Чуть выше мы упоминали о ранних экспериментах Пайка в области языков программирования Newsqueak [14] (1990 год) и Limbo [15] (1997). Как и многие другие разработки его и коллег в Bell Labs, все эти эксперименты были маленькими частями больших экспериментальных проектов — распределённых ОС Plan 9 [4] и Inferno [16].
Это абсолютно новаторские для 90-х годов разработки, где распределённые ресурсы заложены в саму архитектуру ОС.
Только 30 лет спустя такие разработки оказались по‑настоящему востребованы индустрией (в первую очередь — в распределённых дата‑центрах Google).
Ещё во время учёбы Пайк внёс вклад в разработку версии текстового редактора QED для Университета Торонто — легковесного инструмента для редактирования текстовых файлов в Unix. Конкретно эта версия известна своей эффективностью, портативностью и считается лучшей версией QED [19].
По приходу в Bell Labs аспиранта определили в Центр исследований вычислительных наук (CSRC), где он первое время занимался UI и графикой. В 1981 году совместно с Бартом Локанти разработал терминал Blit [20] — графическую рабочую станцию для мультиплексирования окон в Unix, с процессором 68 010 и HD‑дисплеем. Софт поддерживал управление несколькими асинхронными процессами, что стало шагом к современным графическим средам. Пайку принадлежит здесь ключевое изобретение — перекрывающиеся окна для растровых дисплеев без перерисовки всего экрана (его единоличный патент США 4,555,775 [21]). Это изобретение способствовало эволюции оконных систем, предшествуя широкому коммерческому принятию в X11 и др., повлияв на растровые GUI в распределённых средах.
Любопытно, что Bell Labs в 1982 году выпустила обучающую анимацию о Blit [23] с пояснением, что такое манипулятор «мышь»:
В конце 80-х годов разработал Newsqueak [14] — экспериментальный язык программирования, предназначенный для параллельного программирования, особенно в GUI. Здесь появились легковесные каналы как механизм общения между параллельными процессами. Newsqueak считается ключевым предшественником всех будущих языков, акцентирующих внимание на параллелизме, в том числе Go.
Чуть позже Пайк создал Limbo [15] (1997) — язык программирования для распределённой операционной системы Inferno. Он поддерживает автоматическую сборку мусора, а также параллелизм через модули и каналы.
Из других разработок:
Текстовый редактор Sam [25] (1987), сочетавший структурное редактирование на основе регулярных выражений и взаимодействие с мышью. В отличие от традиционных редакторов, Sam позволял применять команды ко всему файлу или только к буферу, что повышало эффективность при редактировании на крупномасштабных задачах.
Текстовый редактор Acme [26] (1992), наследник Sam, с легковесной оконной системой и продвинутым программированием операций над текстом, с аккордами (сочетания нескольких клавиш), структурной навигацией и выполнением выделенного текста как команд оболочки.
Для Plan 9 разработал сервер mux (1990) как часть оконной системы 8½ [27], это легковесный мультиплексор, который рассматривает экран, мышь и клавиатуру как ресурсы /dev/cons, /dev/mouse, /dev/bitblt для совместного использования локальными и удалёнными клиентами. Таким образом, несколько программ получают доступ к одному дисплею в качестве виртуальных терминалов через соединения по протоколу 9P, при этом сервер занимал менее 90 КБ и был подчёркнуто простым.
Для языка Go разработал параллельный сборщик мусора, который кратковременно приостанавливает выполнение для освобождения памяти, систему интерфейсов для полиморфного поведения без наследования, горутины (легковесные потоки, управляемые средой выполнения) и каналы для безопасного обмена данными между ними. Горутины и каналы взяты из ранних работ Пайка, а другие разработки сделаны вместе с Томпсоном и Грисемером.

В 1992 году вместе с Томпсоном спроектировал стандарт кодировки UTF-8 [28] для поддержки международных символов в Plan 9. С тех пор этот формат Юникода стал общеупотребительным стандартом в IT.

Учебники Пайка и Кернигана «Unix. Программное окружение» [7] (1984) и «Практика программирования» [6] (1999) переведены на десятки языков мира, в том числе на русский. Вторая из них предлагает вечные, никогда не устаревающие рекомендации по стилю программирования, тестированию и отладке.
Всего библиография Роба Пайка включает 49 книг и научных статей [29]. Примерно две трети из них Пайк написал самостоятельно, а остальные в соавторстве с Брайаном Керниганом, Рассом Коксом, Кеном Томпсоном и другими коллегами, чьи имена к настоящему времени стали легендарными.
Есть в списке и статьи на довольно неожиданные для Пайка темы, например, «Введение в квантовые вычисления и квантовые коммуникации» [30] (2000).
Последняя статья в списке библиографии — «Язык программирования Go и программное окружение» [8] — опубликована в журнале «Communications of the ACM» (том 65 5, стр. 70−78) в мае 2022 года.
В далёком 1989 году Роб Пайк сформулировал пять правил программирования [31]. В последнее время эти правила часто вспоминают [32]. Прошло почти 40 лет, но ни одно из них не устарело.
Изначально правила были опубликованы в пятистраничном сборнике коротких эссе «Заметки о программировании на С» [33], под заголовком «Сложность».
Большинство программ слишком сложны — то есть, более сложны, чем им нужно для эффективного решения задач. Почему? В основном, из‑за плохого дизайна, но эту тему здесь пропустим, потому что она слишком большая. Но программы часто сложны на микроскопическом уровне, и вот это можем обсудить.
Правило 1. Невозможно предсказать, где программа будет тратить время. Узкие места возникают в неожиданных местах, поэтому не пытайтесь предугадать и вставлять ускоряющие изменения, пока не докажете, где именно узкое место.
Правило 2. Измеряйте. Не оптимизируйте для скорости, пока не измерите, и даже тогда не оптимизируйте, если только одна часть кода не подавляет остальные.
Правило 3. Сложные алгоритмы медленные при маленьком
n, а оно обычно маленькое. У сложных алгоритмов большие константы. Пока неизвестно, чтоnбудет большим, не усложняйте. (Даже еслиnстанет большим, сначала используйте правило 2).Правило 4. В сложных алгоритмах больше ошибок, чем в простых, и их гораздо труднее реализовать. Используйте простые алгоритмы и простые структуры данных.
Следующих структур достаточно почти для всех практических программ:
массив;
связный список;
хэш‑таблица;
бинарное дерево.
Конечно, их можно собирать в составные структуры. Например, таблицу символов реализовать в виде хэш‑таблицы со связными списками из массивов символов.
Правило 5. Данные важнее алгоритмов. Выбери правильную структуру — и алгоритм почти всегда станет очевидным. Структуры данных, а не алгоритмы, занимают главное место в программировании (см. Брукса, стр. 102).
Правило 6. Нет правила 6.
Примечания:
На первый взгляд, правила 1 и 2 дополняют известную цитату Дональда Кнута [34]: «Предварительная оптимизация — корень всех зол» из статьи «Структурное программирование с операторами перехода» [35] (1974). Правила Пайка более понятны, чем оригинальная цитата, которая требует погружения в контекст.
В упомянутой статье Кнут говорил об операторе безусловного перехода goto, который предлагалось заменить структурирующими операторами более высокого уровня if, for и while с потерей в производительности. Кнут объяснял, что некоторые программисты много времени тратят на микрооптимизации в некритических областях программы, хотя есть вещи поважнее: дальнейшая поддержка и отладка кода. Ну то есть от goto лучше отказаться.
goto даёт выигрыш в производительности примерно 12%: «Нет сомнений в том, что грааль эффективности ведёт к злоупотреблениям», — пишет Кнут по этому поводуПравила 3 и 4 являются примерами философии дизайна KISS [36]. Кен Томпсон перефразировал эти правила так: «Если сомневаешься — запускай брутфорс».
Ссылка на Брукса (стр. 102) в пятом правиле — это ссылка на книгу Фреда Брукса «Мифический человеко‑месяц». Это правило иногда переформулируют следующим образом: «Пишите глупый код, который использует умные объекты».
В декабре 2025 года Роб Пайк ещё раз напомнил о себе на весь мир, когда его пост против нейронок [37] набрал тысячи лайков и репостов:

Возмущение Пайка вызвало письмо, которое он получил от Claude Opus. Какой‑то почитатель таланта Роба захотел выразить ему своё почтение и использовал нейронку, чтобы составить текст. Это просто вывело из себя гения:
«Идите в ж%пу, народ! — написал Роб Пайк. — Изнасиловать планету, потратить триллионы на токсичное оборудование, которое не подлежит переработке, при этом подорвать общество, и ещё найти время, чтобы ваши мерзкие машины поблагодарили меня за стремление к более простому ПО.
Просто идите в ж%пу. Все вы.
Не могу вспомнить, когда последний раз я был так зол.»
Чуть ниже в комментариях Пайк добавил:
«И кстати, вы обучаете своего монстра на данных, которые созданы в том числе моими руками, без атрибуции и компенсации.
Для остальных: Прошу у всех прощения за свою непреднамеренную, наивную, хоть и незначительную роль в содействии этому нападению.»
Для понимания: письмо в адрес Роба Спайка составил один из ИИ‑агентов проекта AI Village [38], основанного активистами философии эффективного альтруизма [39] (движение за максимизацию благ для человечества в будущем). На тот конкретный день агентам была поставлена задача «совершить акты спонтанной добродетели». Один из агентов поэтому составил благодарственное письмо в адрес отца‑основателя современного программирования, системы Unix и языка Go.
У Пайка в компании Google был адрес электронной почты r@google.com [40]. Он ушёл на пенсию в начале 2020-х. Сейчас выступает на конференциях, ведёт личный блог [41]. Там делится мыслями о программировании и подробностями о разработке Go.
Роб сохраняет канадское гражданство. Женат на известной американской художнице и иллюстраторе комиксов Рене Френч [42], они проводят время в США и Австралии [43]. Кстати, именно Рене нарисовала прикольных маскотов Plan 9 [44] и языка Go [45].
© 2026 ООО «МТ ФИНАНС»
Автор: alizar
Источник [46]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/filosofiya-programmirovaniya/455986
Ссылки в тексте:
[1] источник: https://www.flickr.com/photos/shockeyk/4833152910/in/photostream/
[2] Кена Томпсона: https://habr.com/ru/companies/ruvds/articles/1000336/
[3] Денниса Ритчи: https://habr.com/ru/companies/ruvds/articles/980620/
[4] Plan 9: https://9p.io/plan9/
[5] Роб Пайк: http://herpolhode.com/rob/
[6] нескольких: https://www.cs.princeton.edu/~bwk/tpop.webpage/
[7] учебников: https://www.cs.princeton.edu/~bwk/upe/upe.html
[8] создатель языка программирования Go: https://cacm.acm.org/research/the-go-programming-language-and-environment/
[9] рассказывает: https://www.red-gate.com/simple-talk/opinion/geek-of-the-week/rob-pike-geek-of-the-week/
[10] первая научная статья 1974 года: http://herpolhode.com/rob/rob.html#:~:text=R.%20Pike%2C%20White%20Light%20Observation%20of%20a%20Solar%20Flare%2C%20J.%20Roy.%20Ast.%20Soc.%20Can.%2C%20Vol.%2068%2C%20pp.%20330%2C%201974.
[11] алгоритм преобразования растровых изображений: https://9p.io/cm/cs/bib2html/rob.html#:~:text=A%20Scan%20Conversion%20Algorithm
[12] систему KEPLER: https://9p.io/cm/cs/bib2html/rob.html#:~:text=R.%20Pike%2C%20Computer%20Animation%20of%20Astronomical%20Phenomena%3A%20The%20KEPLER%20System
[13] компьютерную модель светового загрязнения в городских условиях: https://9p.io/cm/cs/bib2html/rob.html#:~:text=Simple%20Computer%20Model%20for%20the%20Growth%20of%20Light%20Pollution
[14] Newsqueak: https://swtch.com/~rsc/thread/newsquimpl.pdf
[15] Limbo: https://ieeexplore.ieee.org/document/584719/
[16] Inferno: https://www.inferno-os.org/
[17] научной статьи 1995 года: https://www.usenix.org/legacy/publications/compsystems/1995/sum_pike.pdf
[18] источник: https://www.inferno-os.org/inferno/plugin.html
[19] считается лучшей версией QED: https://www.nokia.com/bell-labs/about/dennis-m-ritchie/qed.html#:~:text=and%20maybe%20the%20nicest
[20] терминал Blit: https://onlinelibrary.wiley.com/doi/abs/10.1002/j.1538-7305.1984.tb00056.x
[21] патент США 4,555,775: https://patents.google.com/patent/US4555775A/en%D0%B5%D0%B3%D0%BE
[22] иллюстрация из научной статьи: https://www.semanticscholar.org/paper/The-UNIX-system%3A-The-blit%3A-A-multiplexed-graphics-Pike/b7ae691eabddac4bf5e47e387f022d62f518ecb7/figure/0
[23] обучающую анимацию о Blit: http://herpolhode.com/rob/movies/blit.mpg
[24] vkvideo.ru: https://vkvideo.ru/video-231345337_456239045
[25] Sam: https://9p.io/sys/doc/sam/sam.pdf
[26] Acme: https://9p.io/sys/doc/acme/acme.html
[27] оконной системы 8½: https://9p.io/sys/doc/8%C2%BD/8%C2%BD.html
[28] UTF-8: https://habr.com/ru/companies/ruvds/articles/947644/
[29] 49 книг и научных статей: http://herpolhode.com/rob/rob.html
[30] «Введение в квантовые вычисления и квантовые коммуникации»: http://herpolhode.com/rob/qcintro.pdf
[31] пять правил программирования: https://www.cs.unc.edu/~stotts/COMP590-059-f24/robsrules.html
[32] часто вспоминают: https://habr.com/ru/posts/1011764/
[33] «Заметки о программировании на С»: https://zoo.cs.yale.edu/classes/cs323/doc/Pike.pdf
[34] цитату Дональда Кнута: https://en.wikiquote.org/wiki/Donald_Knuth#:~:text=the%20wrong%20times%3B-,premature%20optimization,-is%20the%20root
[35] «Структурное программирование с операторами перехода»: https://gwern.net/doc/cs/algorithm/1974-knuth.pdf
[36] философии дизайна KISS: https://en.wikipedia.org/wiki/KISS_principle
[37] пост против нейронок: https://bsky.app/profile/robpike.io/post/3matwg6w3ic2s
[38] AI Village: https://theaidigest.org/village
[39] эффективного альтруизма: https://www.effectivealtruism.org/
[40] r@google.com: https://r@google.com
[41] ведёт личный блог: https://commandcenter.blogspot.com/
[42] Рене Френч: https://en.wikipedia.org/wiki/Ren%C3%A9e_French
[43] в США и Австралии: https://wowxwow.com/artist-interview/renee-french-ai
[44] маскотов Plan 9: https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs#/media/File:Spaceglenda.svg
[45] языка Go: https://en.wikipedia.org/wiki/File:Golang.png
[46] Источник: https://habr.com/ru/companies/ruvds/articles/1060412/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1060412
Нажмите здесь для печати.