Книга 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


Начальник принёс документ с требованиями к новому приложению мастеру-программисту и спросил: "Сколько времени займёт проектирование этой системы, если я назначу на проект пять программистов?"
"Это займёт год", — не задумываясь, ответил мастер.
"Но система нужна вчера! Сколько это займёт, если я назначу десять программистов?"
Мастер-программист нахмурился: "В этом случае проектирование займёт два года."
"А если я назначу 100 программистов?"
Мастер-программист пожал плечами: "Тогда проект никогда не будет закончен".


Книга 4: Кодирование


Сказано мастером-программистом: "Хорошо написанная программа — это райское наслаждение. Плохо написанная программа — это адские муки"


4.1


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


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


Программа любой сложности должна действовать как единое целое. Программа должна руководствоваться собственной логикой более, чем внешними обстоятельствами.


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


4.2


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


"Твоя программа перестанет падать," — ответил мастер.


4.3


Мастер объяснял природу Дао одному ученику.
"Дао присутствует в любом ПО, даже самом маленьком", — сказал он.
"Есть ли Дао в карманном калькуляторе?" — спросил ученик.
"Есть", — был ответ.
"Есть ли Дао в компьютерной игре?" — спросил ученик.
"Да, даже в компьютерной игре", — сказал мастер.
"Есть ли Дао в ОС DOS для персональных компьютеров?" — спросил ученик.
Мастер закашлялся и немного поменял своё мнение. "На сегодня всё", — сказал он.


4.4


Программист царевича Вана писал программу. Его пальцы порхали над клавиатурой. Программа скомпилировалась без единой ошибки и работала как лёгкий ветерок.
"Великолепно! — воскликнул царевич. — Твоя техника безупречна!"


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


Царевич Ван воскликнул: "Если бы только все мои программисты были бы столь же мудры!"


Книга 5: Сопровождение


Сказано мастером-программистом: "Даже если программа состоит из трёх строчек, рано или поздно, её придётся сопровождать"


5.1


Часто используемая дверь не нуждается в смазке.
Быстрый поток не зарастёт тиной.
Олень незаметен в лесу.
Программы гниют если их не используют.

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


5.2


Начальник спросил программиста, когда будет готова программа над которой тот сейчас работает. "Завтра будет готово", — ответил программист.
"Мне кажется, что ты не реалистичен, — сказал начальник, — Серьёзно, когда будет готово?"
Программист задумался на секунду. "Я бы хотел добавить пару фич. Это займёт не меньше двух недель", — заключил он.
"Даже это звучит слишком оптимистично, — настаивал начальник, — я буду вполне доволен, если ты просто сообщишь мне когда программа будет готова".
Программист согласился.


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


5.3


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


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


Когда мастер спросил об этом, новичок грубо ответил: "Не будьте столь нетерпеливы! Со временем я добавлю финансовую часть."


5.4


Разве хороший крестьянин не ухаживает за посевами?
Разве хороший учитель не замечает даже самого скромного ученика?
Разве хороший отец позволяет ребёнку голодать?
Разве хороший программист отказывается сопровождать свой код?

Книга 6: Начальство


Сказано мастером-программистом: "Пусть будет много программистов и мало начальников. Тогда все будут продуктивны"


6.1


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

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


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

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


6.2


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

6.3


Начальник был на грани увольнения, но программист, работавший на него, написал новую программу, которая стала популярной и хорошо продавалась. В результате начальник сохранил работу.
Начальник хотел дать программисту премию, но тот отказался со словами: "Я написал эту программу потому, что я подумал, что это интересная концепция и мне не нужна награда".
Услышав это начальник заметил: "Не смотря на то что этот разработчик занимает маленькую позицию, он понимает настоящие обязанности работника. Надо бы продвинуть его на более высокую должность помощника руководителя!"


Но, услышав это предложение, программист снова отказался: "Я существую чтобы программировать. Если меня повысить в должности, я лишь буду тратить чьё-то время. Можно я пойду? Я там работаю над одной программой."


6.4


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


Тогда начальник сказал: "Ладно, в таком случае, вы можете работать, как вам удобно, но проекты должны быть окончены в срок". Удовлетворённые программисты стали приходить в обед и работать до раннего утра.


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


