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