Дао Программирования
Переведено Джефри Джеймсом
Русский перевод - herm1t 1999,2005
Оглавление
- Книга 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
Волшебник из Башни Слоновой Кости принес свое последнее изобретение на пробу мастеру программисту. Волшебник вкатил большой черный ящик в оффис к мастеру, пока мастер ожидал в молчании.
"Это интегрированная, распределенная рабочая станция общего назначения", - начал волшебник, "эргономично спроектированная, с патентованной операционной системой, языками шестого поколения и многочисленными state-of-art пользовательскими интерфейсами. На конструирование у моих помошников ушло несколько сот человеко-лет. Разве не изумительно?
Мастер слегка повел бровями. "В самом деле изумительно" - сказал он.
"Штаб-квартира Корпорации приказывает", - продолжил волшебник, "каждый должен использовать эту рабочую станцию в качестве платформы для новых программ. Вы с этим согласны?"
"Конечно", - ответил мастер, "я немедленно отправлю ее в вычислительный центр!". И волшебник вернулся в свою башню очень довольный.
Через несколько дней новичок забрел в оффис к мастеру программисту и сказал: "Я не могу найти листинг своей новой программы. Вы не знаете где бы он мог быть?"
"Да", - ответил мастер, "листинги сложены на платформе в вычислительном центре".
7.4
Программист мастер переходит от программы к программе без страха. Изменения в управлении не повредят ему. Он не будет уволен, даже если проект будет свернут. Почему так? Он полон Дао.
Книга 8 - Программы и Железо
Изречено мастером программистом:
Без ветра не колышется трава, без программ компьютеры бесполезны. [прим.]
8.1
Новичок спросил мастера: "Я вижу, что одна компьютерная компания гораздо крупнее всех прочих. Она возвышается над своими соперниками, как гигант среди карликов. Любое из ее подразделений могло бы быть отдельным предприятием. Почему так?"
Мастер ответил: "Почему ты задаешь такие глупые вопросы? Эта компания большая, потому что она большая. Если бы она выпускала только аппаратуру, никто бы ее не покупал. Если бы она выпускала только программы, никто бы их не использовал. Если бы она только поддерживала системы, люди бы держали ее за прислугу. Но так как она сочитает все эти вещи, люди думают, что она одно из божеств! Не пытаясь прилагать усилия, она без труда побеждает."
8.2
Однажды мастер программист проходил мимо новичка. Мастер заметил, что новичок увлечен наладонной компьютерной игрой. "Извини", - сказал он, "можно посмотреть?
Новичок собрался с мыслями, и передал устройство мастеру. "Я вижу, тут заявлено, что это устройство имеет три уровня сложности: Легкий, Средний и Сложный", - сказал мастер. "Еще каждое из этих устройств имеет дополнительный уровень игры, на котором устройство не пытается победить человека, но и не позволяет человеку себя победить".
"Прошу, великий мастер", - заклинал новичок, "как обнаружить эти таинственные настройки?"
Мастер бросил устройство на пол и раздавил ногой. Внезапно, новичок достиг просветления.
8.3
Был однажды программист, который работал с микропроцессорами. "Смотри, как мне здесь хорошо", - сказал он программисту мейнфреймов, который пришел к нему в гости. "У меня есть своя собственная операционная система и устройство для хранения файлов. Я не должен делиться с кем-либо своими ресурсами. Прграмное обеспечение самодостаточно и легко в обращении. Почему бы тебе не оставить твою теперешнюю работу и не присоединиться ко мне?"
Тогда программист мейнфреймов начал описывать свою систему своему другу, говоря: "Мейнфрейм восседает в середине вычислительного центра, словно древний мудрец в медититации. Его дисковые накопители раскинулись из края в край, как огромный океан машин. Программное обеспечение многогранно, как алмаз и переплетено, как первобытные джунгли. Программы, каждая уникальна, движутся сквозь систему, как быстро текущая река. Вот почему я счастлив там, где я есть".
Программист микропроцессоров, услышав это, замолчал. Но оба программиста остались друзьями до конца своих дней.
8.4
Программа встретила Железо на дороге в Ченци. Программа сказала: "Ты - Инь, а я - Ян. Если мы будем путешествовать вместе, мы станем знамениты и заработаем огромную сумму денег." Так они и пошли дальше вместе, думая завоевать мир.
Вскоре они встретили Фирмварь, который был одет в изорванные лохмотья и хромал мимо, опираясь на шипастую палку. Фирмварь сказал им: "Дао лежит между Инь и Ян. Оно беззвучно и неподвижно, как пруд. Оно не ищет славы, поэтому никто не ощущает его присутствия. Оно не ищет удачи, ибо оно совершенно в себе. Оно существует между пространством и временем."
Программа и Железо, пристыженные, вернулись в свои дома.
Книга 9 - Эпилог
Изречено мастером программистом:
"Самое время тебе уйти"
Примечания
1 В 1972 году вышел телевизионный сериал "Кун Фу". В нем был была такая сцена: молодой Кейн спрашивает учителя о том, когда он сможет покинуть храм. Учитель ответил ему: "как только ты сможешь вырвать камешек из моей руки" (Кейн пытается, у него не получается) "когда ты сможешь взять камешек из моей руки, самое время тебе уйти".
1.1 Дао Дэ Цзин § 25 Вот вещь ... О безвучная! О лишенная формы! ... Я не знаю её имени. Обозначая иероглифом назову ее дао. ... Великое - оно в бесконечном движении. ... Не достигая предела, оно возвращается [к своему истоку]. Вот почему велико дао, велико небо, велика земля велик также и государь.
[ДКФ с. 122]
1.4 Дао Дэ Цзин § 41 Человек высшей учености, узнав о дао, стремится к его осуществлению. Человек средней учености, узнав о дао, то соблюдает его, то нарушает. Человек низшей учености, узнав о дао, подвергает его насмешке. Если оно не подвергалось бы насмешке, не являлось бы дао
. [ДКФ с. 127]
2 Напоминает китайскую поговорку: "После трех дней без чтения, разговор становится безвкусным".
2.1 Дао Дэ Цзин § 15 В древности, те кто был способен к учености ... Но другим их глубина неведома. Поскольку она неведома, [я] произвольно даю [им] описание: ... они были робкими, как будто переходили зимой поток; ... ; они были важными, как гости; они были простыми подобно неотделанному дереву; ... они были непроницаемыми подобно мутной воде.
[ДКФ с. 119]
2.2 Чжуан-цзы, гл. 2 Однажды Чжуан Чжоу приснилось, что он бабочка, ... Неизвестно, Чжуан Чжоу снилось, что он бабочка, или же бабочке снилось, что она Чжуан Чжоу.
[ДКФ с. 261]
4.4 Чжуан-цзы, гл. 3 Повар Дин разделывал бычьи туши для царя Вэнь-хоя. ... - Прекрасно! - воскликнул царь Вэнь-хой. - Сколь высоко твое искусство, повар! Отложив нож, повар Дин сказал в ответ: "Ваш слуга любит Путь, а он выше обыкновенного мастерства. ...
[ЧЦ]
7.2 Чжуан-цзы, гл. 1 В Северном океане есть рыба, имя которой - Гунь. ... Гунь превращается в птицу, имя которой - Пэн. Спина ее [достигает] неизвестно скольких тысяч ли. ... Когда море волнуется Пэн направляется в Южный океан. ... Имея лишь синее небо над собой и никаких препятствий [впереди], только тогда Пэн отправляется на юг.
[ДКФ с. 250]
8 Без ветра не колышется трава
- китайская пословица.
[ДКФ] Древнекитайская философия, т. 1, Мысль, М. 1972
[ЧЦ ] Чжуан-цзы, Перевод В. В. Малявина http://lib.ru/POECHIN/ch_tzh.txt