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

«Если нет ветра, трава не колышется.

Если нет программ, компьютер бесполезен».

Так говорил Великий Программист

– К востоку от города, в живописной долине стоит огромный вычислительный центр со множеством сверхмашин, – промолвил человек.

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

– Видишь? – продолжил человек. – Ты пойдешь туда и расскажешь другим обо всем, что найдешь там.

– Но как я проберусь в этот центр? – спросил мальчик.

– Тебе решать, – ответил незнакомец.

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

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

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

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

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

– Что вы здесь делаете? – спросил он.

– Жду тебя, – пришел ответ.

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

– Пиши: «В то мгновение, когда человек, решивший стать Истинным Программистом, делает свой первый шаг, он познает лежащий перед ним Путь и Дао Программирования».

– А кто такой этот «Программист»?

– Сам знаешь, – с улыбкой ответил незнакомец. – Тот, кто способен постичь чудо жизни, бороться до конца за то, во что верует, и преобразить этот мир.

Мальчик проглядел страницы тетради. Незнакомец снова улыбнулся.

– Пиши о Дао Программирования, – ответил он.

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

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

Истинные Программисты стремятся, чтобы никогда не померкла для мира полезность их программ. Они живут в мире сем, они не чуждаются других людей. Бывает, что они пускаются в новый путь без знания нужных языков и подходов. Нередко их обуревает страх. Не всегда кодируют они правильно. Они страдают из-за пустяковых багов в собственных творениях, они бывают неспокойны и нетерпеливы, а порой им кажется, что они не способны расти над собой. Нередко они убеждены, что недостойны похвалы за созданное ими. Не всегда уверены они в том, что же именно делают они там – в этом беспредельном мире битов и байт. Они проводят ночи без сна, страдая, что их программа может оказаться невостребованной.

Вот потому они – Истинные Программисты. Потому, что ошибаются. Потому, что терзают себя вопросами. Потому, что ищут причину собственных ошибок – ищут и, без сомнения, когда-нибудь найдут.

* * *

Всякому Программисту уже случалось испытывать страх перед новой, еще не написанной им программой. Всякому Программисту уже случалось создавать недостойный код. Всякому Программисту уже случалось брести неверным путем. Всякому Программисту уже случалось терзаться из-за сущих пустяков. Всякому Программисту уже случалось приходить к выводу, что он – не настоящий Программист. Всякому Программисту уже случалось поступаться своим творческим долгом. Всякому Программисту уже случалось говорить новому заказчику «да», когда хотелось сказать «нет». Всякому Программисту уже случалось ненавидеть те программы, которые он когда-то любил.

Вот потому он и вправе называться Программистом – потому, что прошел через все это и не утратил надежды стать лучше, чем был.

* * *

Истинный Программист чтит основное положение И. Цзина: «Настойчивость полезна». Он знает, что упрямство не имеет ничего общего с настойчивостью. Ибо бывают проекты, работа над которыми длится дольше, чем это необходимо, и они истощают силы и гасят воодушевление. И в такие минуты Программисту приходит на ум: «Затянувшийся проект в конце концов уничтожает и пыл его работников». И тогда он прекращает работать над программами и дает передышку самому себе, вновь возвращаясь в мир, который другие считают единственно существующим. Но никогда не упустит он момент вдохновения, чтобы вновь продолжить свое творение.

* * *

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

Но вот, уже продвигаясь по пути создания программы, сознает Программист, что существуют трудности и препятствия, которых он не принимал в расчет. Если он станет дожидаться пришествия Музы Программиста и бояться допустить ошибки, то никогда не сдвинется с места. Чтобы сделать первый шаг, нужна смелость, ибо все предусмотреть невозможно – особенно при проектировании, особенно при кодировании.

* * *

Истинный Программист знает, что иные алгоритмы имеют свойство повторяться. Часто сталкивается он с трудностями, которые некогда уже преодолевал, и оказывается в сложном положении, из которого уже выходил с честью, и это смущает его дух: ему кажется, что если все повторяется, то он топчется на одном месте, не в силах двинуться вперед.

– Я ведь уже писал это, – сетует он сердцу своему.

– Писал, – отвечает ему сердце. – Но так и не реализовал до конца свои идеи.

И Программист тогда сознает, что судьба посылает ему повторение опыта с единственной целью – научить его тому, что он не пожелал усвоить сразу.

* * *

Истинный Программист знает свои слабые стороны. Но знает и то, чем одарен. Иные жалуются: «Нам не представилось возможности». Быть может, они правы, но Программист никогда не даст себе перестать программировать по этой причине – нет, он напряжет до последнего предела силы и дарования.

