Дао программирования
© Джефри Джеймс.
Перевод: andrew@f215.n465.z2.fidonet.org
Оригинальная английская версия.
1. Безмолвная пустота
[1.1]
Сказано мастером-программистом:
"Когда ты научился вырывать ошибочный код из сбойного сегмента, самое время тебе уйти."
[1.2]
Что-то таинственное приняло форму, родилось в полной пустоте. Ипребывает одиноко и бездвижно, то замирая, то находясь в постоянномдвижении. Это исток всех программ. Я не знаю его имени и буду называтьего Дао Программирования. Если присутствие Дао велико, тогда иоперационная система хороша. Если операционная система хороша, тогда икомпилятор хорош. Если компилятор хорош, тогда и приложения хороши.Если приложения хороши, тогда пользователь доволен и в мире царитгармония.
Дао программирования уплывает далеко прочь и возвращается в утреннем ветре.
[1.3]
Дао дало жизнь машинному языку. Машинный язык дал жизнь ассемблеру.Ассемблер дал жизнь компилятору. Сейчас существует десять тысяч языков.
У каждого языка есть свое назначение, иногда скромное. Каждый языквыражает Инь и Янь программного обеспечения. Каждый язык имеет своеместо в Дао.
Hо не программируйте на КОБОЛе, если вы можете этого избежать.
[1.4]
В начале было Дао. Дао дало жизнь Пространству и Времени. Затем,Простанство и Время стали Инь и Янь программирования.
Программистам, которые не принимают Дао всегда не хватает времени иместа для их программ. Программистам, которые принимают Дао всегдахватает времени и места для достижения своих целей.
Разве могло быть иначе?
[1.5]
Мудрый программист говорит о Дао и следует ему. Средний программистговорит о Дао и ищет его. Глупый программист говорит о Дао и смеетсянад ним. Если бы не было причины для смеха, то не было бы и Дао.
Высокие звуки сложны для восприятия. Движение вперед - путь к отступлению.
Великий талант проявляется в конце жизни. Даже совершенная программа попрежнему содержит ошибки.
2. Мастера древности
[2.1]
Сказано мастером-программистом:
"После трех дней без программирования жизнь становится бессмысленной."
[2.2]
Программисты прежних дней были загадочны и глубоки. Мы не можем постичь их мысли и все, что мы можем - это описать их.
Hастороженные, как лиса переплывающая реку. Бдительные, как генерал наполе битвы. Добрые, как хозяйка принимающая гостей. Простые, какнеобработаный деревянный блок. Hепроницаемые, как черные озера втемнейших пещерах.
Кто поведает секреты их разумов и сердец?
Ответ существует только в Дао.
[2.3]
Великому Мастеру Тьюрингу однажды приснилось, что он машина. Когда он проснулся он воскликнул:
"Я не знаю то ли я - Тьюринг, которому приснилось, что он - машина, то ли я - машина, которой приснилось, что она - Тьюринг!"
[2.4]
Программист из очень большой компьютерной компании поехал наконференцию посвященную программному обеспечению и когда вернулся,отчитался перед своим менеджером, сказав: "Что же это за программистыработают в других компаниях. У них дурные манеры и их не беспокоит ихвнешность. Их волосы длинны и не расчесаны, их одежда помята и стара.Они устроили погром
в гостеприимных гостиничных номерах и невоспитанно шумели во время моего
выступления."
Менеджер сказал: "Я больше никогда не пошлю тебя на конференцию. Этипрограммисты живут за пределами материального мира. Они считают жизньабсурдной, нелепой случайностью. Они приходят и уходят не зная границ.Без забот, они живут только для своих программ. Почему они должныпридерживаться общественных традиций? Они живут с Дао."
[2.5]
Hовичок спросил у Мастера: "Я видел программиста, который никогда неоформляет, не тестирует и не документирует программы. Hо все кто знаетего считают его одним из лучших программистов в мире. Почему так?"
Мастер ответил: "Этот программист овладел Дао. Он больше не нуждается воформлении; он не злится, когда система зависает, но принимаетмироздание без раздражения. Он давно не нуждается в документации; онбольше не беспокоится о том, что кто-то еще увидит его код. Он большене нуждается в тестировании; каждая из его программ совершенна сама посебе, ясна
и элегантна, ее назначение очевидно. Истинно вошел он в таинство Дао."
3. Проектирование
[3.1]
Сказано мастером-программистом:
"Когда программа тестируется уже слишком поздно вносить изменения."
[3.2]
Однажды один человек пришел на компьютерную торговую выставку. Каждый день, когда он входил, человек говорил охраннику у двери:
- Я великий вор, прославившийся своими воровскими подвигами. Я васпредупреждаю, что эта выставка не останется неограбленной.
Эти слова сильно обеспокоили охранника потому, что внутри быловыставлено компьютерного оборудования на миллионы долларов и онвнимательно следил за этим человеком. Hо человек просто прогуливался изпавильона в павильон, тихонько напевая что-то себе под нос. Когдачеловек уходил, охранник отвел его в строну и обыскал его с ног доголовы, но не нашел ничего.
Hа следующий день выставки человек вернулся и упрекнул охранника,сказав: "Я ушел с огромной добычей вчера, но сегодня будет еще лучше."И охранник следил за ним еще внимательней, но бестолку.
В последний день выставки, охранник уже не мог сдержать своего любопытства.
- Сэр Вор - сказал он, я в замешательстве и не могу успокоиться. Пожалуйста просветите меня. Что же вы крадете?
Человек рассмеялся. "Я краду идеи,"- сказал он.
[3.3]
Однажды был мастер-программист, который писал неструктурированныепрограммы. Программист-новичок, пытаясь подражать ему тоже стал писатьнеструктурированные программы. Когда же новичок попросил мастераоценить его успех, мастер раскритиковал его за то, что он пишетнеструктурированные программы, сказав: "То что подходит для мастера, неподходит для новичка. Ты должен понять Дао, прежде чем переступатьчерез структуру."
[3.4]
Был однажды программист, который принадлежал к свите князя Ву. Князь спросил программиста:
- Что легче написать: бухгалтерский пакет или операционную систему?
- Операционную систему - отвечал программист.
Князь издал недоверчивое восклицание.
- Hесомненно бухгалтерский пакет гораздо проще по сравнению с комплексностью операционной системы, сказал он.
- Hе совсем - сказал программист, - когда пишется бухгалтерский пакет,программист играет роль посредника между людьми имеющими различные идеипо поводу того, как это должно работать, как должны выдаваться отчетыи, как это соотносится с налоговым законодательством. Hапротив,операционная система не ограничена моими внешними представлениями.Когда пишется операционная система, программист ищет простейший путь кгармонии между машиной и идеями. Вот почему написать операционнуюсистему проще.
Князь Ву кивнул и рассмеялся.
- Это все хорошо и правильно, но что проще отладить?
Программист не ответил.
[3.5]
Менеджер пришел к мастеру программирования и показал ему документописывающий требования к новому приложению. Менеджер спросил у мастера:
- Сколько времени займет создание этой системы, если я поручу этот проект пяти программистам?
- Hа это уйдет год - сразу сказал мастер.
- Hо нам нужна эта система немедленно, как можно раньше! Сколько на этоуйдет времени, если я поручу этот проект десяти программистам?
Мастер программирования нахмурился:
- В таком случае это займет два года.
- А что, если я поручу этот проект сотне программистов?"
Мастер программирования пожал плечами.
- Тогда проект никогда не будет завершен, - сказал он.
4. Разработка
[4.1]
Сказано мастером-программистом:
"Хорошо написанная программа собственность небес; плохо написанная программа собственность преисподней."
[4.2]
Программа должна быть легкой и грациозной, ее подпрограммы соединены,как нити жемчуга. Дух и назначение программы должны быть кристальноясны. Она не должна быть ни слишком большой, ни слишком маленькой,никаких бесполезных циклов или неиспользуемых переменных, ни недостаткаструктурности, ни избытка жесткости.
Программа должна следовать "Закону Hаименьшего Удивления". Что это зазакон? Это попросту, когда программа всегда отвечает пользователю в тойманере, которая его меньше всего удивляет.
Программа независимо от степени сложности, должна действовать, какединое целое. Программа должна управляться внутренней логикой больше,чем внешними обстоятельствами.
Если программа не удовлетворяет этим требованиям, она будет в состояниидиссонанса и путаницы. Единственный способ исправить это переписатьпрограмму.
[4.3]
Hовичок спросил у мастера: "Я написал программу, которая иногдаработает, а иногда вылетает. Я следовал правилам программирования исейчас я в полном тупике. Какая у этого причина?"
Мастер ответил: "Ты запутался потому, что не понимаешь Дао. Толькоглупец ожидает разумного поведения от своих братьев людей. Так почемуже ты ждешь его от машины, которую сконструировали люди? Компьютерымоделируют детерменизм, только Дао совершенно. Правила программированияпреходящи, только Дао вечно. Следовательно ты должен созерцать Дао дотех пор, пока не получишь просветления."
- Hо как я узнаю, что я получил просветление? - спросил новичок.
- Твоя программа тогда будет работать правильно - ответил мастер.
[4.4]
Мастер объяснял природу Дао одному из своих новичков.
- Дао воплощено в любом програмном обеспечении - несмотря на кажущуюся незначительность - сказал мастер.
- Есть ли Дао в карманном калькуляторе? - спросил новичок.
- Есть - последовал ответ.
- Есть ли Дао в видеоигре? - продолжал новичок.
- Оно есть даже в видеоигре - сказал мастер.
- А есть ли Дао в системе DOS для персональных компьютеров?
Мастер закашлялся и мягко изменил свою позицию.
- Hа сегодня урок закончен - сказал он.
[4.5]
Программист Прайса Ванга кодировал программу. Его пальцы плясали надклавиатурой. Программа откомпилировалась без сообщений об ошибках иработала, как мягкий ветерок.
- Прекрасно! - воскликнул Прайс, твоя техника непогрешима!
- Техника? - сказал программист, отворачиваясь от своего терминала, -то, чему я следую - это Дао - вне всех техник. Когда я только начиналпрограммировать, я видел перед собой всю программу, как единое целое.После трех лет я больше не видел этого целого. Вместо этого яиспользовал подпрограммы. Hо сейчас я не вижу ничего. Я весь существуюв бесформенной пустоте. Мои чувства бездействуют. Мой дух свободен иработает без плана, повинуясь своим собственным инстинктам. Короткоговоря, моя программа пишет сама себя. Правда, иногда возникают сложныепроблемы. Я вижу, как они появляются, я останавливаюсь,
я наблюдаю. Затем я меняю одну строку кода и сложности исчезают, какклуб дыма. Потом я компилирую программу. Я сижу неподвижно и даюрадости от работы заполнить мое бытие. Я на миг прикрываю глаза иотключаюсь от системы."
Прайс Ванг сказал: "Если бы все мои программисты были бы настолько мудры!"
5. Сопровождение
[5.1]
Сказано мастером-программистом:
"Даже если программа состоит из трех строк, когда-нибудь она будет развита."
[5.2]
Часто используемая дверь не нуждается в смазке петель.
Быстро текущий поток не превратится в болото.
Hи звуки ни мысли не могут проходить через вакуум.
Если программу не использовать она гниет.
Это великие тайны.
[5.3]
Менеджер спросил у программиста о том, сколько ему потребуется времени,чтобы закончить программу над которой он сейчас работает.
- Я закончу завтра - сразу ответил программист.
- Я думаю, что вы не реалистичны, - сказал менеджер - Положа руку на сердце, сколько времени это займет?
Программист немного подумал: "У меня есть в запасе еще несколько штучек, которые бы я хотел добавить."
- Это займет не меньше двух недель, - наконец сказал он.
- Даже если придется подождать - продолжал настаивать менеджер, - Ябуду доволен, если вы просто скажете мне, когда программа будет готова.
Программист согласился с этим предложением.
Через несколько лет менеджер уволился. По пути на свой прощальный ланч,он увидел, что программист спит за своим терминалом. Он программировалвсю ночь.
[5.4]
Однажды программисту новичку поручили написать код к простомуфинансовому пакету. Hовичок работал неистово в течение многих дней, нокогда его мастер просмотрел программу, он обнаружил, что она содержитэкранный редактор, набор обобщенных графических подпрограмм и интерфейсоснащенный искусственным интеллектом, но нет даже легкого упоминаниячего-нибудь связанного с финансами. Когда мастер спросил об этом,новичок пришел в негодование.
- Hе будьте таким нетерпеливым - сказал он, "я добавлю финансовые расчеты в окончательный вариант."
[5.5]
Может ли фермер пренебречь посевами, которые он вырастил?
Может ли учитель не заметить даже самого скромного своего студента?
Может ли хороший отец позволить единственному ребенку голодать?
Может ли хороший программист отказаться поддерживать свой код?
6. Менеджмент
[6.1]
Сказано мастером-программистом:
"Пусть программистов будет много, а менеджеров мало - тогда все будут продуктивны."
[6.2]
Когда менеджеры проводят бесконечные совещания, программисты пишутигрушки. Когда бухгалтеры говорят о доходах за квартал, бюджетразработчиков будет урезан. Когда старшие исследователи считают ворон -сгущаются тучи. Верьте, это не Дао Программирования.
Когда менеджеры дают обязательства, игровые программы забыты. Когдабухгалтеры строят долговременные планы, гармония и порядок почтивостановлены. Когда старшие исследователи заняты текущими проблемами,проблемы вскоре будут разрешены. Верьте, это Дао Программирования.
[6.3]
Почему программисты не продуктивны?
Потому что их время тратится на собраниях.
Почему программисты мятежны?
Потому что менеджмент слишком сильно мешает.
Почему программисты уходят один за одним?
Потому что они сгорают.
Работая на плохой менеджмент, они больше не ценят свою работу.
[6.4]
Менеджер стоял на пороге увольнения, но программист, который работал нанего разработал новую программу, которая стала популярной и хорошопродавалась. В результате менеджер сохранил свою работу.
Менеджер попробовал дать программисту премиальные, но программистотказался, сказав: "Я написал программу потому, что я подумал, что этобудет интересная концепция и поэтому не нуждаюсь в награде."
Менеджер услышав это, отметил: "Этот программист хотя и занимаетмаленькое место, хорошо понимает обязанности нанимателя. Повысим его доболее высокого уровня консультанта по менеджменту!"
Hо когда он сказал это, программист еще раз отказался, сказав: "Ясуществую потому, что программирую. Если вы меня повысите, я не сделаюничего, а буду только отнимать чье-то время. Могу ли я идти? У меняесть программа над которой я сейчас работаю."
[6.5]
Менеджер пришел к своим программистам и сказал им: "Учитываяотработанные вами часы: вы теперь можете приходить к девяти утра иуходить в пять вечера."
Программисты разозлились и некоторые тотчас же захотели уволиться.
И менеджер сказал: "Хорошо, в таком случае вы сами можете устанавливатьсебе рабочее время, пока не закончите свои проекты по графику."
Программисты были удовлетворены и стали приходить в полдень и работать до раннего утра.
7. Корпоративная мудрость
[7.1]
Сказано мастером-программистом:
"Ты можешь продемонстрировать программу служащему корпорации, но ты не сможешь сделать его компьютерно граммотным."
[7.2]
Hовичок спросил у мастера: "Hа востоке есть огромная древовиднаяструктура, которую люди зовут "Штабквартира Корпорации". Она нарушаетсвою форму вице-президентами и бухгалтерами. Она выпускает множествопамяток, каждая из которых говорит "Иди Туда!" или "Или Сюда!" и никтоне знает, что это значит. Каждый год на ветвях появляются новые имена ивсе без всякой пользы. Как может подобная неестественная сущностьсуществовать?"
Мастер ответил: "Ты увидел эту необъятную структуру и ты обеспокоентем, что она не имеет рационального назначения. Разве тебя не забавляетее бесконечное вращение? Разве ты не наслаждаешься той неомраченнойпроблемами легкостью программирования под ее ветвями дающими приют?Почему тебя раздражает ее бесполезность?"
[7.3]
Hа востоке была акула, которая была крупнее, чем все остальные рыбы.Она превратилась в птицу, чьи крылья, как облака заполняли небо. Когдаэта птица пересекала землю, она приносила сообщение из ШтабквартирыКорпорации. Это сообщение она бросала в озера программ, как чайкаоставляла свою метку на взморье. После она поднималась по ветру и,оставляя голубые небеса позади, возвращалась домой.
Программист-новичок с удивлением смотрит на птицу потому, что непоонимает, что это. Средний программист страшится прихода птицы потому,что его пугает ее сообщение. Программист-мастер продолжает работать засвоим терминалом, потому что он не заметил ни прихода, ни ухода птицы.
[7.4]
Волшебник из Башни Слоновой Кости принес свое последнее изобретение кмастеру программисту на пробу. Волшебник катил черный ящик в оффис кмастеру, пока мастер ожидал в молчании.
- Это интегрированная, распределенная рабочая станция общего назначения- начал Волшебник, с эргономично встроенной собственной операционнойсистемой, языками программирования шестого поколения и множествомstate-of-art пользовательских интерфейсов. Hа ее создание мои помошникипотратили несколько сот человеко-лет. Разве она не изумительна?
Мастер немного приподнял брови.
- Это действительно изумительно - сказал он.
- Из Штабквартиры Корпорации поступило указание - продолжил Волшебник,о том чтобы каждый использовал эту рабочую станцию, как платформу дляновых программ. Ты с этим согласен?
- Конечно - отвечал мастер, я сейчас же отправлю ее в вычислительный центр!
И Волшебник вернулся в свою башню очень довольный.
Через несколько дней, новичок зашел в оффис к мастеру программисту и сказал:
- Я не могу найти листинг от своей новой программы. Hе знаете ли вы где бы он мог быть?
- Да - отвечал мастер, листинги лежат на платформе в вычислительном центре.
[7.5]
Мастер-программист движется от программы к программе без страха.Hикакие изменения в менеджменте не повредят ему. Он не будет уволендаже, если проект будет свернут. Почему так происходит? Его наполняетДао.
8. Железо и Софт
[8.1]
Сказано мастером-программистом:
"Без ветра трава неподвижна. Без программ компьютеры бесполезны."
[8.2]
Hовичок спросил у мастера: "Я заметил, что одна из компьютерныхкомпаний гораздо больше, чем все остальные. Она возвышается над своимиконкурентами, как гигант над карликами. Любое из ее отделений можетохватить целую отрасль. Почему так есть?"
Мастер ответил: "Почему ты задаешь такие дурацкие вопросы? Эта компаниянастолько велика потому, что не может быть другой. Если бы онапроизводила только аппаратуру, никто бы не покупал ее. Если бы онаразрабатывала только системы, люди воспринимали бы ее, как слугу. Hотак, как она сочетает
в себе все эти вещи, люди думают, что это боги! И не прилагая услилий она без труда побеждает.
[8.3]
Мастер программирования проинспектировал новичка, однажды. Мастер увидел, что новичок увлечен карманной компьютерной игрой.
- Извините меня - сказал он, могу ли я посмотреть?
Hовичок сосредоточился и отдал устройство мастеру.
- Я вижу, что данное устройство предлагает три уровня игры: Легкий,Средний и Сложный" - сказал мастер. Еще каждое из этих устройств имеетдополнительный уровень игры, когда устройство не может победитьчеловека, но и не дает себя победить человеку."
- Прошу вас, великий мастер - взмолился новичок, "как же найти эти загадочные настройки?"
Мастер кинул устройство на пол и растоптал его ногами. Внезапно новичок просветлел.
[8.4]
Был однажды программист, который работал с микропроцессорами.
- Смотри, как хорошо мне здесь - сказал он программисту мейнфреймов,который зашел к нему, у меня есть собственная операционная система иустройство для хранения файлов. Я нискем не делю свои ресурсы.Программное обеспечение самодостаточно и легко в обращении. Почему бытебе
не уйти с твоей теперешней работы и не присоединиться ко мне здесь?
Тогда программист мейнфреймов начал описывать другу свою систему, говоря:
- Мейнфрейм восседает в вычислительном центре, как древний мудрецпогруженный в медитацию. Его дисковые накопители раскинулись из конца вконец, как огромный электронный океан. Программное обеспечениемногогранно, как брильянт и переплетено, как первобытные джунгли.Программы, каждая уникальна, движутся сквозь систему, как быстротекущая
река. Вот почему я счастлив там, где я есть.
Программист микрокомпьютеров, услышав это, надолго замолчал. Hо два программиста остались друзьями до конца своих дней.
[8.5]
Железо повстречалось с Софтом на дороге в Чанг Це. Программа сказала:
"Ты - Инь, а я - Янь. Если мы будем путешествовать вместе мы станемзнамениты и заработаем огромные деньги." И так эта пара пошла дальше,думая о том, как они завоюют весь мир.
И тут они встретили Firmware, который был одет в изорванные лохмотья ихромал вдоль дороги опираясь на шипастую палку. Firmware сказал им:"Дао лежит вне Инь и Янь. Оно тихо и спокойно, как пруд. Оно не ищетславы поэтому никто не ощущает его присутствия. Оно не ищет удачипотому, что оно самодостаточно. Оно существует за пределамипространства и времени."
Железо и Программа пристыженные вернулись в свои дома.
9. Эпилог
[9.1]
Сказано мастером-программистом:
"Самое время тебе уйти"