Максим Байтович
Код, петух и одна грядка

Глава 1. Исключение из «счастливого» списка

Сергей понял, что всё, пора завязывать, в тот самый миг, когда его любимый монитор выдал синенькое сообщение смерти: «FATAL ERROR: Out of Memory».

— Это не у меня память кончилась, — вслух сказал Сергей пустому опенспейсу. — Это у жизни закончился буфер.

Было три часа ночи. За окном двадцать первого этажа бизнес-центра «Евразия» спала Москва, переваривая вечерние коктейли и завтрашние дедлайны. Сергей сидел перед тремя мониторами, на которых горели Jira, мессенджер с семьюстами непрочитанными и проджект с требованием «допилить блокчейн под AI-фронт, но чтобы Web3 был в квадрате».

Он работал Senior Software Engineer в компании «КиберТрон Групп». Неплохая зарплата, ДМС, корпоративный фитнес и ежегодный тимбилдинг на Селигере с лозунгом «Мы не спим — мы кодим». Но в последние полгода Сергей начал замечать странные симптомы: он больше не радовался новым лямбдам в AWS. Ему стало всё равно на типы данных. Он дважды пропустил редкий баг в легаси — и не расстроился.

Коллеги зашептались. HR прислала опросник «А твой ли это карьерный трек?». А утром, перед тем как упал сервер продакшена, Сергей понял главное: он ненавидит код. Всей душой, всем своим перегруженным кэшем сознанием.

— Сеня, — позвал он единственного друга в офисе — фикуса в горшке по кличке Билл Гейтс. — Билл, мы уходим.

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

Дома, в однушке на Юго-Западной, его ждал кот Бублик — толстый рыжий философ, который единственный не спрашивал, когда он выкатит фичу с автоплиткой.

— Бублик, — торжественно сказал Сергей, поднимая кота над головой. — Я решил. Переквалифицируюсь.

Кот мудро смолчал, но взглядом явно спросил: «В кого? В дворника, прорабá?»

— В фермера, — выдохнул Сергей. Сказал — сам испугался.

Через неделю он сидел в электричке «Москва — Рязань — Кагальницкая», сжимая в руках распечатку объявления: *«Срочно. Продается ферма. Недорого. Есть дом, куры, трактор Т-25 и привидение»*.

«Привидение, — подумал Сергей. — Ну, привидение — это даже забавно. Если оно имеет интерфейс, я с ним договорюсь».

Ферма называлась «Красный Петух». Находилась в ста километрах от ближайшего города. Дом — бревенчатый, с печкой, паутиной и запахом сушеных яблок. Трактор стоял во дворе, заросший лебедой, с табличкой «Не включать — злой». Куры (шестнадцать штук) настороженно косились на нового хозяина.

Предыдущий фермер, дядя Вася, рукопожатие которого напоминало вице-губернаторские тиски, сказал коротко:

— Ты, главное, землю не обижай. Она ответит.

— В смысле ответит? REST API? — уточнил Сергей.

Дядя Вася вздохнул, перекрестился на петуха и уехал на «Ниве» в закат, оставив ключи, поллитровку с мутной жидкостью («от сглаза») и тетрадь с надписью «КУРЯТНИК: логи ошибок».

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

— Бублик, — сказал он коту, который сидел в переноске с видом ссыльного дворянина. — Мы тут главные программисты теперь. Только вместо серверов — огурцы.

Кот чихнул. Из курятника донеслось невнятное «ко-ко-ко», что на языке бэкенд-разработчиков обычно означает «упал прод».

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

— Ладно, — сказал Сергей. — Баг-репорт принят. Начинаем релиз новой жизни.

Солнце садилось за крышу покосившегося амбара. Бублик философски улегся на единственное сухое место на крыльце. А вдалеке, за рекой, раздался протяжный, недобрый крик: «Ку-ка-ре-ку!» — такой громкий, будто кто-то взорвал динамик старой «Нокии».

Сергей понял: патч 1.0 только начинается.

Глава 2. Синтаксическая ошибка в коровнике

