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

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

"Хорошо написанная программа это свой собственный рай; плохо написанная
программа это свой собственный ад."

4.1

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

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

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

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

4.2

Ученик спросил учителя: "Я написал программу, которая то работает, то
сбоит. Я следовал правилам программирования, однако совершенно запутался.
В чем причина?"

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

Правила программирования преходящи; только Дао вечно.
Поэтому ты должен медитировать о Дао прежде чем тебе откроется
просветление."

"Hо как я узнаю когда оно мне откроется?" спросил ученик.

"Твоя программа будет работать правильно," ответил учитель.

4.3

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

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

"Есть," был ответ.

"Есть ли Дао в видеоигре?" продолжал ученик.

"Есть даже в видеоигре," сказал учитель.

"А есть ли Дао в ДОС для персонального компьютера?"

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

4.4

Один из программистов князя Вонга писал программу. Его пальцы
танцевали над клавиатурой. Программа скомпилировалась без единой ошибки,
и прошла тест как легкий ветер.

"Превосходно!" воскликнул князь, "Твоя техника безупречна!"

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

Князь Вонг сказал, "Если бы все мои программисты были так мудры!"


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

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

"Будь программа размером хоть в три строчки, но и ее однажды
придется поддерживать."

5.1

Часто открываемая дверь не требует смазки петель.
Быстрый поток не превратится в болото.
Hи звук, ни мысль не проходят через вакуум.
Программы портятся без использования.

Это великие таинства.

5.2

Менеджер спросил программиста, сколько времени ему потребуется, чтобы
завершить программу, над которой он работает. "Она будет закончена
завтра," сразу ответил программист.

"Я думаю, вы несколько оторваны от действительности," сказал менеджер,
"все же, сколько это займет?"

Программист на миг задумался. "У меня есть несколько идей, которые я хотел
бы реализовать в программе. Это займет по меньшей мере две недели," сказал
он наконец.

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

Программист согласился.

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

5.3

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

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

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

5.4

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


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

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

"Пусть программистов будет много, а менеджеров мало -- тогда они
будут работать плодотворно."

6.1

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

Воистину, это не Дао Программирования.

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

Воистину, это Дао Программирования.

6.2

Почему программисты не продуктивны?
Потому что их время растрачивается на совещаниях.

Почему программисты мятежно настроены?
Потому что менеджеры слишком часто вмешиваются.

Почему программисты увольняются поодиночке?
Потому что они охладевают.

Поработав с плохим руководством, они более не ценят свою работу.

6.3

Один менеджер был на грани увольнения, но программист, который с ним
работал, придумал программу, которая оказалась популярной и хорошо
покупалась. В результате менеджер сохранил свою работу.

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

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

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

6.4

Менеджер пришел к программистам и сказал: "Относительно вашего
рабочего времени: вы должны приходить в девять утра и уходить в
пять вечера." Всех рассердило это заявление, а несколько
тут же уволилось.

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