Дао Программирования


Translated by Geoffrey James
Transcribed by Duke Hillard
Перевод -- Дмитрий Карасик


Содержание

Книга 1 -- Безмолвная пустота

Книга 2 -- Учителя древности

Книга 3 -- Проектирование

Книга 4 -- Написание

Книга 5 -- Поддержка

Книга 6 -- Управление

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

Книга 8 -- Аппаратура и программы

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


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

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

Вскоре они встретили Встроенное обеспечение, хромающее, одетое в изношенное тряпье и опирающееся на шипастую палку. Оно сказало: ''Дао лежит выше Инь и Янь. Оно безмолвно и недвижимо как озеро. Оно не ищет славы, поэтому никто не знает о его присутствии. Оно не ищет богатства, так как оно внутренне совершенно. Дао существует вне пространства и времени''.

Устыдившись, Программа и Аппаратура возвратились по домам.


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

Так говорил Учитель:

''Наступило твое время уходить''.


Copyright 1995 by Duke Hillard Last Revision: Jun 02, 1995.

Copyright 2001 by Dmitry Karasik Last Revision: Jun 01, 2004.