Он знает, что настоящие программисты не боятся сложных программ, ибо уверены в своей силе. И тогда он старается постичь, на что же он может рассчитывать. И он проверяет свое вооружение, а состоит оно из трех вещей – Знания, Вдохновения и Веры. Если в наличии и первое, и второе, и третье, Программист без колебаний продолжает путь.

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

Но есть программисты, которых это не устраивает. Они стараются показать ему его незнание и несовершенство созданного им, вызвать на ссору, сделать все, чтобы вывести его из себя. И в такие минуты сердце говорит ему: «Отринь оскорбление, оно не усилит твои способности. Ты лишь впустую потеряешь время, пытаясь помочь им постигнуть Дао Программирования».

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

* * *

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

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

* * *

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

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

«Заказчики неблагодарны», – замечают по этому поводу иные его товарищи.

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

* * *

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

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

Но Истинный Программист, хоть и согласен с тем, что выбитое на них отнюдь не лишено смысла, бросает наземь скрижали, и они рассыпаются в прах. А он по-прежнему воодушевляет себя и своих товарищей.

* * *

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

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

* * *

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

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

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

Истинный Программист не тратит времени понапрасну, ибо знает: то, что должно быть написано, – будет написано.

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

* * *

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

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

– Строит воздушные замки, – говорят скептики.

– Как может он выбирать то, что лишено логики? – недоумевают третьи.

Но Истинный Программист знает: наитие – это азбука, с помощью которой можно постичь Дао, и потому продолжает прислушиваться к голосу внутри себя.

* * *

Порой Истинный Программист вспоминает одну из легенд, передаваемых из поколения в поколение программистами друг другу:

Однажды учитель проходил мимо ученика. Учитель заметил, что внимание ученика поглощено карманной компьютерной игрой.

– Прости меня, – сказал он, – могу я посмотреть?

Ученик отвлекся от игры и подал ее учителю.

– Я вижу, что тут предлагается три уровня игры: легкий, средний и тяжелый, – сказал учитель. – Однако, каждое такое устройство имеет еще один уровень игры, когда оно не стремится ни победить, ни быть побежденным.

– Прошу вас, великий учитель, – взмолился ученик, – как же найти этот таинственный уровень?

Учитель бросил устройство на пол и раздавил ногой. И внезапно ученик обрел просветление.

* * *

Истинный Программист время от времени поступает вразрез с общепринятыми канонами программирования. С него станется оставить потайной ход в своей программе, или включить в нее «пасхальное яйцо», отстаивать алгоритм, кажущийся нелепым…

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

* * *

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

* * *

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

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

«Работа его окончена», – говорят друзья. Программисту больно и стыдно слышать такие слова, ибо он знает, что еще не достиг цели, к которой стремился. Однако он упорен и не бросает начатое не полдороги. И вот в минуту, когда он меньше всего этого ожидает, к нему приходит озарение, а прежде невыполнимая задача кажется удивительно простой. И тогда работа вновь поглощает его, и пальцы вновь четко и быстро стучат по клавиатуре, и разум находит решения мгновенно.

* * *

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

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

* * *

Написанные ранее программы требуют обновления. Новые идеи требуют пространства. Дух и разум требуют новых вызовов. Грядущее обернется настоящим, и мечты – кроме тех, в которых сокрыты предрассудки, – получат возможность стать явью. Важное – пребудет, бесполезное – сгинет.

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

* * *

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

Потребность создавать программы заложена в самом его естестве подобно потребности есть и пить, подобно потребности любить труд. Если солнце заходит, а Программист не испытал счастья от созданного им за день – значит, что-то неправильно.

Каждый язык и каждая технология приветствуют его. Он ощущает свое кровное родство с ними, он чувствует, что часть его души заключена в бессмысленных для других потоках цифр, в строках текста и том, что его современники называют «компьютерным железом». И тогда, принимая опыт и помощь других программистов и Божьих Знамений, он позволяет своей стезе вести его туда, где ожидают своего сотворения мириады программ, востребованные жизнью.

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

Время настанет – через столько-то столетий – когда Вселенная придет на помощь Истинным Программистам и останется глуха и безразлична к тем, кто не постиг красоту Творчества.

* * *

Истинный Программист совершенствует красоту своего кода.

Истинный Программист преображает свой разум.

Истинный Программист учится строить великое.

Истинный Программист никогда не свернет со своей стези.

Истинные Программисты преобразят этот мир.

* * *

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

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

– Скажи мне, кто ты? – спросил мальчик. Но голографический образ Великого Программиста уже таял, сопровождаемый мерным шелестом и тихим гудением машин.