Книга 1

Молчаливая Пустота

1.1

В молчаливой пустоте сформировалось таинственное Нечто, и это было рождением. С тех пор Оно постоянно изменяется, находясь в одиночестве и неподвижности. Это исток всех программ. Мне неведомо Его имя, поэтому буду называть Его Дао Программирования.

Если Дао прекрасно, то и операционная система прекрасна. Если операционная система прекрасна, то и компилятор прекрасен. Если компилятор прекрасен, то и прикладные программы прекрасны. И пользователь доволен и живёт в гармонии с миром.

Дао уплывает вдаль и возвращается с утренним ветром.

1.2

Из Дао родился машинный язык. Из машинного языка родился ассемблер. Из ассемблера родился компилятор. Сейчас существует десять тысяч языков. У каждого языка есть предначертание, даже у самого простого. Каждый язык выражает Инь и Ян программирования. Каждый язык имеет своё место в Дао. Но не программируйте на КОБОЛе, если можете этого избежать!

1.3

В начале было Дао. Из Дао появились Пространство и Время. Таким образом, Пространство и Время — это Инь и Ян программирования. Программистам, которые не постигли Дао, всегда не хватает пространства и времени для выполнения их программ. А программистам, которые постигли Дао, всегда доступны время и пространство для достижения их целей.

А как же может быть иначе?

1.4

Мудрый программист слышал о Дао и следует ему. Обычный программист слышал о Дао и ищет его. Плохой программист слышал о Дао и смеётся над ним. Но тот, кто не смеётся, так же далёк от Дао, как и тот, кто смеётся. Чем выше звуки, тем труднее их услышать. Путь вперёд есть путь к отступлению. Великий талант — это мёртвый среди живых.

Даже в совершенной программе есть ошибки.

Книга 2

Древние Учителя

2.1

Программисты древности были окружены тайной. Мы не можем измерить всю глубину их мудрости, но мы можем рассказать о них. И кто может узнать секреты их сердец и умов?

Ответ существует только в Дао.

2.2

Великому Учителю Тьюрингу однажды приснилось, что он стал машиной. Когда он проснулся, то воскликнул: “Я не знаю больше, кто я — Тьюринг, которому снится, что он машина, или машина, которой снится, что она Тьюринг!”

2.3

Программист большой компьютерной компании попал однажды на программистскую конференцию, и, вернувшись, сказал своему менеджеру следующее: “Что за программисты работают в других компаниях? Они вели себя плохо и не заботились о своей внешности. Их волосы были длинными и нечёсаными, а их одежда — старой и неглаженой. Они вели себя как деревенщины и сильно шумели, когда я демонстрировал программу.”

Менеджер сказал: “Никогда больше я не должен посылать тебя на конференции. Эти программисты живут по ту сторону физического мира. Они считают жизнь абсурдом, случайным стечением обстоятельств. Они приходят и уходят, и нет границ их знаниям. Забывая ушедшее, они живут только ради своих программ. Почему они должны соблюдать социальные условности?”

Они пребывают в Дао.

2.4

Ученик спросил Учителя: “Я знаю программиста, который никогда не разрабатывал, не документировал и не тестировал свои программы. Но все считают его лучшим программистом в мире. Почему?”

Учитель ответил: “Этот программист творит в Дао. Он стоит выше необходимости в разработке, он не сердится, если система перестаёт работать, он принимает вселенную, как она есть. Он стоит выше необходимости в документации, ему не нужно, чтобы кто-нибудь хвалил его код. Он стоит выше необходимости в тестировании, все его программы совершенны в себе, безмятежны и элегантны, их назначение самоочевидно. Истинно, он постиг тайну Дао.”

Книга 3

Разработка

3.1

Как-то раз на большую компьютерную выставку пришёл человек. Заходя, он сказал охраннику у двери: “Я великий вор, прославившийся своими ограблениями. Будьте бдительны, на этой выставке я не останусь без добычи”.

Эта речь сильно обеспокоила охранника, так как внутри находилась компьютерная техника, которая стоила миллионы долларов — он следил за этим человеком очень внимательно. Но человек просто бродил от стенда к стенду, бормоча что-то про себя.

Когда человек выходил, охранник осмотрел его и обыскал его одежду, но ничего не нашёл.

На следующий день выставки человек пришёл опять и сказал охраннику: “Вчера я ушёл с большой добычей, но сегодня её будет ещё больше”. В конце дня охранник обыскал его ещё тщательней, но ничего не нашёл.

