Это архив сайта coldflame.by.ru, он не обновлялся с 2007 года. Мой современный сайт тут: http://leonid.shevtsov.me.
Домой! Обо мне Специально для РИ-06-1 Разнообразное... барахло, короче :) Программы и прочее Статьи и переводы Блог SmartDaemon

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

Источник: Shedler's Shebeen

Перевод с английского: Леонид Шевцов (http://coldflame.by.ru)

Разрешается копирование в любом виде при сохранении данного сообщения об авторских правах.

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

Мастер объяснял природу Дао одному из своих учеников, "Дао заключается в любой программе, даже самой незначительной."

"И в калькуляторе есть Дао?", спросил ученик.

"Есть", поступил ответ.

"А в игровой приставке?", продолжил ученик.

"Даже в игровой приставке," сказал Мастер.

"А есть ли Дао в IBM PC DOS?"

Мастер закашлялся и встал. "На сегодня урок закончен", сказал он.

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. Эпилог

И сказал великий мастер: Пора уходить.