Сказано мастером-программистом: "Ты можешь показать программу директору, но ты не можешь сделать его компьютерно грамотным"


7.1


Однажды ученик спросил мастера: "На Востоке, есть огромная древовидная структура. Люди зовут её "Штаб-квартира корпорации". Её форма пухнет от вице-президентов и бухгалтеров. Она издаёт сотни указов, типа "Иди туда!" или "Иди сюда!" и никто не понимает, что имеется ввиду. Ежегодно новые имена появляются на её ветвях без всякой пользы. Как может существовать столь противоестественная сущность?"


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


7.2


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


Программист-ученик удивлённо смотрит на птицу, не понимая её. Средний программист опасается прилёта птицы, ведь он боится её сообщения. Мастер-программист продолжает работать за терминалом, не замечая, ни, как птица прилетела, ни, как она улетела.


7.3


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


"Это интегрированная, распределённая рабочая станция общего назначения, — начал мудрец, — эргономично спроектированная, она содержит патентованную операционную систему, языки программирования шестого поколения и несколько пользовательских интерфейсов высшего класса. Мои ассистенты потратили несколько сотен человеко-лет, чтобы собрать её. Поразительно, не правда ли?"
Мастер-программист слегка заломил бровь: "Это и правда поразительно".
"Из штаб-квартиры корпорации распорядились, — продолжил мудрец, — чтобы все использовали это рабочую станцию в качестве платформы для новых программ. Вы согласны?"
"Конечно, — ответил мастер, — я сейчас же перенесу её в вычислительный центр". И мудрец, очень довольный собой, вернулся в свою башню.


Несколько дней спустя ученик зашёл в кабинет к мастеру-программисту и сказал: "Я не могу найти распечатку моей новой программы. Не знаете ли вы, где бы она могла быть?"


"Знаю, — ответил мастер, — все распечатки сложены на платформе в вычислительном центре".


7.4


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


Книга 8: Железо и программа


Сказано мастером-программистом: "Трава не шевелится без ветра. Железо бесполезно без программы"


8.1


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


Мастер отвечал: "Почему ты задаёшь такие глупые вопросы? Это компания огромна потому, что она огромна. Если бы они делали только железо, никто бы не покупал его. Если бы они делали только программы, никто бы не использовал их. Если бы они только собирали и сопровождали системы, люди видели бы в них слуг. Но, так как они делают все эти вещи, люди думают что они боги! Так они побеждают, не прилагая усилий"


8.2


Однажды мастер-программист шёл мимо ученика. Мастер заметил, что ученик играет в портативную приставку. "Прошу прощения, — сказал он, — можно мне посмотреть?"


Ученик передал устройство мастеру и приготовился внимать. "Я вижу тут есть три уровня сложности: лёгкий, средний и тяжёлый, — сказал мастер, — однако, в каждом таком устройстве есть ещё один уровень, когда устройство не пытается победить человека, но и не позволяет человеку победить себя".
"О, великий мастер! — взмолился ученик, — Как же мне найти эти таинственные настройки?"


Мастер бросил консоль на пол и растоптал её. Внезапно ученик обрёл Просветление.


8.3


Когда-то жил программист, который писал программы для персональных компьютеров. "Смотри, как мне хорошо тут, — сказал он своему гостю, программисту мейнфреймов, — у меня есть собственная операционная система и устройство хранения файлов. Мне не нужно ни с кем делиться ресурсами. Программы согласованы и их легко использовать. Почему бы тебе не уйти с текущей работы и не присоединиться к мне?"


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


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


8.4


Железо встретило Программу по дороге в Чанг Це. Программа сказала: "Ты Инь, а я — Ян. Если мы пойдём вместе, мы разбогатеем и станем знаменитыми." И они пошли вместе, мечтая о том, как они завоюют весь мир.
И тут они встретили одетую в рубище Прошивку, хромающую, опираясь на сучковатую палку. Прошивка сказала им: "Дао лежит вне Инь и Ян. Оно тихо и спокойно, как пруд. Оно не ищет славы, поэтому никто не знает о его присутствии. Оно не ищет богатств, ведь оно совершенно само по себе. Оно существует вне места и времени."


Программа и Железо, посрамлённые, вернулись домой.


Книга 9: Эпилог


Сказано мастером-программистом: "Пора тебе уходить"