На последний день выставки охранник не мог больше сдержать своего любопытства. “Господин Вор”, — сказал он, — “я так озадачен, что не могу жить в согласии с самим собой. Пожалуйста, просветите меня. Что вы воруете?”

Человек улыбнулся. “Я ворую идеи”, — сказал он.

3.2

Жил некогда на свете Учитель, который писал неструктурированные программы. Его ученик, который пытался подражать ему, так же стал писать неструктурированные программы. Когда ученик попросил Учителя оценить его прогресс, учитель отругал его за написание таких программ, сказав: “Что позволено Учителю, не позволено ученику. Ты должен постигнуть Дао до того, как структура станет трансцендентальной”.

3.3

При дворе волшебника Ву жил некогда программист. Однажды волшебник спросил его: “Что легче разработать: бухгалтерскую программу или операционную систему?”

“Операционную систему”, — ответил программист.

Волшебник недоверчиво хмыкнул. “Конечно, бухгалтерский пакет по сложности находится рядом с операционной системой, но он проще”, — сказал он.

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

Волшебник Ву кивнул и улыбнулся. “Это всё хорошо и прекрасно, но что из них проще отлаживать?”

Программист не дал ответа.

3.4

Менеджер пришёл к Учителю и показал ему требования на новое приложение. Менеджер спросил Учителя: “Сколько потребуется времени для разработки этой системы, если я назначу на неё пять программистов?”

“Один год”, — ответил Учитель.

“Но эта система нужна нам как можно скорее! Сколько потребуется времени, если я назначу десять программистов?”

Учитель нахмурился. “В этом случае потребуется два года.”

“А если назначу сотню программистов?”

Учитель пожал плечами. “Тогда разработка никогда не закончится”, — сказал он.

Книга 4

Кодирование

4.1

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

Программа должна следовать “Закону наименьшего удивления”. Что это за закон? Он гласит, что программа должна всегда отвечать пользователю так, чтобы вызывать у него наименьшее удивление.

Независимо от сложности программы, она должна работать как один-единственный модуль. Программа должна управляться логикой, а не внешними условностями.

Если программа не соответствует этим требованиям, она будет никому не нужной. Единственный путь исправить положение — переписать программу.

4.2

Ученик спросил Учителя: “У меня есть программа, которая когда запускается, а когда и нет. Я следовал правилам программирования, но она всё равно не работает. Зачем же нужны эти правила?”

Учитель ответил: “Ты не получил желаемого, потому что ты не постиг Дао. Только дурак ожидает рационального поведения от людей. Почему ты ожидаешь его от машины, которая разработана людьми? Компьютеры только симулируют детерминизм, одно лишь Дао совершенно.

Правила программирования преходящи, только Дао вечно. Таким образом, ты должен созерцать Дао перед тем как достигнешь просветления”.

“Но как узнаю, что я достиг просветления?”, — спросил ученик.

“Твои программы начнут работать правильно”, — ответил Учитель.

4.3

Учитель объяснял природу Дао одному из своих учеников. “Дао присутствует во всех программах — даже в самых маленьких”, — сказал Учитель.

“Есть ли Дао в ручных калькуляторах?” — спросил ученик.

“Да”, — последовал ответ.

“А в видеоиграх?”, — продолжал ученик.

“Оно есть даже в видеоиграх”, — ответил Учитель.

“А в ДОС?”

Учитель кашлянул и чуть отодвинулся. “Урок на сегодня закончен”, — сказал он.

4.4

Программист принца Вонга писал программу. Его пальцы танцевали по клавиатуре. Программа скомпилировалась без единой ошибки и выполнилась словно дуновение ветерка.

“Превосходно!”, — воскликнул принц, — “твоя техника потрясающа!”

“Техника?” — сказал программист, отворачиваясь от терминала. — “Всё, что я делаю, — это Дао, оно находится выше техники! Когда я впервые начал программировать, я увидел перед собой целую кучу задач. Через три года я больше не видел кучи. Вместо неё я пользовался подпрограммами. Но сейчас я их не вижу. Я весь пребываю в бесформенном ничто. Моё сознание праздно. Мой дух, свободный в работе без плана, следует своим собственным инстинктам. Короче, мои программы пишут себя сами. Правда, иногда возникают трудные проблемы. Я вижу как они приходят, я замедляюсь, я безмолвно наблюдаю. Потом я изменяю одну строку кода и трудности исчезают, как дымка. И я компилирую программу. Потом сижу и позволяю радости от работы заполнить меня всего. На момент я закрываю глаза и тогда выключаю компьютер.”

