За весь день Фроу Кэтч ни разу не сходил за чаем. Вечером учитель Гоу Ту заглянул в его комнату: ученик отбивал по клавиатуре хроматическую гамму, вперившись невыспавшейся физиономией в монитор. Учитель поздоровался.
- Мастер! мне такая идея потрясающая в голову пришла!, - логично ответил на приветствие Фроу Кэтч, - это всё изменит! теперь этот кусок кода будет правильно работать, теперь всё будет КАК НАДО!
Мастер хмыкнул таких специальным хмыком, который предназначался специально для программистов, которые знают КАК НАДО. Сквозь жалюзи пробивались красноватые отсветы майского заката, мастер собирался домой.
- Ну и какие твои планы на ближайшее будущее?, - осведомился учитель.
- Думаю, к концу недели мой новый гениальный код почти перестанет всё портить.. разве что чуточку.
- Молодец!, - Фроу Кэтч так удивился, что отвлёкся от монитора. Учитель редко его хвалил, за что же он похвалил сейчас?
- Но ведь пока всё сильно ухудшилось?, - растерянно спросил Фроу Кэтч.
Учитель Гоу Ту улыбнулся и направился к выходу.
Однажды учитель Гоу Ту и его ученик Фроу Кэтч пили чай и рассказывали учитель ученику интересные истории.
- К одному программисту пришёл его начальник и сказал - "Твой код работает слишком медленно - он занимает целых три процента всей подсистемы. Ускорь его в два раза".
- И программист смог ускорить свой код?
- Конечно. Разве ты не знаешь, что не бывает кода, которого нельзя ускорить в два раза? Тогда начальник снова пришел к программисту и сказал - "Твои модули отводят себе слишком много памяти, сделай, чтобы памяти уходило в четыре раза меньше...", "Конечно!", - ответил программист, - "пиковой памяти", продолжил начальник, но программист выполнил и это условие. В следующий раз начальник велел изменить имена переменных так, чтобы их предназначение стало ему интуитивно ясным. Программист уже было расслабился, но затем ему велели расставить значения enum-ов по возрастанию.
- А дальше что?, - Фроу Кэтч слушал, как ребёнок слушает сказку: распахнув глаза, затаив дыхание, сглатывая слюну, забыв о стынущем чае.
- А дальше к нему пришли сразу два начальника, первый велел разбить функции на более короткие, потому что они длинны, а второй велел объединить функции в одну длинную, ибо они чересчур коротки. Тогда программист обрёл просветление.
- Он объединил функции? или наоборот?
- Я же сказал, он обрёл просветление. Функции остались такими, как были, и всем оказались по мерке, а программист занялся другой задачей, для которой ещё не было написано Очень Сложной Системы. Ты знаешь, что такое Очень Сложная Система?
- Нет..
Мастер Гоу Ту неприметно вздохнул.
- Твой чай совсем остыл, - заметил он, - выплесни его. Кстати, тебе было бы неплохо ускорить свой код в два-три раза.
- Вот интересно, а почему у Фроу Кэтча в изголовии кровати стоит два наполовину полных стакана воды? - спросила Прагма Инлайн и залила кипятком свою чашку. Фроу Кэтч мучительно покраснел. Ему очень хотелось провалиться сквозь офисные перекрытия прямо сию секунду.
- Ведь у настоящего программиста, - продолжила свою мысль Прагма Инлайн, кокетливо косясь на пунцового юношу, - как известно, около кровати должно быть два стакана - один полный, на тот случай если ему ночью захочется пить, и другой пустой - на случай, что не захочется!
Фроу Кэтч безмолвствовал. Учитель Гоу Ту вступился за ученика:
- Наполовину полный стакан, он же наполовину пустой - это, милочка, блестящий пример оптимизации.
- Да, но почему их два?
- Резервное копирование, - пожал плечами мастер.
Фроу Кэтч вприпрыжку ворвался в комнату Гоу Ту и радостно позвал его:
- Пошли скорее! сейчас же митинг незапланированный, час назад письмо разослали! может, премию дадут...
И без того мрачный мастер помрачнел ещё сильнее. Произведя несколько отточенных движений мышкой и подытожив их легчайшей трелью на клавиатуре, учитель Гоу Ту поднялся и с неохотой перевел взгляд с монитора на весёлого Фроу Кэтча.
- А ты чего так веселишься? Митинги, на которых раздают премии, не бывают незапланированными.
- Ну может ещё что-нибудь интересное!, -щенячий энтузиазм юноши совсем так уж просто было не растоптать.
- Знаешь ли, Фроу Кэтч, древняя китайская примета гласит: встретить дракона - к хорошему обеду.
- Ну! я и говорю!
- Для дракона, мой дорогой.
Фроу Кэтч сник. Гоу Ту почувствовал что-то, отдалённо напоминающее угрызения совести:
- Но древние китайские приметы врут ещё чаще, чем современные офисные. И митинг, кстати, уже вторую неделю как запланированный, внимательнее надо за оповещениями следить.
Однажды Фроу Кэтч вышел на улицу без куртки, потому что на улице начиналась весна. Через четверть часа он вернулся обратно, но стал необыкновенно задумчив и обыкновенно рассеян.
- Учитель!, - вдруг вопросил Фроу Кэтч пустоту собственной комнаты, - учитель, а что будет, если я напишу очень короткую программу, в которой не будет ни одной ошибки?
Никто не ответил юноше. "И учитель тоже бы не ответил", - ни с того ни с сего догадался Фроу Кэтч и глубоко выдохнул. Ему осталось поставить закрывающую фигурную скобку.
В одну прекрасную пятницу Фроу Кэтч сидел на своём рабочем месте и ронял на клавиатуру крупные злые слёзы. Мастер Гоу Ту сидел рядом, напоминая собой всемилостивейшую бодхисатву Гуаньинь; разве что вазы с ивовой веткой в руках у мастера недоставало.
- Обрати взгляд внутрь своего Дао и не забывай о дыхательных техниках, - с выражением бесконечного сочувствия на лице увещевал Гоу Ту. Фроу Кэтч отвернулся от вордовского файла и неритмично запыхтел. Через несколько минут он, можно сказать, успокоился.
- Учитель!, - возопил Фроу Кэтч, избегая смотреть на компьютер, -
ну зачем, зачем, ЗАЧЕМ они сформулировали техзадание именно таким изъ... таким кошмарным способом? Ведь это и программировать неудобно, и в использовании будет сплошной геморрой. Зачем?!!Учитель Гоу Ту молчал и улыбался, как будто в его руке слегка покачивалась невидимая ветка ивы.
- Ты в прошлом году жаловался на сноубордистов, - Фроу Кэтч вытаращил глаза, потом расслабился, горькая складка у его рта разгладилась, он кивнул,
- которые лежат поперёк склона как раз там, где ты собираешься повернуть. Но теперь ты научился их объезжать?, - Фроу Кэтч ещё раз кивнул, -
научился поворачивать там, где надо повернуть, а не там, где тебе повернуть удобно? - Так же и с техзаданием. Ты не постигнешь дао программирования, пока будешь делать то, что удобно тебе.Фроу Кэтч просиял, положенным образом поблагодарил своего учителя и спешно уставился в монитор. Уже уходя из комнаты, Гоу Ту заглянул через его плечо. Нет, на экране было не техзадание. На экране был
www.ski.com.
Редко кто-нибудь стучался в кабинет Фроу Кэтча, но Прагма постучалась. При виде любимой коллеги молодой программист опасливо просиял, и не зря.
- Фроу Кэтч!, - спросила Прагма Инлайн, подкрадываясь к комьютеру с грацией голодного тигра-людоеда, - ты редактировал мою функцию в нашем общем модуле, да?, - и девушка ласково улыбнулась. Её наманекюренные коготки с пронзительным скрежетом
царапали тыльную сторону монитора.
Фроу Кэтч, заикаясь, сознался.
- Хорошо отредактировал, молодец, ууууумница, - Фроу Кэтч боялся ласковой Прагмы Инлайн ещё больше, чем медитирующего Гоу Ту, - это, мой милый, очень интимное действие - отредактировать чужой код без предупреждения. Поэтому теперь, как настоящий джентльмен, ты должен...
- Я должен на тебе жениться?, - вырвалось у Фроу Кэтча.
- Нет. Намного, намного хуже. Теперь ты, как настоящий джентльмен, должен извести в этой функции все warning'и.
- Учитель!, - как правило, пятничный шестичасовой чай учитель Гоу Ту посвящал разговорам о главном. Он говорил, что ум ученика распахивается для действительно важных вещей лишь в пограничном состоянии ещё-работы и уже-не-работы, подобном расплывчатому промежутку между сном и явью. По пятницам Фроу Кэтч позволялось и даже вменялось в обязанность задавать вопросы.
- Учитель! А для чего в программном коде существуют ошибки?
Учитель Гоу Ту одобрил заданный вопрос еле различимым движением руки с фарфоровой чашкой.
- Ошибки суть внешние проявления одной из пяти стихий, составляющих бытиё программы. Как мир, доступный нашим пяти чувствам, слагается из воды, огня, земли, воздуха и эфира, так и, - но Фроу Кэтч непочтительно перебил наставника.
- Вот, например, зачем искать ошибку, если ничего не падает, память не течёт и даже результаты почти не меняются?
Учитель Гоу Ту вздохнул. Пожалуй, он переоценил успехи этого юноши.
- Исправление одних ошибок позволяет тебе найти другие ошибки, которые иначе остались бы незамеченными.
- Может, было бы проще не делать ошибок вообще?
Мастер посмотрел на ученика с жалостью.
Фроу Кэтч взбунтовался. Печатая шаг, он ворвался на кухню, налил себе растворимого кофе и размешал в нём четыре ложечки сахара. С верхом. Учитель Гоу Ту следил за учеником с приветливым любопытством.
- Почему?, - Фроу Кэтч говорил как минимум на два тона громче, чем это было позволительно на кухне, и ещё на один тон громче, оттого что понимал непозволительность своего поведения, - почему я должен уже второй день заниматься поисками неинициализации, если это ничего не изменит? Какая разница, что финальный результат нестабилен? Почему я должен тратить столько сил - и времени - и -
Фроу Кэтч задохнулся своим гневом и глотнул из чашки. Его лицо перекосилось.
- Всё равно от меня ничего не зависит! ничего! Лучше бы я занимался чем-нибудь другим, а тут от меня ничего не зависит! Почему я должен?!!
- Да не должен ты никому ничего, успокойся, - больше всего Фроу Кэтча бесила именно непоколебимость спокойствия мастера. Казалось, Фроу Кэтч может сплясать лезгинку на столе или устроить вуду-алтарь Микрософта в своей комнате, но более сильной реакции, чем поднятая бровь, ему не дождаться.
- А ты идёшь в воскресенье на выборы?, - Фроу Кэтч, уже открыв рот, некоторое время напоминал выкинутую на берег рыбу. Потом он вдруг как-то весь сдулся и упал на соседний стул.
- Эээээ... нет. От меня ведь всё равно ничего не зависит. Они не перейдут порог, и голос мой пропадёт, и..
Гоу Ту ласково поднял бровь.
- Что ж от тебя нигде ничего не зависит.. что ж, насильно значим не будешь. Хрен с твоим кодом, можешь не искать в нём ошибку. Вряд ли он попадёт в версию, - мастер улыбнулся ещё ласковее.
Фроу Кэтч сник.
- Понимаешь, дорогой, если ты заранее настроен, что код не попадёт в версию, - Фроу Кэтч захотел что-то сказать, но вдруг передумал, - то он и не попадёт.
Фроу Кэтч в отчаянии отхлебнул из своей кружки второй раз. Гоу Ту неубедительно изобразил сочувствие.
- Так и быть, у тебя есть ещё время. До воскресенья.
"А мог бы и чашку об лоб", - догадался Фроу Кэтч, выливая свой кофе в раковину, - "ну или не чашку, пожалел бы он чашку, кипятку мог плеснуть... Две тысячи лет назад я бы без шишки не обошелся."
- В пятницу заметил объявление на своём подъезде, - рассказывал Фроу Кэтч за чашкой чая своему учителю, - "три женщины ищут партнёра в бридж".
- Ну и как? Ты к ним зашёл вечером в пятницу?, - вежливо поинтересовался мастер, глядя на уши Фроу Кэтча. По ушам ясно читался и неподходяще солидный возраст всех трёх дам, и неподходяще солидный уровень их игры.
- Нет, не зашёл, бридж какая-то непрограммистская игра - не то, что преферанс.
Гоу Ту приподнял обе брови.
- В бридже в каждой масти карт не целое количество, - объяснил молодой преферансист.
- Зато игроков всегда целое количество, - парировал Гоу Ту. Посмотрел на ученика с жалостью, вздохнул о чём-то своём: зима. К Долине подступала зима со всеми своими долгими зимними вечерами. Учитель Гоу Ту допил последний, самый ароматный глоток чая и резко сменил тему.
- Слушай, ты бы не называл тогда целочисленные итераторы Eps, раз уж тебя так волнуют эти неразрешимые диафантовые вопросы.
С начала недели мастер Гоу Ту был суров и мрачен, потому что с начала недели мастер Гоу Ту
встраивал в свой проект свеженаписанный модуль Фроу Кэтча. Фроу Кэтч проводил в комнате
мастера больше времени, чем в своей, а его учитель с каждым часом становился всё суровее
и мрачнее. Иногда он рассказывал Фроу Кэтчу поучительные истории о методах публичных
китайских казней или о публичных методах классов-оболочек программных библиотек, иногда
просто изрекал что-нибудь ободряющее в своей обычной манере.
- Для любого программиста есть масса вещей, куда более удивительных,
чем что его собственный код работает.
Фроу Кэтч недоверчиво хмыкнул.
- Неужели?!! Что же, например??
- Например, что твой код работает, - хмуро констатировал Гоу Ту.
- А он правда работает? Ураааа!!!
Фроу Кэтч просиял и почти что пустился в пляс. У него было сегодня неспровоцированно
хорошее настроение, в таком настроении всё казалось прекрасным Фроу Кэтчу: и мокрый снег,
и холод, и чай Липтон, и меееееедленно выполняющийся код, и пять писем с предложениями
что-нибудь прямо сейчас увеличить, и даже четыре дня, оставшихся до очередного рабочего совещания.
Прагма Инлайн ходила по офису и искала мужчину. Утром в понедельник мужчины предпочитали быть мужчинами где-нибудь в другом месте, и лишь Фроу Кэтч мрачно застыл визави беспощадного монитора.
- Фроу Кэтч! ты мне нужен, как мужчина, - требовательно воззвала Прагма Инлайн.
Фроу Кэтч радостно вдрогнул, но потом вспомнил, кто он, где он и что понедельник, и без дополнительных вопросов побрёл на кухню - ставить бак с водой на офисный титан. Выполнив свой мужской долг, Фроу Кэтч практически проснулся и сделался весел.
- Вот!, - обобщил он с кокетливой гордостью, - всё-таки мы разные и нужны друг другу.
- Угу, нужны, - Прагма Инлайн задумчиво кромсала лимон. Разговор как-то не ладился.
- Разные..., - Прагма бросила в чашку четвёртый подряд ломтик лимона, явно не заметив первых трёх, - Вот скажи, Фроу Кэтч, ты где чаще всего ошибки ловишь?
- Я? в деструкторах, повторяющихся участках кода и вложенных циклах.
- Гм. Действительно вроде как разные.
А я - в ресторанах, ванне или, на худой конец - в туалете.
Однажды Фроу Кэтч подстерёг учителя за медитацией над текстовым документом и задал ему неожиданный вопрос.
- Учитель, что есть ум программиста?, - Фроу Кэтч запустил задачу с утра и делать ему пока было нечего. В такие моменты в молодом программисте просыпалось настолько упорное стремление к самосовершенствованию, что даже у мастера Гоу Ту не всегда получалось увернуться.
- Ум программиста подобен трём вещам: шуму кошачьих шагов, меху змеи и сладкозвучному пению щуки.
Фроу Кэтч задумался, а потом выплеснул себе на джинсы горячего чаю.
!!!, - воскликнул Фроу Кэтч столь нервно, что мастер отвлёкся от своих текстов, машинально скользнул взглядом по работающей задаче на мониторе справа и наконец обратил внимание на замешательство ученика.
- Ой, извини, напутал, - сочувственно оговорился мастер, - это были наметки к тренингу для менеджеров.
Где-то к середине дня в комнату Фроу Кэтча постучалась Прагма Инлайн. Фроу Кэтч просиял, даже почти что поднялся со стула, но девушка была явно не в духе. Не тратя времени на разговор о погоде за вертикальными жалюзями, она с лёгкой угрозой спросила:
- Фроу Кэтч! Знаешь, что такое наивность?
- Ну.. это когда мать думает, что её дочь девственница?, - кокетливо предположил Фроу Кэтч, предпочитавший ухаживать за девушками проверенными методами.
- Не угадал. Это когда программист думает, что код, который он взял из базы, собирается. А знаешь ли ты, что такое сверхнаивность?
- Это когда дочь.. думает...
- Нет! это когда программист! думает! что код, которые он кладёт в базу! собирается!
Фроу Кэтч сник: он положил код в базу полчаса назад. Яркие краски офиса тоже сникли: наверное, на солнце за жалюзями набежало облачко. Наверное, от плохого освещения Прагма Инлайн вдруг потеряла большую часть своей привлекательности. Фроу Кэтч грустно потянулся мышкой к ярлычку SourceSafe: как это часто случается, потеря наивности обошлась ему в солидную долю очарования этого мира.
Поутру Фроу Кэтч завороженно наблюдал, как мастер Гоу Ту, не торопясь, совершает чайную церемонию. Наконец ритуал закончился, выжатый пакетик липтона приземлился в мусорную корзину. Гоу Ту отпил из своей чашки костяного фарфора и осведомился:
- Ну как, сегодня наладилось, с чем ты последнюю неделю возишься?
Фроу Кэтч стряхнул оцепенение:
- Эээ.. да. Теперь всё работает как надо.
- Ошибку нашёл? молодец!
- Нет, оно как-то само улучшилось. Я..., - Фроу Кэтч собирался с духом для мужественного признания, - я просто порядок операторов изменил. И мелкие warning'и поправил. Не знаю, почему всё стало лучше, не могло оно стать лучше, думаю, там ошибка. Как раз собирался сегодня её искать.
Учитель Гоу укоризненно покачал головой и демонстративно уставился на ленту с лозунгом, прикреплённую магнитиками к дверце холодильника. Один магнитик был с видом на Ниагарский водопад, а другой - с китайской пагодой. На двух склеенных листах А4 было пропечатано сорок восьмым кеглем:
ЗАПРЕЩАЮТСЯ ИССЛЕДОВАНИЯ ПРИЧИН, ПО КОТОРЫМ ПРОГРАММА РАБОТАЕТ