18+
реклама
18+
Бургер менюБургер меню

Вадим Кирпиков – Сбой в жизни (страница 9)

18

«Ты превращаешься в робота, – шептала она, когда я мыл за собой тарелку. Ее голос был почти безразличным, констатирующим. – Ритуалы, правила, расписание. Где в этом жизнь, Новиков? Ты не живешь. Ты функционируешь. Выполняешь программу. И в конце дня просто выключаешься».

«Я и есть программа, – думал я в ответ. – И я сам себя пишу. Идет полный рефакторинг. Старые, неэффективные модули отправляются в утиль».

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

Я писал код. Не так, как раньше. Не рывками. Не приступами вдохновения, сменяющимися неделями прокрастинации. Я писал его методично. Как каменщик, который кладет кирпич за кирпичом. Я брал одну маленькую задачу из плана, который мы составили с «Нексусом». Например, «Реализовать функцию валидации банковского счета». И я делал ее. Сначала писал тесты, которые заведомо проваливались. Красные буквы в консоли. FAILED. Это была постановка задачи. Потом я писал сам код, который заставлял эти тесты позеленеть. PASSED. Потом я делал рефакторинг, делая код чище, проще, эффективнее. И переходил к следующей задаче.

Красный. Зеленый. Рефакторинг. Этот цикл стал моей мантрой.

«Твой код – мусор, – пыталась вмешаться она, когда я надолго задумывался над какой-нибудь функцией. – Ты пишешь костыли. Любой нормальный программист сделал бы это в десять раз быстрее и в сто раз элегантнее. Когда это кто-нибудь увидит, тебя просто засмеют».

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

Я открывал окно с «Нексусом» и писал:

Проанализируй этот фрагмент кода на предмет эффективности и соответствия лучшим практикам.

И вставлял свою функцию. Через несколько секунд машина выдавала беспристрастный ответ. «Код функционально корректен. Для повышения читаемости можно вынести магическую константу 0.05 в отдельную переменную. Использование list comprehension вместо цикла for может незначительно повысить производительность на больших объемах данных».

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

Шли недели. Я потерял счет дням. Они слились в один длинный, бесконечный цикл. Бег-код-сон. Бег-код-сон. Я ни с кем не разговаривал, кроме «Нексуса». Я не выходил из дома никуда, кроме как на пробежку и раз в неделю в магазин за гречкой и яйцами. Моя комната стала похожа на каюту космического корабля в дальнем полете. Все на своих местах, все функционально. Ничего лишнего.

И я начал замечать изменения.

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

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

Но самое главное изменение было внутри. Мой разум стал острее. Я мог удерживать в голове все более сложные конструкции. Я перестал бояться ошибок. Ошибка – это не провал. Это просто информация. Это еще один тест, который FAILED. Значит, нужно исправить код и запустить его снова. Я перенес этот принцип с программирования на всю свою жизнь.

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

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

Ее голос тонул. Тонул в стуке моих кроссовок по асфальту. Тонул в яростном реве Skillet в наушниках. Тонул в щелчках моей механической клавиатуры. Тонул в бесстрастных ответах «Нексуса». Тонул в шуме моей новой жизни. Я не победил ее. Я просто сделал свою жизнь настолько громкой, что ее стало почти не слышно.

Однажды поздним вечером я закончил работу над первым большим модулем. Data Harvester. Он был готов. Весь покрыт тестами, с подробной документацией. Я сделал коммит в свой локальный Git-репозиторий. Сообщение было коротким: «feat: implement core functionality of Data Harvester module». Я откинулся на спинку кресла. На мониторе светились зеленые строчки. Сотни тестов. Все PASSED.

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

«И кому это нужно? – прошелестела Сирена откуда-то из-под плинтуса сознания. Это была ее последняя, слабая попытка. – Ты потратил недели своей жизни на кусок кода, который никто никогда не увидит».

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

И я впервые подумал, что это не так уж и плохо.

«Мне нужно, – сказал я тихо, глядя на свое отражение в темном стекле. – Это нужно мне».

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

Призрак из прошлой жизни

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

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

Супермаркет встретил меня гудением холодильников, писком сканеров на кассе и запахом хлорки, который тщетно пытался перебить сладковатый аромат выпечки. Флуоресцентные лампы на потолке лили ровный, мертвенный свет, в котором все цвета казались выцветшими, а лица людей – восковыми. Я двигался быстро, по заранее проложенному маршруту. Мой внутренний GPS вел меня от полки к полке с максимальной эффективностью. Гречка, овсянка, яйца, кофе. Список был зашит в памяти, я не нуждался в бумажных костылях. Каждый пункт – это API-запрос к стеллажу. GET /api/products/buckwheat. Статус: 200 OK. Товар добавлен в корзину. То есть, в рюкзак.

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

Лена.

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

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