Принц Вонг сказал: “Если бы все мои программисты были такими мудрыми!”

Книга 5

Сопровождение

5.1

Часто открываемая дверь не нуждается в смазке.

Быстрый поток невозможно затормозить. Ни звук, ни мысли не могут проходить сквозь вакуум.

Программы загнивают, если ими не пользоваться.

Это великие тайны.

5.2

Менеджер спросил программиста, сколько тому потребуется времени на то, чтобы дописать программу.

“Она будет готова завтра”, — ответил программист.

“Я думаю, твоя оценка нереалистична”, — сказал менеджер, — “подумай ещё раз.”

Программист подумал ещё немного.

“У меня есть некоторые идеи, которые я хочу реализовать. Всё вместе это займёт две недели”, — был его ответ.

“Ну, я не буду ходить к тебе всё это время”, — сказал менеджер, — “когда напишешь программу, просто скажи мне об этом сам.”

Программист согласился с ним.

Через несколько лет менеджер уходил в отставку. Идя на званный ужин, посвящённый этой отставке, он обнаружил программиста спящим у терминала. Тот программировал всю ночь.

5.3

Однажды ученику дали задание написать несложный финансовый пакет.

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

Когда Учитель спросил об этом у ученика, тот возмутился. “Не будьте таким нетерпеливым”, — сказал он, — “когда-нибудь я добавлю в программу финансовую часть.”

5.4

Бросит ли хороший фермер на произвол судьбы урожай, который он выращивает? Проглядит ли хороший учитель даже самого скромного ученика? Станет ли хороший отец морить голодом своего единственного ребёнка? Откажется ли хороший программист от сопровождения своей программы?

Книга 6

Менеджмент

6.1

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

Истинно, это не Дао Программирования.

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

Истинно, это Дао Программирования.

6.2

Почему программисты непродуктивны? Потому что они расходуют своё время на совещания.

Почему программисты бунтуют? Потому что в их работу вмешиваются менеджеры.

Почему программисты сменяются один за другим? Потому что они сгорают.

Работая на плохой менеджмент, они не видят больше значения в своей работе.

6.3

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

Он даже попытался премировать программиста, но программист отклонил это предложение, сказав: “Я написал программу, потому что я нашёл в ней интересную концепцию, и поэтому я не жду награды.”

Менеджер выслушал это замечание. “Этот программист, хотя он и занимает небольшую должность, хорошо понимает, в чём заключается долг разработчика. Я думаю, надо дать ему более хорошую должность консультанта по менеджменту!”

Когда он сказал это, программист ещё раз отклонил его предложение, сказав, “Я создан так, что я умею программировать. Если меня повысят в должности, я не смогу ничего делать и только буду отнимать у людей время. Могу я идти? Сейчас я работаю над одной программой.”

6.4

Менеджер пришёл к своим программистам и сказал им: “Что касается вашего рабочего времени: вы должны приходить на работу в девять часов утра и работать до пяти часов вечера”. Услышав это, программисты рассердились, а некоторые решили уволиться.

Тогда менеджер сказал: “Хорошо, в таком случае вы можете установить ваш собственный график работы до тех пор, пока вы не завершите ваши проекты”. Программисты, на этот раз удовлетворённые, стали приходить на работу в полдень и работать до самого утра.

Книга 7

Корпоративная мудрость

7.1

Ученик спросил у Учителя: “На Западе существует знаменитая структура управления, которую люди называют “Корпоративным Центром”. У неё есть вице-президенты и бухгалтера. Она издаёт множество памяток, и каждая гласит: “в следующую инстанцию” или “в предыдущую инстанцию”, но никто не знает, что это значит. Каждый год появляются новые ветви, но никто не знает, зачем это нужно. Как может существовать такая ненатуральная конструкция?”

Учитель ответил: “Ты воспринимаешь эту необъятную структуру и проповедуешь о том, что в ней нет рационального зерна. Разве ты не забавляешься её бесконечными вращениями по кругу? Разве ты не наслаждаешься безоблачным покоем программирования под её покровом? Почему ты беспокоишься о её бесполезности?”

7.2

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

Ученик при появлении птицы, изумлённо таращит глаза, так как она находится выше его понимания. Программист боится прилёта птицы, так как боится этого письма. Учитель продолжает работать за своим терминалом, так как он даже не замечает прилёта и отлёта птицы.

7.3