Сергей проснулся от того, что кто-то очень настойчиво долбил клювом в окно. Не в дверь — в окно. Методично, с интервалом в три секунды, будто отлаживал цикл while(true) do knock().

— Бублик, это твои фокусы? — прохрипел Сергей, не открывая глаз.

Кот спал на его голове — излюбленная поза, означавшая «ты мой обогреватель, и не дергайся». Значит, стучал не он.

Сергей выполз из-под драного ватника (одеял в доме не оказалось, зато был пулеметный кожух времен войны и три копии газеты «Правда» за 1987 год). Выглянул в окно. И остолбенел.

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

— Ты… ты серьезно? — спросил Сергей.

Петух выразительно кивнул. Бумажка выпала. Сергей развернул.

На обрывке тетрадного листа было каллиграфическим почерком выведено:

«Вася 4-ре петуха : 1 сдох.

Етот опасен. Не корми после 6 вечера. Не повышай голос.

При встрече говорит гадости ПРОШЛЫЙ ХОЗЯИН.

Звать АРЧИБАЛЬД.

P.S. У него есть ключ от погреба. Не спрашивай как.»

— Арчибальд, — медленно произнес Сергей. — Ты, значит, злой гений этой фермы.

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

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

Кот открыл один глаз: «Техподдержка, конечно».

С утра Сергей решил начать с основ. Достал тетрадь дяди Васи («КУРЯТНИК: логи ошибок»). Пролистал. Содержание поражало:

«14 мая. Курица №3 (Белая) перестала нестись. Ошибка 404: Яйцо не найдено.»

«21 мая. Петух прогнал ветеринара. Ветеринар в слезах. Баг не воспроизводится.»

«5 июня. Трактор завелся сам. Ездил по кругу 2 часа. Остановить не смог. Фикс: отключить аккумулятор.»

«17 июня. Внесено критическое изменение: сено теперь хранить в левом сарае. Правый сарай НЕ ОТКРЫВАТЬ. Звук там.»

— Бублик, ты видишь это? «Звук там»? Какой звук?

Бублик, который уже успел обследовать дом и теперь вылизывал лапу на печке, сделал многозначительную паузу. Лапа явно намекала на правый сарай.

— Нет, — твердо сказал Сергей. — Я приехал сюда за огурцами и душевным покоем. А не за тем, чтобы расследовать «звуки там». Я отладчик, а не сапёр.

Он перевернул страницу. Там было написано крупными буквами: *«КУРИЦЫ ТРЕБУЮТ ПОВЫШЕНИЯ ЗЕРНА. Угрожают забастовкой. Выдвинули требования: 1) Свободный выгул. 2) Отставку Арчибальда. 3) Wi-Fi в курятнике. О последнем — шутка.»*

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

— Ладно, — вздохнул он. — Идем знакомиться с командой.

Курятник оказался произведением инженерной мысли дяди Васи. Дверь открывалась по рычажку от велосипедного тормоза. Внутри горела лампочка, подключенная через аккумулятор от «Запорожца». В углу висела табличка: «Здесь могла быть ваша курица, если б вы её кормили вовремя». Шестнадцать кур сидели на насесте, выстроившись в идеальную шеренгу. И молча смотрели на Сергея.

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

— Здрасьте, — сказал Сергей.

Ни одна курица не клюнула. Ни одна не кудахтнула. Глава делегации — крупная пестрая особь с интеллигентным гребешком — сделала шаг вперед и выжидающе уставилась.

— Я… я ваш новый хозяин. Сергей. Программист, — добавил он, сам не зная зачем.

Тут случилось необъяснимое. Курица (видимо, главная) повернулась к остальным, что-то проквохтала — ни дать ни взять вызов метода с параметрами — и вся шеренга дружно наклонила головы набок. Затем на пол упало письмо.

Настоящее письмо. В конверте. С маркой «СССР, 50 копеек».

Сергей поднял, разорвал. Внутри аккуратным бисерным почерком:

*«Уважаемый новичок.

Поздравляем с покупкой. Если вы читаете это — куры вас приняли. Если не читаете — вы уже уехали.

Правила фермы „Красный Петух“:

Не врите курам. Они чувствуют ложь лучше, чем scrum-мастер — переработки.

