Часть 1
И сказал Великий Программист: «Хорошо написанная программа сама себе Рай. Плохо написанная программа сама себе Ад»
4.1
Программа должна быть лёгкой и гибкой, а подпрограммы её – словно нанизанные на нить жемчужины. Дух и цель программы должны быть сохранены на всём её протяжении. Кода не должно быть слишком много или слишком мало. Ни ненужных циклов, ни бесполезных переменных. Ни хаотичности, ни излишней структурированности.
Программа должна следовать правилу «наименьшего удивления». Это значит, что программа должна отвечать на действия пользователя способом, наименее удивительным для него.
Программа любой сложности должна работать как целое. Работа программы диктуется логикой, а не внешними признаками.
Если программа не удовлетворяет этим требованиям, это ведёт к беспорядку и путанице. Остаётся лишь переписать её заново.
4.2
Новичок спросил Мастера: «Моя программа иногда работает, а иногда падает. Я следовал законам программирования, но я сбит с толку. В чём причина?»
Мастер ответил: «Ты сконфужен, так как не постиг Дао. Только дурак будет ожидать рационального поведения от собратьев-людей. Чего ты ждал от машины, спроектированной людьми? Компьютеры эмулируют детерминизм. Только лишь Дао совершенно.
Законы программирования преходящи, только Дао вечно. Потому тебе нужно созерцать Дао, прежде чем ты достигнешь Просветления»
«Но как я узнаю, что я достиг просветления?» — спросил новичок.
«Твоя программа будет работать правильно» — ответил Мастер.
4.3
Мастер объяснял сущность Дао одному из новичков.
«Дао присутствует во всём софте, даже во второстепенных программах» — сказал Мастер.
«Есть ли Дао в калькуляторе?» — спросил новичок.
«Есть».
«Есть ли Дао в видеоигре?»
«Даже в видеоигре».
«Есть ли Дао в операционной системе DOS?»
Мастер поперхнулся и слегка изменил своё положение. «На сегодня урок окончен» — сказал он.
4.4
Программист, служащий у принца Вонга, писал программу. Его пальцы танцевали на клавиатуре. Программа скомпилировалась без ошибок и работала как нежный ветерок.
«Превосходно!» — воскликнул Принц. «Твоя техника безупречна!»
«Техника?» — спросил программист, отворачиваясь от терминала. «Я следую Дао и далёк от техник. Когда я начинал программировать, я видел перед собой задачу одним куском. Через три года вместо этого я видел подпрограммы. А теперь я не вижу ничего. Моя сущность находится в бесформенной пустоте. Мои чувства бездействуют. Мой дух, не стеснённый планом, следует инстинкту. Короче, моя программа пишет сама себя.
Да, иногда встречаются тяжёлые задачи. Я вижу их приближение, я замедляюсь, я молча наблюдаю. Затем я меняю одну строчку кода – и трудности исчезают как клубы дыма. Тогда я компилирую, и наслаждение от работы наполняет меня. Я закрываю глаза на секундочку, и затем разлогиниваюсь.»
Принц Вонг сказал «О, если бы все мои программисты были так мудры!»
И сказал Великий Программист: «Даже программу в 3 строки когда-нибудь придётся поддерживать».
5.1
Часто используемая дверь не нуждается в смазке.
Текущая вода не застаивается.
Олень растворяется в цветах леса.
Программы портятся, если их не используют.
5.2
Менеджер спросил у программиста, сколько ему нужно времени для завершения работы над программой. «Она будет закончена завтра» — быстро ответил тот.
«По-моему, ты не реалистичен» — сказал менеджер. «Сколько на самом деле тебе нужно времени?»
Программист задумался. «Ну я хочу добавить кое-какие фичи. Это займёт как минимум недели две»
«И даже это слишком оптимистично» — настаивал менеджер. «Мне будет достаточно, если ты просто скажешь мне, когда она будет закончена».
Программист согласился.
Через несколько лет менеджер уволился. По пути на прощальный обед он обнаружил программиста спящим за терминалом. Он трудился всю ночь.
5.3
Начинающий программист однажды получил задание написать простой финансовый модуль.
Новичок много дней яростно трудился, но когда Мастер проверял его программу, обнаружил что в ней есть визуальный редактор, набор графических методов общего назначения, интерфейс к AI,- но ничего даже отдалённо не напоминающего финансы.
Когда Мастер расспросил его об этом, новичок возмутился: «Не будьте так нетерпеливы, в конце концов я и финансовую составляющую добавлю».
5.4
Разве хороший фермер игнорирует посаженный росток?
Разве хороший учитель проходит мимо даже самого скромного ученика?
Разве хороший отец позволит единственному ребёнку голодать?
Разве хороший программист откажется поддерживать свой код?
И сказал Великий Программист: «Да будут программисты многочисленны, а менеджеры – нет. Тогда мы достигнем продуктивности».
6.1
Когда менеджеры заседают, программисты пишут игры.
Когда бухгалтеры обсуждают квартальные прибыли, бюджет на разработку рискует быть урезанным.
Когда учёные рассуждают о чистом небе, на нём вскоре появятся тучи.
И это не Дао программирования.
Когда менеджеры берут на себя обязательства, игры отходят на второй план.
Когда бухгалтеры занимаются долгосрочным планированием, гармония и порядок восстанавливаются.
Когда учёные говорят о насущных проблемах, они вскоре будут решены.
И это Дао программирования.
6.2
Почему программисты непродуктивны? Они теряют время на встречах.
Почему программисты бунтуют? Потому что менеджеры слишком часто вмешиваются в процесс.
Почему программисты увольняются? Потому что они сгорели на работе.
Поработав на плохих менеджеров, они больше не ценят свою работу.
6.3
Одного менеджера собирались увольнять. Но программист, работавший в его команде, написал новую программу, которая стала популярной и хорошо продавалась. В результате, менеджер сохранил работу.
Менеджер попытался выдать программисту бонус, но тот отказался, говоря: «Я написал программу, потому что мне была интересна концепция, поэтому я не ожидаю наград».
Услышав это, менеджер заметил: «Этот программист, хотя и занимает не самую почитаемую позицию, понимает, что такое долг наёмного работника. Давайте повысим его на возвышенную позицию консультанта!»
Программист, услышав это, снова отказался: «Я существую, чтобы программировать. Если меня повысят, я буду только тратить время других людей. Можно, я уже пойду? Меня там программа ждёт».
6.4
Менеджер пришёл к своим программистам, и сказал им: «Касаемо ваших рабочих часов: вам нужно будет приходить к девяти и уходить в пять вечера». Программисты разозлились, несколько сразу же подали в отставку.
Тогда менеджер сказал: «Ладно, в таком случае вы сами планируйте своё время, только заканчивайте проекты вовремя». Программисты, удовлетворённые этим, начали приходить к полудню и работать до самого утра.
И сказал Великий Программист: «Вы можете показать программу директору, но вы не можете обучить его компьютерной грамотности».
7.1
Новичок спросил Мастера: «На востоке существует огромная древовидная структура под названием «Руководство корпорацией». Она раздута из-за всяких вице-президентов и бухгалтеров. Она порождает гору меморандумов, призывающих «идти туда» или «делать то-то», и никто не знает, что они означают. Каждый год новые имена появляются в структуре – и всё без толку. Как же может существовать такая неестественная сущность?»
Мастер ответил: «Ты наблюдаешь её, и тебя волнует то, что у неё нет предназначения. Но разве не веселят тебя шевеления внутри её? Не наслаждаешься ли ты безмятежным программированием в тени её раскидистых ветвей? Почему тебя беспокоит её бесполезность?»
7.2
На востоке есть акула, превосходящая по размеру любую рыбу. Она превращается в птицу, чьи крылья как облака закрывают небо. Когда эта птица двигается над землёй, она несёт сообщение от Руководства Корпорацией. Сообщение падает в гущу программистов, так, будто чайка метит пляж. Затем птица седлает ветер, и возвращается домой.
Начинающий программист с удивлением следит за ней, поскольку не понимает её. Средний программист ожидает её появления с опасением, поскольку боится её сообщения. Великий программист продолжает работать за терминалом, не замечая её появления.
7.3
Волшебник из башни слоновой кости принёс своё последнее изобретение на изучение Великому Программисту. Маг вкатил большую чёрную коробку в офис Великого, пока тот ожидал в молчании.
«Это интегрированная распределённая рабочая станция общего назначения», — начал Волшебник,- «разработанная с учётом эргономики, с закрытой ОС, языками шестого поколения и множеством уникальных пользовательских интерфейсов. Моим ассистентам понадобилось несколько сот человеко-лет на её конструирование. Ну не удивительная ли штука?»
Великий программист слегка приподнял брови: «И правда, удивительная».
«Руководство Корпорацией потребовало, чтобы все использовали эту рабочую станцию как платформу для новых программ. Согласен ли ты на это?»
«Непременно», — ответил Программист. «Я прикажу перевезти её в датацентр немедленно!». И удовлетворённый волшебник вернулся в свою башню.
Через несколько дней начинающий программист заглянул в офис Великого и спросил: «Не могу найти листинг моей новой программы. Не знаете ли вы, где бы он мог быть?».
«Знаю»,- ответил Мастер. «Все листинги сложены на новой тумбочке в датацентре».
7.4
Великий Программист переходит от программы к программе без страха. Его не трогают изменения в управлении. Его не уволят, даже если его проект будет закрыт. Почему? Он наполнен Дао.
И сказал Великий Программист: «Без ветра трава не двигается. Без программ железо бесполезно».
8.1
Начинающий программист спросил Мастера: «Я вижу, что одна софтовая компания гораздо больше всех других. Она возвышается над ними, как гигант среди карликов. Любое её подразделение можно выделить в отдельный бизнес. Отчего так?»
Мастер отвечал: «Зачем задаёшь такие глупые вопросы? Компания большая, потому что она большая. Если б она производила только железо, его бы никто не покупал. Если б она производила только программы, их бы никто не использовал. Если б она занималась только поддержкой, люди относились бы к ней, как к прислуге. Но так как она сочетает все эти направления –люди думают, что она сродни богам! Не ища схватки, она побеждает без усилий».
8.2
Однажды Мастер проходил мимо новичка. Он заметил, что новичок занят портативной игрой.
«Прошу прощения», — сказал он. «Можно мне посмотреть?».
Новичок протянул игру Мастеру. «Я вижу, что игра предлагает три уровня сложности: лёгкий, средний и тяжёлый», — сказал Мастер. «И всё же, у любого такого устройства есть ещё один уровень, где оно не пытается ни завоевать человека, ни быть завоёванным им».
«О, Великий Мастер»,- взмолился новичок,- «раскройте же, как найти эту таинственную опцию?»
Мастер уронил устройство на землю, и наступил на него каблуком. И новичок вдруг достиг просветления.
8.3
Был однажды программист, который писал софт для персоналок. «Смотри, как я хорошо устроился»,- сказал он программисту мейнфреймов, зашедшему с визитом. «У меня своя операционка и устройство хранения файлов. Мне не надо ни с кем делить ресурсы. Софт последовательный и лёгок в использовании. Почему бы тебе не уйти с твоей работы и не присоединиться ко мне?»
Программист мейнфреймов стал описывать свою систему: «Мейнфрейм сидит посреди датацентра, как древний мудрец за медитацией. Его накопители стоят друг за другом, как целый океан машин. Софт многогранен, словно бриллиант, и замысловат, будто первобытные джунгли. Программы, каждая из которых уникальна, двигаются сквозь систему как быстрая река. Потому я и счастлив на своём месте».
Программист персоналок, услышав такое, потерял дар речи. Но два программиста оставались друзьями до конца их дней.
8.4
Железо встретило Софт на дороге в Чан-Це. Софт сказал: «Ты Инь, а я – Янь. Если мы пойдём вместе, мы станем знаменитыми и заработаем кучу денег». И отправились они вместе, надеясь завоевать мир.
И встретили они Прошивку, одетую в рваные лохмотья, ковыляющую по дороге, опираясь на шипастую палку. Прошивка сказала им: «Дао лежит за пределами Инь и Янь. Оно безмолвно и тихо, как озеро. Оно не ищет славы – оттого никто не знает о его присутствии. Оно не ищет богатства, ибо оно самодостаточно. Оно существует вне пространства и времени».
Железо и Софт, устыдившись, вернулись домой.
И сказал Великий Программист: «Пришло время тебе уйти».
Книга 4
Кодим
И сказал Великий Программист: «Хорошо написанная программа сама себе Рай. Плохо написанная программа сама себе Ад»
4.1
Программа должна быть лёгкой и гибкой, а подпрограммы её – словно нанизанные на нить жемчужины. Дух и цель программы должны быть сохранены на всём её протяжении. Кода не должно быть слишком много или слишком мало. Ни ненужных циклов, ни бесполезных переменных. Ни хаотичности, ни излишней структурированности.
Программа должна следовать правилу «наименьшего удивления». Это значит, что программа должна отвечать на действия пользователя способом, наименее удивительным для него.
Программа любой сложности должна работать как целое. Работа программы диктуется логикой, а не внешними признаками.
Если программа не удовлетворяет этим требованиям, это ведёт к беспорядку и путанице. Остаётся лишь переписать её заново.
4.2
Новичок спросил Мастера: «Моя программа иногда работает, а иногда падает. Я следовал законам программирования, но я сбит с толку. В чём причина?»
Мастер ответил: «Ты сконфужен, так как не постиг Дао. Только дурак будет ожидать рационального поведения от собратьев-людей. Чего ты ждал от машины, спроектированной людьми? Компьютеры эмулируют детерминизм. Только лишь Дао совершенно.
Законы программирования преходящи, только Дао вечно. Потому тебе нужно созерцать Дао, прежде чем ты достигнешь Просветления»
«Но как я узнаю, что я достиг просветления?» — спросил новичок.
«Твоя программа будет работать правильно» — ответил Мастер.
4.3
Мастер объяснял сущность Дао одному из новичков.
«Дао присутствует во всём софте, даже во второстепенных программах» — сказал Мастер.
«Есть ли Дао в калькуляторе?» — спросил новичок.
«Есть».
«Есть ли Дао в видеоигре?»
«Даже в видеоигре».
«Есть ли Дао в операционной системе DOS?»
Мастер поперхнулся и слегка изменил своё положение. «На сегодня урок окончен» — сказал он.
4.4
Программист, служащий у принца Вонга, писал программу. Его пальцы танцевали на клавиатуре. Программа скомпилировалась без ошибок и работала как нежный ветерок.
«Превосходно!» — воскликнул Принц. «Твоя техника безупречна!»
«Техника?» — спросил программист, отворачиваясь от терминала. «Я следую Дао и далёк от техник. Когда я начинал программировать, я видел перед собой задачу одним куском. Через три года вместо этого я видел подпрограммы. А теперь я не вижу ничего. Моя сущность находится в бесформенной пустоте. Мои чувства бездействуют. Мой дух, не стеснённый планом, следует инстинкту. Короче, моя программа пишет сама себя.
Да, иногда встречаются тяжёлые задачи. Я вижу их приближение, я замедляюсь, я молча наблюдаю. Затем я меняю одну строчку кода – и трудности исчезают как клубы дыма. Тогда я компилирую, и наслаждение от работы наполняет меня. Я закрываю глаза на секундочку, и затем разлогиниваюсь.»
Принц Вонг сказал «О, если бы все мои программисты были так мудры!»
Книга 5
Поддержка
И сказал Великий Программист: «Даже программу в 3 строки когда-нибудь придётся поддерживать».
5.1
Часто используемая дверь не нуждается в смазке.
Текущая вода не застаивается.
Олень растворяется в цветах леса.
Программы портятся, если их не используют.
5.2
Менеджер спросил у программиста, сколько ему нужно времени для завершения работы над программой. «Она будет закончена завтра» — быстро ответил тот.
«По-моему, ты не реалистичен» — сказал менеджер. «Сколько на самом деле тебе нужно времени?»
Программист задумался. «Ну я хочу добавить кое-какие фичи. Это займёт как минимум недели две»
«И даже это слишком оптимистично» — настаивал менеджер. «Мне будет достаточно, если ты просто скажешь мне, когда она будет закончена».
Программист согласился.
Через несколько лет менеджер уволился. По пути на прощальный обед он обнаружил программиста спящим за терминалом. Он трудился всю ночь.
5.3
Начинающий программист однажды получил задание написать простой финансовый модуль.
Новичок много дней яростно трудился, но когда Мастер проверял его программу, обнаружил что в ней есть визуальный редактор, набор графических методов общего назначения, интерфейс к AI,- но ничего даже отдалённо не напоминающего финансы.
Когда Мастер расспросил его об этом, новичок возмутился: «Не будьте так нетерпеливы, в конце концов я и финансовую составляющую добавлю».
5.4
Разве хороший фермер игнорирует посаженный росток?
Разве хороший учитель проходит мимо даже самого скромного ученика?
Разве хороший отец позволит единственному ребёнку голодать?
Разве хороший программист откажется поддерживать свой код?
Книга 6
Управление
И сказал Великий Программист: «Да будут программисты многочисленны, а менеджеры – нет. Тогда мы достигнем продуктивности».
6.1
Когда менеджеры заседают, программисты пишут игры.
Когда бухгалтеры обсуждают квартальные прибыли, бюджет на разработку рискует быть урезанным.
Когда учёные рассуждают о чистом небе, на нём вскоре появятся тучи.
И это не Дао программирования.
Когда менеджеры берут на себя обязательства, игры отходят на второй план.
Когда бухгалтеры занимаются долгосрочным планированием, гармония и порядок восстанавливаются.
Когда учёные говорят о насущных проблемах, они вскоре будут решены.
И это Дао программирования.
6.2
Почему программисты непродуктивны? Они теряют время на встречах.
Почему программисты бунтуют? Потому что менеджеры слишком часто вмешиваются в процесс.
Почему программисты увольняются? Потому что они сгорели на работе.
Поработав на плохих менеджеров, они больше не ценят свою работу.
6.3
Одного менеджера собирались увольнять. Но программист, работавший в его команде, написал новую программу, которая стала популярной и хорошо продавалась. В результате, менеджер сохранил работу.
Менеджер попытался выдать программисту бонус, но тот отказался, говоря: «Я написал программу, потому что мне была интересна концепция, поэтому я не ожидаю наград».
Услышав это, менеджер заметил: «Этот программист, хотя и занимает не самую почитаемую позицию, понимает, что такое долг наёмного работника. Давайте повысим его на возвышенную позицию консультанта!»
Программист, услышав это, снова отказался: «Я существую, чтобы программировать. Если меня повысят, я буду только тратить время других людей. Можно, я уже пойду? Меня там программа ждёт».
6.4
Менеджер пришёл к своим программистам, и сказал им: «Касаемо ваших рабочих часов: вам нужно будет приходить к девяти и уходить в пять вечера». Программисты разозлились, несколько сразу же подали в отставку.
Тогда менеджер сказал: «Ладно, в таком случае вы сами планируйте своё время, только заканчивайте проекты вовремя». Программисты, удовлетворённые этим, начали приходить к полудню и работать до самого утра.
Книга 7
Корпоративная мудрость
И сказал Великий Программист: «Вы можете показать программу директору, но вы не можете обучить его компьютерной грамотности».
7.1
Новичок спросил Мастера: «На востоке существует огромная древовидная структура под названием «Руководство корпорацией». Она раздута из-за всяких вице-президентов и бухгалтеров. Она порождает гору меморандумов, призывающих «идти туда» или «делать то-то», и никто не знает, что они означают. Каждый год новые имена появляются в структуре – и всё без толку. Как же может существовать такая неестественная сущность?»
Мастер ответил: «Ты наблюдаешь её, и тебя волнует то, что у неё нет предназначения. Но разве не веселят тебя шевеления внутри её? Не наслаждаешься ли ты безмятежным программированием в тени её раскидистых ветвей? Почему тебя беспокоит её бесполезность?»
7.2
На востоке есть акула, превосходящая по размеру любую рыбу. Она превращается в птицу, чьи крылья как облака закрывают небо. Когда эта птица двигается над землёй, она несёт сообщение от Руководства Корпорацией. Сообщение падает в гущу программистов, так, будто чайка метит пляж. Затем птица седлает ветер, и возвращается домой.
Начинающий программист с удивлением следит за ней, поскольку не понимает её. Средний программист ожидает её появления с опасением, поскольку боится её сообщения. Великий программист продолжает работать за терминалом, не замечая её появления.
7.3
Волшебник из башни слоновой кости принёс своё последнее изобретение на изучение Великому Программисту. Маг вкатил большую чёрную коробку в офис Великого, пока тот ожидал в молчании.
«Это интегрированная распределённая рабочая станция общего назначения», — начал Волшебник,- «разработанная с учётом эргономики, с закрытой ОС, языками шестого поколения и множеством уникальных пользовательских интерфейсов. Моим ассистентам понадобилось несколько сот человеко-лет на её конструирование. Ну не удивительная ли штука?»
Великий программист слегка приподнял брови: «И правда, удивительная».
«Руководство Корпорацией потребовало, чтобы все использовали эту рабочую станцию как платформу для новых программ. Согласен ли ты на это?»
«Непременно», — ответил Программист. «Я прикажу перевезти её в датацентр немедленно!». И удовлетворённый волшебник вернулся в свою башню.
Через несколько дней начинающий программист заглянул в офис Великого и спросил: «Не могу найти листинг моей новой программы. Не знаете ли вы, где бы он мог быть?».
«Знаю»,- ответил Мастер. «Все листинги сложены на новой тумбочке в датацентре».
7.4
Великий Программист переходит от программы к программе без страха. Его не трогают изменения в управлении. Его не уволят, даже если его проект будет закрыт. Почему? Он наполнен Дао.
Книга .
Железо и софт
И сказал Великий Программист: «Без ветра трава не двигается. Без программ железо бесполезно».
8.1
Начинающий программист спросил Мастера: «Я вижу, что одна софтовая компания гораздо больше всех других. Она возвышается над ними, как гигант среди карликов. Любое её подразделение можно выделить в отдельный бизнес. Отчего так?»
Мастер отвечал: «Зачем задаёшь такие глупые вопросы? Компания большая, потому что она большая. Если б она производила только железо, его бы никто не покупал. Если б она производила только программы, их бы никто не использовал. Если б она занималась только поддержкой, люди относились бы к ней, как к прислуге. Но так как она сочетает все эти направления –люди думают, что она сродни богам! Не ища схватки, она побеждает без усилий».
8.2
Однажды Мастер проходил мимо новичка. Он заметил, что новичок занят портативной игрой.
«Прошу прощения», — сказал он. «Можно мне посмотреть?».
Новичок протянул игру Мастеру. «Я вижу, что игра предлагает три уровня сложности: лёгкий, средний и тяжёлый», — сказал Мастер. «И всё же, у любого такого устройства есть ещё один уровень, где оно не пытается ни завоевать человека, ни быть завоёванным им».
«О, Великий Мастер»,- взмолился новичок,- «раскройте же, как найти эту таинственную опцию?»
Мастер уронил устройство на землю, и наступил на него каблуком. И новичок вдруг достиг просветления.
8.3
Был однажды программист, который писал софт для персоналок. «Смотри, как я хорошо устроился»,- сказал он программисту мейнфреймов, зашедшему с визитом. «У меня своя операционка и устройство хранения файлов. Мне не надо ни с кем делить ресурсы. Софт последовательный и лёгок в использовании. Почему бы тебе не уйти с твоей работы и не присоединиться ко мне?»
Программист мейнфреймов стал описывать свою систему: «Мейнфрейм сидит посреди датацентра, как древний мудрец за медитацией. Его накопители стоят друг за другом, как целый океан машин. Софт многогранен, словно бриллиант, и замысловат, будто первобытные джунгли. Программы, каждая из которых уникальна, двигаются сквозь систему как быстрая река. Потому я и счастлив на своём месте».
Программист персоналок, услышав такое, потерял дар речи. Но два программиста оставались друзьями до конца их дней.
8.4
Железо встретило Софт на дороге в Чан-Це. Софт сказал: «Ты Инь, а я – Янь. Если мы пойдём вместе, мы станем знаменитыми и заработаем кучу денег». И отправились они вместе, надеясь завоевать мир.
И встретили они Прошивку, одетую в рваные лохмотья, ковыляющую по дороге, опираясь на шипастую палку. Прошивка сказала им: «Дао лежит за пределами Инь и Янь. Оно безмолвно и тихо, как озеро. Оно не ищет славы – оттого никто не знает о его присутствии. Оно не ищет богатства, ибо оно самодостаточно. Оно существует вне пространства и времени».
Железо и Софт, устыдившись, вернулись домой.
Книга 9
Эпилог
И сказал Великий Программист: «Пришло время тебе уйти».