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

Материал из Information Security
Перейти к: навигация, поиск

D010a8d8e2294fec4371e08c60de9a89.jpg

Книга 1

Безмолвная пустота.

И сказал Великий Программист: «Если ты научился выхватывать ошибочный код из эксепшена, значит пришла пора тебе уходить».

1.1

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

Если Дао велико, то операционная система велика. Если операционная система велика, то компилятор велик. Если компилятор велик, тогда приложение велико. Пользователь доволен, и в мире наступает гармония.

Дао программирования уплывает далеко, и возвращается с утренним ветром.

1.2

Дао породило компьютерный язык. Компьютерный язык породил ассемблер. Ассемблер породил компилятор. Теперь существует десять тысяч языков. Каждый из них имеет своё предназначение, пусть и скромное. Каждый язык выражает Инь и Янь программного обеспечения. Каждый язык имеет своё место в Дао. Только не нужно программировать на COBOL, если этого можно избежать.

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

Мастер объяснял сущность Дао одному из новичков.

«Дао присутствует во всём софте, даже во второстепенных программах» — сказал Мастер.

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

«Есть».

«Есть ли Дао в видеоигре?»

«Даже в видеоигре».

«Есть ли Дао в операционной системе 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

Железо и софт

И сказал Великий Программист: «Без ветра трава не двигается. Без программ железо бесполезно».

8.1

Начинающий программист спросил Мастера: «Я вижу, что одна софтовая компания гораздо больше всех других. Она возвышается над ними, как гигант среди карликов. Любое её подразделение можно выделить в отдельный бизнес. Отчего так?»

Мастер отвечал: «Зачем задаёшь такие глупые вопросы? Компания большая, потому что она большая. Если б она производила только железо, его бы никто не покупал. Если б она производила только программы, их бы никто не использовал. Если б она занималась только поддержкой, люди относились бы к ней, как к прислуге. Но так как она сочетает все эти направления –люди думают, что она сродни богам! Не ища схватки, она побеждает без усилий».

8.2

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

«Прошу прощения», — сказал он. «Можно мне посмотреть?».

Новичок протянул игру Мастеру. «Я вижу, что игра предлагает три уровня сложности: лёгкий, средний и тяжёлый», — сказал Мастер. «И всё же, у любого такого устройства есть ещё один уровень, где оно не пытается ни завоевать человека, ни быть завоёванным им».

«О, Великий Мастер»,- взмолился новичок,- «раскройте же, как найти эту таинственную опцию?»

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

8.3

Был однажды программист, который писал софт для персоналок. «Смотри, как я хорошо устроился»,- сказал он программисту мейнфреймов, зашедшему с визитом. «У меня своя операционка и устройство хранения файлов. Мне не надо ни с кем делить ресурсы. Софт последовательный и лёгок в использовании. Почему бы тебе не уйти с твоей работы и не присоединиться ко мне?»

Программист мейнфреймов стал описывать свою систему: «Мейнфрейм сидит посреди датацентра, как древний мудрец за медитацией. Его накопители стоят друг за другом, как целый океан машин. Софт многогранен, словно бриллиант, и замысловат, будто первобытные джунгли. Программы, каждая из которых уникальна, двигаются сквозь систему как быстрая река. Потому я и счастлив на своём месте».

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

8.4

Железо встретило Софт на дороге в Чан-Це. Софт сказал: «Ты Инь, а я – Янь. Если мы пойдём вместе, мы станем знаменитыми и заработаем кучу денег». И отправились они вместе, надеясь завоевать мир.

И встретили они Прошивку, одетую в рваные лохмотья, ковыляющую по дороге, опираясь на шипастую палку. Прошивка сказала им: «Дао лежит за пределами Инь и Янь. Оно безмолвно и тихо, как озеро. Оно не ищет славы – оттого никто не знает о его присутствии. Оно не ищет богатства, ибо оно самодостаточно. Оно существует вне пространства и времени». Железо и Софт, устыдившись, вернулись домой.

Книга 9

Эпилог

И сказал Великий Программист: «Пришло время тебе уйти».

[1] [2]