Не рубите петуха. Арчибальд — это не птица. Это система.

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

Если увидите в поле фигуру в черном плаще и с косой — не паникуйте. Это сосед Коля, он собирает камыш.

Правый сарай… а, ладно. Сами поймете.

С уважением,

куры (коллективное)

P.S. Трактор не заводить до полнолуния.

P.P.S. Бублик — шпион. Но ваш.»*

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

— Бублик, — позвал Сергей слабым голосом. — Ты… ты действительно шпион?

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

А потом громко, раздельно, так что слышала вся ферма, мяукнул:

— Мря-а-ау.

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

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

— Знаешь, — сказал Сергей курам, петуху и шпиону-коту. — В ТЗ это не входило. Совсем.

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

А Сергей закрыл глаза, глубоко вздохнул и набрал на телефоне сообщение дяде Васе (номер чудом сохранился):

«Василий, тут у вас в правом сарае звук. Что делать?»

Ответ пришел через минуту:

«Переустанови Windows».

— Я не знаю, — прошептал Сергей коту. — Я просто хотел выращивать огурцы.

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

И Сергей вдруг понял, что это «Still Alive» из Portal.

Только на волынке.

— Ну все, — сказал он. — Релизнулись.

Глава 3. Трактор-убийца и полнолуние

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

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

— Бублик, — сказал он коту, который откровенно скучал на крыльце, вылизывая то место, которое шпионы обычно вылизывают в первую очередь. — Ты как специалист по диверсиям, что скажешь? Завести?

Кот перевернулся на спину, продемонстрировал пузо и издал звук, очень похожий на «ну рискни, мне скучно».

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

— Арчибальд, я ценю твою экспертизу, — сказал Сергей. — Но ты птица. А это трактор. Ты в нём не разбираешься.

Петух обиженно сплюнул (кстати, петухи могут плеваться? Арчибальд мог) и демонстративно ушел в курятник, хлопнув дверью.

Остались только трактор, Сергей, кот и ветер. Полевой, сухой, пахнущий полынью и свободой.

— Так, — Сергей потер руки. — Что мы имеем? Трактор Т-25. Год выпуска — 1986. Двигатель — двухцилиндровый, дизельный. Мощность — 25 лошадиных сил. Проблема — по словам дяди Васи, «злой».

Он открыл капот (точнее, откидную железку с надписью «Здесь был Вася, 2003»). Внутри оказалось нечто. Провода были скручены изолентой всех цветов радуги. Воздушный фильтр держался на хомуте от унитаза. А на блоке цилиндров кто-то маркером нарисовал череп и кости.

— Боже, — прошептал Сергей. — Да тут легаси код пострашнее моего будет.

Он полез в тетрадь дяди Васи. Нашел раздел «ТРАКТОР». Записи выглядели так:

«15 июня. Заменил масло. Трактор завелся, поехал в сторону леса, вернулся через три часа с бревном в прицепе. Откуда бревно — не знаю.»

«3 июля. Трактор отказался заводиться. Сказал скрипом стартера: „Не сегодня“. Переночевал в кабине, извинился перед трактором. Завелся.»

*«22 августа. В кабине нашел записку: „Купи мне новый глушитель, Вася. Надоело рычать. Твой Т-25“. Купил. Рычит до сих пор.»*

— Он что… разговаривает? — спросил Сергей у вселенной.

Кот чихнул. Это было «да».

Сергей решил действовать методично, как учили в универе: найти документацию, понять протокол общения, установить соединение. Документации не было. Был только ключ зажигания в виде гвоздя, погнутого на 90 градусов.

— Ладно, — Сергей сел в кабину (сиденье пружинило так, будто внутри жил Йода). — Коннектимся.

Гвоздь-ключ вошел в замок зажигания с влажным хлюпающим звуком. Сергей повернул.

Трактор издал звук: «У-у-у-у-у». Не стартера. А разочарованного учителя, который снова видит того, кто не выучил урок.

— Я понял, ты недоволен, — сказал Сергей. — Но мы же взрослые. Давай поговорим.