Волшебник Башни Слоновой Кости принёс свою последнюю разработку Учителю для проверки. Он втащил большую чёрную коробку в комнату Учителя, в то время как тот молча ожидал.

“Это интегрированная, разделённая рабочая станция общего назначения”, — сказал Волшебник, — “эргономически разработанная, с собственной операционной системой, языками шестого поколения и разнообразными видами пользовательского интерфейса. Для её разработки потребовалось несколько сотен человеко-лет. Разве она не изумительна?”

Учитель пренебрежительно поднял брови. “В самом деле, она изумительна”, — сказал он.

“Из Корпоративного Центра поступила команда”, — продолжал Волшебник, — “чтобы все использовали эту рабочую станцию, как платформу для новых программ. Вы с этим согласны?”

“Конечно”, — ответил Учитель. — “Немедленно перенесу её в вычислительный центр!” И Волшебник вернулся в свою башню, удовлетворённый.

Через несколько дней один из учеников Учителя зашёл к нему в офис и спросил: “Я не могу найти листинг моей новой программы, вы не знаете, где она может быть?”

“Знаю”, — ответил Учитель. — “Листинг лежит в стопке бумаг на платформе в вычислительном центре.”

7.4

Учитель идёт от программы к программе без страха. Никакие изменения в менеджменте не могут повредить ему. Он не будет злиться, даже если проект не будет закончен. Почему? Он пребывает в Дао.

Книга 8

Аппаратное и программное обеспечение

8.1

Ученик спросил Учителя: “Я узнал, что одна компьютерная компания намного больше, чем все остальные. Она вздымается над своими конкурентами, как великан над лилипутами. Любое из её подразделений может захватить целый рынок. Почему это так?”

Учитель ответил: “Почему ты задаёшь такие дурацкие вопросы? Эта компания большая, потому что она большая. Если бы она делала только аппаратуру, никто бы не стал покупать эту аппаратуру. Если бы она делала только программы, никто бы не пользовался ими. Если бы она только поддерживала системы, люди бы обращались с ней, как с прислугой. Но так как она объединяет в себе все эти вещи, люди думают, что она Божественна! Не прикладывая усилий, она побеждает.”

8.2

Однажды Учитель пришёл к своему ученику и увидел, что тот играет в ручную компьютерную игру. “Извини”, — сказал Учитель, — “можно мне попробовать?”.

Ученик отвлёкся от игры и отдал её Учителю. “Я вижу, что у игры есть три уровня сложности: простой, средний и трудный”, — сказал Учитель, — “но в каждой игре есть ещё один уровень, когда игра не может ни победить человека, ни быть побеждённой человеком.”

“Пожалуйста, Учитель”, — попросил ученик, — “покажите мне, как установить этот уровень.”

Учитель бросил игру на землю и растоптал её ногами. И ученик достиг просветления.

8.3

Жил однажды на свете программист, который программировал для персональных компьютеров. “Посмотри, как я хорошо здесь устроился”, — сказал он, когда программист, работавший на майнфрейме, пришёл к нему в гости. — “У меня есть своя собственная операционная система и устройство для хранения файлов. Я ни с кем не разделяю своих ресурсов. У меня самодостаточное и легкоиспользуемое программное обеспечение. Почему ты не бросишь свою работу и не станешь работать как я?”

Тогда программист, который работал на майнфрейме, стал описывать эту систему своему другу. Он сказал: “Майнфрейм напоминает мне древнего мудрого старца, медитирующего посреди вычислительного центра. Его диски раскинулись от края и до края, словно океан машин. Программное обеспечение многогранно, как алмаз, и также пёстро, как первобытные джунгли. Программы, одна непохожая на другую, текут по системе, как великие реки. Вот почему я счастлив, когда я там.”

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

8.4

Аппаратное обеспечение встретило программное по дороге в Чань-Цзы. Программное обеспечение сказало: “Ты — это Инь, Я — это Ян. Если мы будем путешествовать вместе, то станем известными и заработаем кучу денег”. И они пошли вместе, мечтая покорить мир.

Через некоторое врем они встретили ПЗУ-программу, одетую в лохмотья и хромающую вдоль дороги. ПЗУ-программа сказала им: “Дао лежит между Инь и Ян. Оно незаметно, как лужа воды. Оно не ищет славы, поэтому никто о нём не знает. Оно не ищет случая, так как оно самодостаточно. Оно существует по ту сторону пространства и времени.”

Программное и аппаратное обеспечения, пристыженные, вернулись домой.