Трактор замолчал. Потом зажужжал переговорное устройство непонятного назначения и оттуда донесся голос (механический, но с интонациями старого партийного функционера):

— «Предъявите права, товарищ. Нет прав — нет поездки. Устав фермы „Красный Петух“, пункт 7, подпункт „А“, абзац третий.»

Сергей выпал из кабины. Буквально. Вывалился, как мешок с гречкой, и приземлился в крапиву.

— Бублик! — заорал он. — ОНО ГОВОРИТ!!!

Кот, который спокойно сидел на крыше кабины, посмотрел на него как на идиота. «Ну да, говорит. А ты думал, ради чего я сюда переезжал? Ради твоих шуток про джуниоров?»

Сергей встал, отряхнулся и снова забрался в кабину. На этот раз осторожно, как в комнату к спящему тигру.

— У меня нет прав. Я программист. Но я умею чинить баги, — сказал он.

Трактор помолчал. Потом заговорил снова, но уже мягче, почти отечески:

— «Програм-мист, говоришь. Хм. У нас тут был один такой. Вася звал его „Петрович с модемом“. Он пытался подключить меня к интернету через розетку. После этого я неделю видел сны про биты и байты. Неприятно было. Очень.»

— Я не такой, — сказал Сергей. — Я… я хочу работать. Пахать. Сеять. Чтобы огурцы.

— «Огурцы, — повторил трактор с неожиданной нежностью. — А я думал, вы все хотите только галочки в Jira. Ладно, программист. Заводи. Но без резких движений. И если поедем в лес — не сопротивляйся.»

— В лес? — переспросил Сергей.

— «Ты задаешь слишком много вопросов. Это плохая черта для фермера. Зато отличная — для мертвого.»

Сергей хотел уточнить, что значит «для мертвого», но трактор уже завелся сам. Дизель чихнул, задымил, и железная махина весом две тонны послушно покатилась в сторону поля.

Руль крутился сам. Педали нажимались сами. Сергей чувствовал себя пассажиром Tesla с багом в автопилоте.

— А куда мы едем? — крикнул он, перекрывая гул.

— «В правый сарай. Ты же слышал звук.»

— Я не хочу в правый сарай!

— «А кто тебя спрашивает, программист? Ты нажал на кнопку. Теперь работай с результатом.»

Сергей обернулся. На прицепе, свернувшись калачиком, ехал Бублик с довольной мордой. Над полем уже вставала луна — огромная, желтая, круглая, как монитор старого iMac.

Полнолуние наступило раньше.

— Ты специально, да? — спросил Сергей у кота.

Кот улыбнулся. Явно специально.

Правый сарай приближался. Дверь его была закрыта на амбарный замок, обмотанный цепью с тремя навесными замками. Поверх них — моток колючей проволоки. Поверх проволоки — табличка красной краской: «СМЕРТИ НЕТ. ЕСТЬ ТОЛЬКО ТЕХНИЧЕСКИЙ ПЕРЕРЫВ».

Трактор остановился сам. Фары мигнули (левый глаз, правый глаз, левый).

Из сарая снова донеслось пение. Теперь громче. Это была всё та же «Still Alive» из Portal, но уже с явно добавленным басом и хором.

— «Стучись, — сказал трактор. — Главное, не бойся. Оно само боится. Больше тебя.»

— Чего оно боится? — спросил Сергей, чувствуя, как волосы на затылке встают дыбом.

— «Пылесоса.»

— Чего⁈

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

Сергей подошел к двери. Взялся за цепь. Цепь была теплой. Живой. Она пульсировала, как пульс перепуганного джуниора на код-ревью.

— Ну, — сказал он сам себе. — Git pull —force, мать вашу.

И дернул.

Дверь открылась с надрывным скрипом «system.ino: строка 42 — fatal error». Внутри было темно. Пахло сеном, озоном и чем-то очень старым. Играла музыка. Света не было.

Но чей-то голос из глубины сказал:

— «Наконец-то. Я тут базу данных уже полвека поддерживаю. В одиночку. Скажи, у тебя есть резервное копирование? А то у меня всё на магнитной ленте, и она сыреет.»

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