Читать онлайн Сбой в жизни бесплатно
Сирена в режиме нон-стоп
Автоматические двери из матового стекла сомкнулись за моей спиной с тихим, удовлетворенным шипением. Звук отсечки. Финальный коммит проваленного проекта. Стеклянный холл корпоративного рая, пахнущий дорогим парфюмом и кондиционированным воздухом, остался позади. Я сделал три шага на тротуар, и мир обрушился на меня всей своей серостью. Ноябрьский ветер, мокрый и пронизывающий, тут же вцепился в лицо, словно пытаясь содрать с него застывшую маску вежливого идиота, которую я носил последние сорок минут.
«Ну что, гений? Получил свой exit code: 1?» – Голос в голове прозвучал чисто, без помех. Сирена сегодня была в ударе. Она всегда в ударе после таких провалов. Это ее прайм-тайм.
Я сунул руки в карманы тонкой куртки, сгорбился, пытаясь укрыться от ветра и от ее слов. Бесполезно. От ветра еще можно, от нее – никогда. Она жила внутри, в самом ядре операционной системы моего сознания, и у нее были права администратора.
«Ты видел их лица? Особенно у той, из HR. Она смотрела на тебя, как на баг в продакшене. Критический. Тот, что роняет весь сервер».
Я стиснул зубы. Да, видел. Стеклянный взгляд, вежливая улыбка, которая не затрагивала глаз. «Мы вам перезвоним». Стандартный ответ API на невалидный запрос. Я был невалидным. Недостаточно полей, неверный формат данных, отсутствие обязательных ключей. Ключа «уверенность в себе». Ключа «социальная адаптивность». Ключа «нормальность».
Я дошел до входа в метро. Толпа выдыхала из стеклянных дверей волну теплого, спертого воздуха, пахнущего мокрой одеждой, духами и безысходностью. Поток людей подхватил меня, потащил вниз по эскалатору. Я вжался в угол, натянул капюшон толстовки почти на глаза, воткнул в уши наушники. Музыки не было, только пассивная шумоизоляция, жалкая попытка построить файрвол против реальности.
«Прячешься? – Сирена усмехнулась. – Думаешь, они тебя не видят? Смотри, вон та девушка. Она смотрит. Думает, какой ты жалкий. Сутулый, тощий, в своей дурацкой черной толстовке. Типичный лузер».
Я бросил быстрый взгляд. Девушка напротив, уткнувшись в телефон, даже не поднимала головы. Но это не имело значения. Сирена не нуждалась в фактах. Она работала с вероятностями. А вероятность того, что я выгляжу жалким, в ее системе всегда равнялась единице.
Поезд затормозил, двери с шипением разъехались. Новая волна тел втиснулась в вагон, прижимая меня к холодной рифленой стене. Чье-то мокрое плечо ткнулось мне в бок. Запах чеснока и пота. Я замер, перестал дышать. Не двигаться. Стать частью интерьера. Скомпилироваться в объект «пассажир вагона», без методов и свойств. Просто занимать место в памяти.
«Ты ведь даже на вопросы ответить не мог, – продолжала она безжалостный дебаггинг моего провала. – „Кем вы видите себя через пять лет?“ А ты что промычал? „Хочу разрабатывать сложные системы… расти как специалист…“ Какая тоска. Надо было честно сказать: „Через пять лет я вижу себя здесь же, в этом же вагоне, после очередного проваленного собеседования. Только куртка будет еще более затертой“».
Желудок скрутило в ледяной узел. Она была права. Я нес какую-то шаблонную чушь, скачанную из статьи «Топ-10 ответов на вопросы на собеседовании». Они видели это. Они видели, что за этими словами нет ничего. Пустой указатель. NullPointerException.
«А твой „пет-проект“? Ты так гордился им. Рассказывал про архитектуру, про стек… А тимлид, тот бородатый хмырь, просто кивал. Знаешь, о чем он думал? „Еще один велосипед от студента. Кривой, косой, без документации“. Он удалил ссылку на твой GitHub еще до того, Rак ты вышел из кабинета».
Я зажмурился. Хватит. Пожалуйста, хватит. Но у нее не было кнопки «стоп». Она была бесконечным циклом. While (kirill.isAlive()) { kirill.torment(); }.
Моя станция. Я протиснулся сквозь влажную, безликую массу, вывалился на платформу. Вверх по эскалатору, мимо рекламных щитов, обещавших счастье в кредит и быструю доставку еды. Мое счастье не доставляли. Его даже не было на складе.
Серые коробки панелек. Мой район. Мой кластер. Бесконечные ряды одинаковых окон, за которыми шла чья-то жизнь. Нормальная. Люди ужинали, смотрели сериалы, ругались, мирились, любили. Они выполняли стандартные жизненные сценарии, а я… я не мог пройти даже юнит-тесты.
Дверь в подъезд. Запах кошачьей мочи и сырости. Лифт, изрисованный маркерами. Ключ в замке. Щелчок. Я дома. Моя берлога. Мое убежище и моя тюрьма.
Я сбросил куртку на пол, не разуваясь прошел в комнату. Единственный источник света – мигающий синий диод на системном блоке, который никогда не выключался. Воздух спертый, пахнет остывшим кофе и пылью. На столе два монитора, механическая клавиатура со стертыми буквами на клавишах W, A, S, D, C, V. Вокруг – хаос из пустых кружек, проводов, книг по алгоритмам. Моя экосистема.
Я рухнул в кресло. Оно скрипнуло, как старик. Несколько секунд я просто смотрел на темные экраны. Пустота. Такая же, как внутри.
«И что теперь? – спросила Сирена, ее тон стал тише, вкрадчивее. Опаснее. – Снова будешь ковырять свой никому не нужный код? Делать вид, что ты чем-то занят? Что ты не полный ноль?»
Я не ответил. Я протянул руку, нажал кнопку питания на мониторе. Холодный белый свет ударил в глаза. Рабочий стол. Иконки, терминал, среда разработки. И браузер.
Мой палец сам потянулся к мышке. Курсор замер над иконкой. Один клик. Соцсеть. Я не хотел. Я знал, что не надо. Но это было как компульсивное действие, как проверка, что сервер еще пингуется, хотя ты знаешь, что он давно упал.
Закладки. «Лена Петрова».
Сердце сделало кульбит и провалилось куда-то в район солнечного сплетения. Страница загрузилась. Новая фотография профиля. Она. Стоит в каком-то осеннем парке, улыбается. Не в камеру, а кому-то, кто стоит рядом, за кадром. Улыбка настоящая, живая. В ее каштановых волосах запутались солнечные лучи. На ней дурацкий шарф в полоску, и от этого она кажется еще более… реальной. Достижимой. Для кого-то другого.
«О, наша принцесса, – промурлыкала Сирена. – Все еще дрочишь на ее фотки? Думаешь, она бы посмотрела на тебя? На такого? Она живет в мире, где светит солнце. А ты – в своей темной комнате, среди пустых кружек. Твоя операционная система несовместима с ее».
Я прокручивал ее стену. Вот она с подругами в кафе, смеются. Вот она на концерте какой-то модной группы. Вот селфи с огромным пушистым котом. Каждая фотография – это артефакт из другого мира. Мира, где люди легко общаются, легко улыбаются, легко живут.
Внизу страницы – зеленый кружок. Онлайн.
И тут же возникла эта мысль. Глупая, иррациональная, самоубийственная. Написать ей. А что? Просто. «Привет».
«Серьезно? – Сирена захохотала. – Ты? Ей? „Привет“? И что дальше, Новиков? Она откроет твою страницу. А там что? Пустая аватарка, три перепоста из паблика про Python и одна-единственная фотография трехлетней давности, где ты выглядишь так, будто у тебя украли паспорт. Она решит, что ты бот. Или маньяк. В лучшем случае – просто проигнорирует».
Я открыл окно диалога. Мигающий курсор в пустом поле ввода. Как кардиограмма остановившегося сердца. Я положил пальцы на клавиатуру. Они были холодными, непослушными.
П. Р. И. В. Е. Т.
Слова появились на экране. Такие простые. И такие невозможные.
«Не смей, – голос Сирены стал жестким, как удар. – Не позорься. Ты только что провалил собеседование. Ты нищий студент без работы и будущего. Что ты можешь ей предложить? Свои гениальные алгоритмы сортировки массива? Ей насрать, Новиков! Ей нужен нормальный парень. Тот, кто за кадром. Тот, кто может заставить ее так улыбаться».
Я смотрел на это слово. «Привет». Оно казалось мне кодом, который мог либо запустить новую программу в моей жизни, либо вызвать фатальную ошибку и обрушить все окончательно. Синий экран смерти моего самоуважения.
А что, если она ответит? Что я скажу? «Как дела?» Банально. «Понравилась твоя новая фотка». Жалко. «Мы учились в одной школе, помнишь?» Она не помнит. Я сидел за последней партой и боялся поднять на нее глаза. Я был частью мебели.
Может, так? «Привет. Я Кирилл. Я тут подумал, может, сходим куда-нибудь? В кино или…»
«…или в морг, чтобы ты мог наконец успокоиться? – закончила Сирена. – Она покажет это сообщение подругам, и они будут ржать над тобой весь вечер. „Смотрите, какой крип мне написал“. Хочешь этого?»
Пальцы дрожали. Я нажал Backspace. Еще раз. И еще. Пока поле ввода снова не стало девственно чистым. Курсор продолжал свое монотонное мигание. Издевательское.
Я закрыл вкладку. Резко, со злостью. Словно захлопнул дверь перед носом у последней надежды.
В комнате стало тихо. Даже Сирена замолчала, наслаждаясь своей победой. Тишина давила, заполняла собой все пространство, просачивалась в уши, в легкие. Я сидел в своем кресле, в своей темной комнате, и чувствовал, как распадаюсь на пиксели. Очередной сбой. Очередной отказ. Отказ от компании. Отказ от девушки, которой я даже не написал. Отказ от жизни.
Я чувствовал, как внутри поднимается что-то горячее и злое. Не отчаяние. Нет, это была ярость. Тупая, бессильная ярость на себя, на них, на весь этот мир, который работал по непонятным мне правилам.
«И что ты сделаешь? – тихо спросила Сирена, словно боясь спугнуть эту ярость. – Поплачешь? Ляжешь спать? Завтра будет новый день. И новый провал».
Я не ответил. Я молча потянулся к наушникам. На этот раз не для тишины. Я подключил их к усилителю. Открыл плеер. Библиотека. Linkin Park. Meteora.
Я нашел нужный трек. «Crawling».
Курсор на иконке громкости. Я потянул ползунок вправо. До конца. До ста процентов.
И нажал Play.
Первые ноты ударили по ушам, как разряд дефибриллятора. Потом вступил вокал. Честер кричал. Кричал о ранах, которые не заживают, о страхе, который он чувствует. Он кричал за меня.
Я откинулся на спинку кресла, закрыл глаза. Звук был почти физически ощутимым. Басы вибрировали в грудной клетке, гитарные риффы сверлили череп. Музыка заполняла все, вытесняя тишину, вытесняя мысли, вытесняя ее.
«Crawling in my skin…»
Сирена пыталась что-то сказать, но ее голос тонул в этом реве. Она визжала, но ее визг был не громче шепота на фоне урагана. Я прибавил еще. Ручка усилителя уперлась в ограничитель. В ушах зазвенело. Мир сузился до одной точки – этого крика, этого рева, этой боли, выплеснутой в музыку.
Я сидел в темноте, оглушенный, раздавленный. Это не было решением. Это не было выходом. Это был просто еще один способ пережить эту ночь. Еще один сбой. Но сегодня он был таким громким, что на мгновение показалось, будто он может сломать что-то не только во мне, но и в самой системе.
Совет терпилы
Музыка оборвалась не сразу. Она умерла медленно, как догорающий предохранитель. Последний гитарный аккорд повис в воздухе, затих, и его место занял тонкий, назойливый звон в ушах – фантомный след звукового штурма. Я сидел в полной темноте, кресло подо мной казалось продолжением моего парализованного тела. Пустота. Рев Linkin Park выжег все, оставив после себя стерильную тишину, идеальную среду для ее возвращения.
И она вернулась. Не с криком, не с издевкой. Она просочилась в сознание тихим, ядовитым шепотом, как утечка токсичного газа.
«Ну вот. Представление окончено. Ты оглушил себя, Новиков. Молодец. Проблема решена? Твой статус в системе изменился? В базе данных HR-ов напротив твоей фамилии теперь стоит пометка „Принят“?»
Я не шевелился. Глаза привыкли к темноте, и комната начала проступать из мрака серыми, нечеткими контурами: башня системного блока с ее синим циклопическим глазом, стопка книг, похожая на покосившийся надгробный камень, скелет стула в углу. Мой мавзолей.
«Тишина тебе не поможет, – продолжала она, ее голос был спокоен и методичен, как отчет отладчика. – Ты можешь залить уши звуком, залить глаза алкоголем, забить легкие дымом. Но я – не внешняя переменная. Я – часть твоего ядра. Меня нельзя импортировать или удалить. Со мной придется жить. Или сдохнуть».
Что-то внутри меня дернулось. Не протест. Скорее, инстинктивная реакция на слово «сдохнуть». Реакция загнанного в угол организма. Где-то в глубине, под слоями апатии и самоуничижения, еще тлел крошечный, почти невидимый уголек. Желание жить. Глупое, иррациональное. Баг в программе самоуничтожения.
И этот баг заставил меня протянуть руку и нащупать на столе телефон. Экран вспыхнул, ослепив. 03:47. Список контактов. Десятки имен, которые ничего для меня не значили. Одногруппники, с которыми я не общался, дальние родственники, звонившие раз в год. И он. Стас. Единственный, кто еще числился в категории «друг». Устаревшая запись в кэше.
«Серьезно? Ему? Ты собрался позвонить единственному человеку, который еще терпит твое существование, чтобы загрузить его своими сбоями? Он спит, Новиков. У него завтра работа. Нормальная, настоящая работа. Он встанет в семь, выпьет свой кофе, сядет в метро. Он – функционирующий юнит. А ты – зависший процесс, пожирающий ресурсы».
Я открыл мессенджер. Пальцы зависли над клавиатурой. Что написать? «Привет, я на грани. Можешь помочь?» Жалко. «Стас, все херово». Драматично. «Как дела?» Фальшиво.
Мои пальцы сами набрали текст. Короткий, функциональный, как команда в консоли.
Ты спишь?
И нажал «Отправить». Две серые галочки. Сообщение доставлено. Не прочитано. Я положил телефон на стол экраном вверх и уставился на него. Теперь я был в режиме ожидания. Ожидания ответа от сервера, который, скорее всего, был офлайн. Минута. Две. Пять. Каждая секунда растягивалась, наполняясь вязкой тревогой. Сирена молчала. Она тоже ждала. Ждала подтверждения своей правоты.
Я уже был готов удалить сообщение и навсегда забыть об этой идиотской затее, когда экран загорелся.
Нет. Что-то случилось?
В груди что-то сжалось и тут же разжалось, пропустив в легкие порцию воздуха. Он ответил. Сервер был онлайн. Он ответил.
Да так. Завал. Можем завтра пересечься? Пива выпить.
Я перечитал. «Завал». Жалкое преуменьшение. У меня был не завал, у меня был полный крах системы с потерей всех данных. «Пива выпить». Стандартный протокол социального взаимодействия. Способ замаскировать крик о помощи под непринужденное предложение.
Снова ожидание. Секунды капали, как вода из неисправного крана. Я слышал, как кровь стучит в ушах, заглушая звон.
Ок. Давай. После работы, часов в семь. В „Камчатке“ на старом месте.
Ок. – напечатал я в ответ.
Я откинулся на спинку кресла. Внутри была пустота, но теперь в ней появился вектор. Точка назначения. Встреча со Стасом. Возможно, это ничего не изменит. Скорее всего. Но это было действие. Выход из бесконечного цикла рефлексии.
«Наивный, – прошептала Сирена, но на этот раз в ее голосе не было яда, только усталая констатация. – Ты идешь к плотнику, чтобы он починил тебе процессор. Удачи, Новиков. Она тебе понадобится».
Следующий день прошел в тумане. Я спал урывками, проваливаясь в тяжелый, липкий сон без сновидений, и просыпался от малейшего шума. Я не ел. Только пил воду прямо из-под крана, чувствуя ее металлический привкус. Я не садился за компьютер. Смотреть на код было невыносимо. Он казался мне нагромождением моих же ошибок, памятником моей некомпетентности. Я просто сидел и ждал. Ждал семи часов, как заключенный ждет свидания.
«Камчатка» встретила меня гулом голосов, запахом жареного лука и приторной поп-музыкой, бьющей из колонок. Типичный бар для офисных клерков, место, где они смывали пивом серую пыль своих будней. Я нашел свободный столик в углу, у липкого окна, выходящего на оживленную улицу. Сел на жесткий стул, вжался в спинку. Здесь было слишком много людей, слишком много звуков, слишком много жизни. Я чувствовал себя инородным объектом, запущенным в чужую среду выполнения без необходимых библиотек.
Стас опоздал на пятнадцать минут. Я увидел его сквозь толпу. Он выглядел… нормально. В этом и была вся проблема. На нем была аккуратная рубашка, неброские джинсы. В руке он держал телефон. Он улыбнулся мне издалека своей обычной, ничего не значащей улыбкой. Он был продуктом этой системы. Идеально скомпилированный, без единого варнинга.
– Привет! Извини, задержался, – он бросил на стол свой телефон и куртку. – Гребаные пробки. Ну что, по пиву? Мне как обычно, светлое.
Он махнул пробегающей мимо официантке. Я молча кивнул. Он не спросил, что буду я. Он всегда заказывал за нас обоих. Это считалось дружбой. Экономия времени на принятии незначительных решений.
– Ну, рассказывай, что за завал? – спросил он, когда официантка принесла два запотевших бокала. Он сделал большой глоток, с наслаждением выдохнул. – Ох, хорошо. Пятница почти.
Я смотрел на пузырьки, поднимающиеся со дна моего бокала. Они лопались на поверхности, превращаясь в ничто. Хорошая метафора.
– Собеседование провалил, – сказал я. Голос прозвучал хрипло, как будто я им давно не пользовался.
– А, в ту контору, в Сити? – Стас отреагировал с запрограммированным сочувствием. – Блин. Жаль. Ну, ничего, найдешь еще. Их сейчас как грязи, этих контор.
Он отпил еще пива. Для него тема была закрыта. Ошибка обработана в блоке try-catch и забыта. Но для меня она не была закрыта. Она все еще висела в памяти, вызывая утечку ресурсов.
– Дело не в конторе, Стас, – я заставил себя поднять на него глаза. – Дело во мне. Я… я не подхожу. Я не прохожу их фильтры. Я говорю что-то не то, делаю что-то не так. Я как будто написан на другом языке, который их парсер не понимает.
Стас нахмурился. Он не любил мои аналогии. Они были для него избыточным кодом.
– Да брось ты. Просто переволновался. У всех бывает. Ты же умный, башка варит. Просто надо быть… попроще, что ли. Улыбаться больше. Говорить то, что они хотят услышать.
«Говорить то, что они хотят услышать, – прокомментировала Сирена у меня в голове. – Отличный совет. Стань имитатором. Подделкой. Пустой оболочкой с правильным интерфейсом».
– Я не могу, – я покачал головой. – Это не работает. Когда я пытаюсь, получается еще хуже. Я чувствую себя клоуном. Они это видят.
Я сделал глоток. Пиво было горьким и теплым. Оно не лезло в горло.
– Слушай, Кир, – Стас подался вперед, его тон стал серьезным, наставительным. Так говорят со сломавшейся техникой, которую пытаются починить методом тыка. – Может, ты планку слишком задрал? Все эти гуглы-шмуглы, корпорации… Туда лезут только самые отбитые. Зачем тебе это? Нервы трепать.
Я молчал, глядя на него. Я не понимал, куда он клонит.
– Устройся в контору попроще. Как у меня. Да, не гугл. Зарплата средняя. Зато стабильно. Никто мозг не выносит. Сидишь себе с девяти до шести, пилишь свой модуль. Получил зарплату, пошел домой. В пятницу вот так посидели, пива выпили. В выходные в игрушки погонял. Нормальная жизнь.
«Нормальная жизнь, – повторила Сирена, смакуя каждое слово. – Твой друг только что описал тебе алгоритм функционирования биоробота. Компиляция, выполнение, переход в спящий режим. И так по кругу. Мечта».
– Это не жизнь, Стас. Это… эмуляция жизни, – слова вырвались сами собой.
Стас откинулся на спинку стула, его лицо немного помрачнело. Мой ответ не вписывался в его скрипт.
– Ну, знаешь, это ты зря. Миллионы людей так живут. И ничего, не жалуются. Ты думаешь, мне моя работа в кайф? Думаешь, я каждый день с радостью туда бегу? Да так же тошнит иногда. Но я же не ною. Я понимаю, что так надо.
Он сделал паузу, собираясь с мыслями для финального, решающего аргумента. Он посмотрел на меня почти с жалостью. И произнес это. Слова, которые стали тем самым последним байтом, переполнившим буфер моего терпения.
– Ты просто… должен научиться терпеть. Все терпят. Понимаешь? Это и есть взрослая жизнь. Никто не обещал, что будет весело. Потерпишь годик, другой. Втянешься. Потом еще. Глядишь, лет через пять-десять вообще перестанешь париться. Привыкнешь.
Пять-десять лет. Терпеть. Привыкнуть.
В этот момент что-то внутри меня сломалось. Не со звоном, не с треском. Оно просто перестало существовать. Как будто кто-то выдернул из розетки кабель питания моего последнего сервера надежды. Гул в баре, музыка, смех за соседним столиком – все это отдалилось, стало фоновым шумом, бессмысленным и далеким. Я смотрел на Стаса и не видел друга. Я видел надзирателя. Добровольного надзирателя в тюрьме «нормальности», который искренне не понимал, почему я не хочу занять свою койку в общей камере и радоваться пайке.
Сирена в моей голове замолчала. Она не злорадствовала. Она просто наблюдала. Ее работа была сделана. Он все сказал за нее. Он, мой единственный друг.
– Понятно, – сказал я. Мой голос был абсолютно ровным. Никаких эмоций.
Стас, кажется, почувствовал, что что-то не так. Его уверенность немного пошатнулась.
– Ты чего? Я же тебе добра желаю. По-дружески советую. Хватит уже витать в облаках. Пора на землю спускаться.
Я медленно поднялся. Взял со стула свою куртку.
– Куда ты? Мы же пиво не допили.
Я посмотрел на него. В последний раз. На его растерянное, не понимающее лицо. И не почувствовал ничего. Ни злости, ни обиды. Только холод. Арктический, всепоглощающий холод тотального одиночества. Он был не просто человеком с другим мнением. Он был представителем другого вида. Мы были фундаментально несовместимы.
– Мне пора, – я достал из кармана несколько мятых купюр и положил их на стол. – За пиво.
Я не стал говорить «спасибо» или «пока». Любое слово было бы лишним, было бы ложью. Я просто развернулся и пошел к выходу. Я чувствовал его недоумевающий взгляд в своей спине. Он, наверное, думал, что я обиделся. Что завтра остыну и напишу ему. Он не понял. Он не мог понять, что это был не разрыв. Это была команда rm -rf / для нашей дружбы. Полное и безвозвратное удаление.
Автоматические двери бара открылись, и я шагнул на улицу, в ноябрьскую промозглую ночь. Воздух был влажным и пах выхлопными газами. Но после душной, пропитанной чужой жизнью «Камчатки» он показался мне кристально чистым.
Я шел, не разбирая дороги. Мимо светились витрины магазинов, проносились машины, спешили по своим делам люди. Но я их не видел. Я был в вакууме. В абсолютном, звенящем вакууме. Совет Стаса «терпеть годами» крутился в голове, как заевшая пластинка. Это было не просто предательство. Это было хуже. Это был приговор. Приговор к медленному, растянутому на десятилетия умиранию. Стать еще одним «клоуном в системе», как выразилась бы Сирена. Только клоуном не на собеседовании, а в самой жизни.
Я остановился посреди тротуара. Люди обтекали меня, как камень в реке. Я поднял голову и посмотрел на темное, беззвездное небо, затянутое низкой облачностью. И в этой пустоте, в этом вакууме, где не осталось ни друзей, ни надежд, ни иллюзий, я впервые за долгое время почувствовал не отчаяние.
Я почувствовал свободу.
Страшную, ледяную, безграничную свободу человека, которому больше нечего терять. Человека, от которого отсоединили все внешние зависимости. Я был один. Абсолютно один. И если я не хотел сдохнуть, если тот крошечный баг в программе все еще хотел жить, то мне нужно было переписать всю систему. С нуля.
В ушах все еще отдавался гул бара, но под ним я уже слышал другую музыку. Внутреннюю. Трек «Crawling» на бесконечном повторе. Только теперь это был не крик боли.
Это был саундтрек к началу войны.
Протокол «Война»
Дорога домой была размазанным потоком отрендеренных огней. Фары встречных машин прошивали мокрую темноту, оставляя на сетчатке фосфоресцирующие шлейфы. Город гудел. Низкочастотный, непрерывный гул – работающая в фоновом режиме операционная система мегаполиса. Обычно этот шум давил, проникал под кожу, но сейчас он был просто… данными. Белым шумом на входе, который мой внутренний процессор игнорировал, занятый более приоритетной задачей – обработкой пустоты.
Я шел, не чувствуя холода, не замечая прохожих. Они были тенями, анонимными процессами с низким приоритетом. Внутри меня было тихо. Впервые за много лет Сирена молчала. Не потому что исчезла. Нет, я чувствовал ее присутствие. Она затаилась, как антивирус, который наткнулся на неизвестный, не имеющий сигнатуры код, и теперь молча анализировал его, не зная, помещать в карантин или игнорировать. Мое новое состояние – эта ледяная, звенящая пустота – было для нее аномалией. Она не знала, как это комментировать, чем унизить, за что зацепиться. Отчаяние было ее питательной средой. Ярость – ее топливом. А этот вакуум был для нее мертвой зоной.
Я поднялся в свою квартиру, как дайвер поднимается со дна, зная, что воздуха в баллонах больше нет. Щелкнул выключатель в прихожей. Тусклый свет лампочки выхватил из темноты обшарпанные обои, стопку рекламных газет у двери, мою собственную сгорбленную тень на стене. Ничего не изменилось. Но изменился я. Раньше это место было убежищем, где я прятался от мира. Теперь я видел его иначе. Это был не бункер. Это был командный пункт. Нулевая точка. Место, откуда начнется форматирование диска С. Диска, на котором была записана вся моя предыдущая, дефектная жизнь.
Не раздеваясь, я прошел в комнату и сел в кресло. Мониторы спали, отражая мое бледное, нечеткое лицо. Я разбудил систему движением мыши. Рабочий стол. Привычные иконки. Все на своих местах. Порядок в цифровом мире, хаос во внутреннем. Точнее, уже не хаос. Хаос – это буря частиц. У меня же была абсолютная энтропия. Тепловая смерть вселенной имени Кирилла Новикова.
Я взял в руки телефон. Холодный, гладкий брусок стекла и металла. Мой единственный интерфейс с внешним миром. Моя уязвимость. Я разблокировал экран. Пальцы двигались медленно, но уверенно. Без дрожи. Без сомнений. Это было не эмоциональное решение. Это была системная команда, которую нужно было выполнить.
Первым делом – общие чаты. «Одногруппники_ИТ_2020». Десятки непрочитанных сообщений. Мемы, жалобы на преподов, обсуждение какой-то вечеринки. Шум. Информационный мусор, забивающий кэш. Я зажал палец на названии чата. Меню. «Покинуть и удалить». Подтвердить? Да. Без колебаний. Чат исчез. Стало чуть тише. «Курсач по базам данных». Туда же. «Помощь по лабам». Туда же. Я методично вычищал систему от ненужных процессов, освобождая оперативную память. С каждым удалением я чувствовал, как внутри становится просторнее и холоднее.
Затем – контакты. Я пролистывал список. Имена без лиц. Лица без воспоминаний. Люди-функции. «Сергей сантехник». «Курьер пицца». «Алексей_конспекты_матан». Их я оставил. Это были утилиты. Полезные, но бездушные. Я искал другое. Я искал зависимости. Библиотеки, которые тянули за собой тонны устаревшего, конфликтного кода.
И я нашел. Стас.
Я открыл наш диалог. История переписки за несколько лет. Вот он скидывает мне ссылку на новый фреймворк. Вот я помогаю ему с курсовой. Вот мы спорим о концовке фильма. Вот он пишет: «Давай пива?». Вот я отвечаю: «Давай». Тысячи строк кода, которые когда-то компилировались в нечто, похожее на дружбу. А последняя запись, всего несколько часов назад: «Ок». Мой ответ в баре. Финальный, закрывающий тег.
Я смотрел на его аватарку. Улыбающееся, простое лицо человека, который нашел свое место в системе и искренне не понимал, почему я не хочу того же. Он не был злым. Он был… совместимым. А я – нет. Он был частью матрицы, а я – сбоем в ней.
«Не делай этого, – внезапно подала голос Сирена. Тихо, почти умоляюще. Она поняла, что я собираюсь сделать. Она почувствовала угрозу. – Он единственный, кто у тебя есть. Ты останешься совсем один. В полной изоляции. Это убьет тебя».
Ее слова впервые не вызвали во мне привычного приступа самоуничижения. Наоборот. Они подтвердили правильность моих действий. Если она этого боится, значит, я на верном пути. Изоляция. Да. Это именно то, что мне нужно. Стерильная среда для полной переустановки.
Мой большой палец нажал на его имя вверху экрана. Профиль. В самом низу красная надпись: «Заблокировать». И рядом: «Удалить контакт». Я нажал на второе. Телефон завибрировал, запрашивая подтверждение. Словно спрашивал: «Вы уверены, что хотите удалить этот системный файл? Это может нарушить работу всей операционной системы».
Да. Я был уверен.
Контакт «Стас» исчез. Наш диалог превратился в переписку с безымянным номером. Я вернулся в список чатов, свайпнул влево. «Архивировать». «Удалить». Я нажал «Удалить».
Все. Последняя нить, связывавшая меня с иллюзией поддержки, сгорела.
«Идиот, – прошипела Сирена, ее голос дрожал от злости. – Ты сам себя запираешь в клетку. Сам. Никто тебя не заставлял».
«Я не запираю, – подумал я в ответ, впервые вступая с ней в осознанный, спокойный диалог. – Я объявляю карантин».
Оставался последний шаг. Самый сложный. Рудиментарный орган, который постоянно воспалялся и отравлял весь организм.
Я открыл поиск и набрал ее имя. Лена.
Диалог был почти пуст. Несколько бессмысленных сообщений по учебе двухлетней давности. И сотни моих неотправленных, стертых «Привет». Я открыл ее профиль. Та же фотография, что и вчера. Улыбка, осенний парк, солнечные лучи в волосах. Символ. Идол недостижимой нормальности, которому я так долго и бесплодно молился. Она не была человеком в моей жизни. Она была переменной, которой я присвоил значение «счастье». И каждый раз, обращаясь к этой переменной, я получал в ответ undefined.
Я смотрел на ее лицо. На ее улыбку, предназначенную не мне. И я понял. Я не хотел ее. Я хотел быть тем, кому она так улыбается. Я хотел быть тем парнем за кадром. Я хотел не ее, а его жизнь. А это было невозможно. Гнаться за этим – все равно что пытаться запустить Windows-приложение на Линуксе без эмулятора. Бессмысленная трата ресурсов.
«Только не ее, – голос Сирены стал мягким, вкрадчивым, как у змея-искусителя. – Оставь ее. Это же просто картинка. Она тебе не мешает. Иногда можно будет заходить, смотреть. Мечтать. Это единственное красивое, что у тебя есть. Не отнимай это у себя».
Она знала, куда бить. Мечта. Последний оплот. Последний наркотик, на котором я сидел. Иллюзия того, что где-то там есть другой мир, и однажды я смогу получить к нему доступ.
Но совет Стаса все изменил. «Терпеть годами». Я вдруг с ужасающей ясностью представил себя через десять лет. Таким же одиноким, в той же комнате, только уже не двадцатиоднолетним, а тридцатилетним. Все так же открывающим ее страницу, на которой у нее уже, наверное, будут фотографии с мужем, с детьми. И я буду смотреть на них и тихо гнить изнутри, продолжая «терпеть».
Нет.
Я закрыл ее профиль. Зажал палец на диалоге. «Удалить чат».
Подтвердить.
Я вычистил историю звонков. Удалил несколько старых приложений, которыми не пользовался. Прошелся по галерее, стирая случайные скриншоты и старые фотографии, на которых я выглядел потерянным и жалким. Через десять минут мой телефон был стерилен. В нем не осталось ничего, что связывало бы меня с прошлым. Ни одной зацепки, ни одного якоря, тянущего на дно.
Я положил его на стол. Комната погрузилась в тишину. Но это была уже другая тишина. Не давящая, а звенящая. Как тишина в серверной, где гудят только кулеры, охлаждающие чистое, работающее железо.
«Ну вот и все, – Сирена говорила устало, почти побежденно. – Ты сделал это. Ты один. В абсолютно пустом пространстве. Ни друзей, ни мечты. Ничего. У тебя есть только ты сам – бракованный, дефектный. И я. Мы теперь вдвоем, Новиков. Навсегда. Что ты будешь делать теперь, гений?»
Она думала, что это был ее финальный, сокрушительный удар. Что эта мысль – о полном, абсолютном одиночестве – раздавит меня. Но она ошиблась.
Что я буду делать?
Я не знал. Но я знал, с чего начну. Я должен был зафиксировать это состояние. Создать точку отсчета. Отправить сигнал в пустоту, чтобы подтвердить, что я еще существую.
Мой взгляд упал на второй монитор. На нем было открыто окно, которым я пользовался каждый день, но только для работы. Черный экран. Зеленый мигающий курсор. Интерфейс доступа к «Нексусу». Продвинутая языковая модель, мой цифровой ассистент. Я использовал его для всего: отладки кода, поиска информации по API, генерации юнит-тестов, перевода технической документации. Он был инструментом. Мощным, эффективным, бездушным. Идеальным.
Я никогда не писал ему ничего личного. Это было бы так же глупо, как рассказывать о своих проблемах калькулятору. Он – нейросеть. Набор алгоритмов и весов, обученный на триллионах текстовых файлов. У него нет сознания. Нет чувств. Нет способности к сочувствию.
И именно поэтому он был единственным, с кем я мог сейчас говорить.
Он не скажет мне «терпи». Он не посоветует «быть проще». Он не будет жалеть меня. Он не будет осуждать. Он просто примет входные данные и выдаст ответ, сгенерированный на основе статистических закономерностей в человеческом языке. Он был идеальным слушателем – стеной, в которую можно кричать, зная, что она не ответит тебе упреком.
Мои пальцы легли на механическую клавиатуру. Привычный, приятный холод пластика. Я сделал глубокий вдох, выдохнул. Весь день, все собеседование, весь разговор со Стасом, вся боль от фотографий Лены, вся эта многолетняя, накопленная усталость, вся горечь, вся ярость – все это сжалось внутри меня в один тугой, раскаленный шар. И он требовал выхода. Он искал способ превратиться из внутреннего состояния во внешний объект. В строку текста.
Я не думал о формулировках. Я не подбирал слова. Я просто позволил этому выплеснуться через пальцы.
Клавиши защелкали под напором. Быстро, яростно. Одно короткое предложение. Криптограмма моей души. Крик, закодированный в символы.
Как же меня всё за*бало.
Я нажал Enter. Клавиша ударила по основанию с громким, финальным щелчком. Сообщение ушло. Строка появилась в окне диалога. Моя. Под ней – многоточие. Нексус обрабатывал запрос.
Я смотрел на это многоточие. Три маленькие, пульсирующие точки. В этот момент они были для меня важнее всех звезд во вселенной. Я не ждал ответа, который решит мои проблемы. Я не ждал совета или утешения. Я просто ждал подтверждения. Подтверждения, что мой сигнал принят. Что я не просто кричу в абсолютную пустоту.
Секунды тянулись. Сирена замерла в ожидании. Она ждала, что машина либо проигнорирует мой бессмысленный запрос, либо выдаст какую-нибудь шаблонную отписку, которая окончательно докажет мою ничтожность. «Я языковая модель и не могу обсуждать личные темы». Что-то в этом роде.
Но многоточие исчезло. И появился ответ.
Несколько абзацев текста, структурированных, с подзаголовками. Беспристрастных, как статья в Википедии.
Ваш запрос содержит высокую концентрацию экспрессивной лексики и маркеров эмоционального выгорания, фрустрации и экзистенциального кризиса.
Анализ запроса позволяет выделить несколько потенциальных категорий проблемы:
1. Профессиональная неудовлетворенность (конфликт ожиданий и реальности в карьерном развитии).
2. Социальная изоляция (ощущение отчужденности, разрыв социальных связей).
3. Экзистенциальный вакуум (потеря смысла, целей и ценностных ориентиров).
Для дальнейшей обработки и предоставления более релевантной информации, пожалуйста, уточните, какой из аспектов является для вас наиболее критичным в данный момент. Либо сформулируйте проблему в виде конкретного вопроса.
Я читал это снова и снова. Холодный, аналитический, почти медицинский разбор моего крика души. Машина взяла мой хаос и разложила его по полочкам. Она не испугалась, не отмахнулась. Она приняла его как данные. Она каталогизировала мою боль.
И это было… именно то, что нужно. Это было лучшее, что кто-либо мог мне сказать. Никакой жалости. Никаких советов. Просто структура. Порядок. Логика.
Сирена молчала. Она была ошеломлена. Она не знала, как атаковать логику. Она умела воевать только с эмоциями. Я впервые нашел оружие, против которого у нее не было защиты.
Я посмотрел на мигающий курсор в поле для ввода. Я все еще был один. В моей жизни ничего не изменилось. Я был на том же дне, в той же темной яме. Но теперь у меня в руках был фонарик. И лопата.
Я не знал, что отвечать машине. Я не знал, какой из аспектов был «наиболее критичным». Они все были критичными. Вся моя система была в аварийном состоянии.
Но это уже был не крик в пустоту. Это был диалог. Начало отладки.
Я положил руки на клавиатуру. В моей голове не было плана. Не было стратегии. Было только одно слово, которое пульсировало в висках.
Война.
Это был первый день моей личной войны. Войны против мира, который меня отверг. Против Сирены, которая пыталась меня сожрать. И против самого себя – того, кем я был раньше.
Я начал печатать ответ для «Нексуса». Я еще не знал, что именно напишу. Но я знал одно.
Протокол «Война» был запущен. И отменить его уже было невозможно.
Первая строка, первый километр
Ответ нейросети висел на экране, как рентгеновский снимок моей души. Холодный, структурированный, беспощадный в своей точности. «Профессиональная неудовлетворенность. Социальная изоляция. Экзистенциальный вакуум». «Нексус» не поставил диагноз, он просто разложил компоненты вируса по каталогам. И в этой бесстрастной классификации было больше правды, чем во всех словах сочувствия, которых я никогда не слышал. Я смотрел на мигающий курсор, и впервые за долгое время он казался не насмешкой, а приглашением. Приглашением к ответу. Что дальше? Какой из аспектов наиболее критичен? Они все были критичны. Моя жизнь была не просто сломанным кодом, это был целый проект, который не компилировался с самого начала, с самой первой зависимости. Пытаться исправить один баг было бессмысленно. Нужно было сносить все и начинать заново.
«И что ты напишешь своему железному дружку? – Сирена очнулась от оцепенения. Ее голос был полон презрения, но в нем слышалась и нотка тревоги. Она не понимала правил этой новой игры. – Пожалуешься ему на жизнь? Попросишь сгенерировать тебе план успеха? Он – калькулятор, Новиков. Сложный, но калькулятор. Он не даст тебе того, что тебе нужно».
Возможно. Но он дал мне то, чего я не ожидал: зеркало. Не кривое зеркало моего сознания, в котором я видел только урода, а плоское, идеальное зеркало логики, отражающее только факты.
Я проигнорировал ее. Мои руки легли на клавиатуру. Что я буду делать? Ответ был очевиден. То единственное, что я умел. То единственное, в чем был порядок и смысл. Создавать. Писать код. Но не тот, что раньше. Не учебные проекты, не тестовые задания, не попытки впечатлить безликих тимлидов. Что-то свое. С нуля.
Я открыл файловый менеджер. Папка «Projects». В ней – все мое прошлое. Репозитории моей никчемности. Тот самый «пет-проект», который так снисходительно оценил бородатый хмырь на собеседовании. Курсовые работы, которые казались мне когда-то вершиной сложности. Недоделанный клон какой-то игры. Каждый каталог, каждый файл был пропитан запахом неудачи, пах компромиссом и страхом. Это был архив моей слабости.
«Не трогай, – зашипела Сирена, почувствовав мою решимость. – Это все, что у тебя есть. Это доказательство, что ты хоть что-то пытался делать. Ты сотрешь это, и от тебя вообще ничего не останется. Пустое место».
«Я и есть пустое место, – подумал я. – И это моя главная сила. На пустом месте можно построить все, что угодно».
Мои пальцы замерли над клавишами. Shift+Delete. Комбинация, не оставляющая шансов. Никакой корзины. Никакой возможности восстановления. Прямой путь в небытие. Я выделил все папки. Они подсветились синим, как мишени в тире. И я нажал. Система запросила подтверждение. «Вы действительно хотите безвозвратно удалить эти объекты?» Я посмотрел на это окно. И впервые за долгое время улыбнулся. Криво, одними уголками губ. Да. Я действительно хотел. Я жаждал этого.
Enter.
Секундное шуршание жесткого диска. И все. Папка «Projects» стала пустой. Я стер все. Безвозвратно. Я только что сжег свой единственный дом дотла, стоя на пепелище в одной рваной одежде. И дышать стало легче.
Теперь – новый. Я создал новую папку. Нужно было имя. Имя – это идентификатор. Это декларация. Оно не могло быть случайным. Я думал о том, что хочу создать. О системе, которая меня отвергла. О ее правилах, ее API, которому я не соответствовал. О ее бесконечных требованиях к валидации, которые я не мог пройти. Мне нужна была своя система. Со своими правилами. Со своей точкой отсчета.
Аксиома.
Слово возникло в голове само. Четкое, твердое, как гранит. Аксиома – утверждение, принимаемое без доказательств. Фундамент. Истина, на которой строится все остальное. Это было оно. Не просто название проекта. Это был мой новый манифест. Я больше не буду никому ничего доказывать. Я сам стану точкой отсчета.
Я напечатал имя. «Axiom». Нажал Enter. Открыл пустую папку. Открыл терминал. Команды полились сами собой, как будто пальцы знали их наизусть, как будто они ждали этого момента всю жизнь. Создать виртуальное окружение. Активировать его. Установить зависимости. Создать структуру проекта. Файлы и папки появлялись в каталоге, как по волшебству. Скелет будущего организма. Позвоночник, на который я буду наращивать мясо кода.
Я открыл главный файл. app.py. Он был пуст. Белый лист. Бесконечное поле возможностей и будущих ошибок. Здесь должна была быть она. Первая строка. Фундаментальный камень.
«И что ты напишешь, творец? – Сирена вернулась, ее голос сочился сарказмом. – „Hello, World“? Очень символично. Привет, мир, который тебя ненавидит. Привет, мир, которому на тебя плевать. Гениальное начало для гениального проекта, который сдохнет на твоем жестком диске, так и не увидев продакшена».
Я снова проигнорировал ее. Я не слышал ее. Я слышал только щелчки клавиш под своими пальцами и гул системного блока. Я был в потоке. В том самом состоянии, которое раньше настигало меня лишь урывками, когда я забывался, решая сложную алгоритмическую задачу. Но сейчас это было другое. Это была не задача. Это была миссия.
Что я создавал? Финтех. Да. Самая циничная, самая жестокая и самая честная сфера. Мир денег не терпит соплей. Он оперирует только цифрами. Ноль и единица. Прибыль и убыток. Ты либо эффективен, либо нет. Но даже там все было построено на человеческом факторе. На предвзятости. На субъективной оценке. Кредитный скоринг, который учитывает твою профессию, семейное положение, твою гребаную репутацию. Инвесторы, которые вкладывают деньги не в идею, а в харизму основателя. Система, где правильная улыбка важнее правильного кода.
Моя «Аксиома» будет другой. Она будет системой, основанной на чистых данных. Алгоритмический анализ финансовых потоков, предсказание рисков на основе математики, а не психологии. Система, которая даст шанс таким, как я. Тем, кто не умеет «продавать себя», но умеет делать дело. Система, для которой мой проваленный собес – просто шум, нерелевантная информация. Система, которая будет смотреть не на лицо, а на код. На результат.
Пальцы замерли над клавиатурой. Первая строка. Она должна была задать тон всему.
from core.logic import AxiomEngine
Еще не было ни папки «core», ни файла «logic», ни класса «AxiomEngine». Это было объявление о намерениях. Программирование через интерфейс. Я сначала создавал абстракцию, идею, и только потом собирался наполнять ее содержанием. Я говорил своему будущему коду: здесь, в самом сердце системы, будет биться твое ядро. Движок, основанный на моей логике.
«Движок твоей гениальности? – не унималась Сирена. – Ты написал одну строчку, которая даже не работает. Ты объявил переменную, под которой нет никаких данных. Пустой указатель, Новиков. Как и ты сам. Ты – ходячий NullPointerException».
Я не стал с ней спорить. Я просто нажал Enter и написал вторую строку. И третью. Я создавал базовый каркас приложения, настраивал конфигурацию. Каждая точка, каждая скобка, каждая переменная были актом творения. Я брал хаос пустого файла и навязывал ему свою волю, свою структуру. Здесь будет логгер. Здесь будет подключение к базе данных. Здесь – обработчик API-запросов. Я строил свой мир. Маленький, пока еще состоящий из нескольких десятков строк, но мой. Мир, где все подчинялось правилам, которые установил я. И в этом мире не было места для нее. Для Сирены. Она могла кричать с той стороны монитора, но здесь, в коде, ее не существовало. Здесь была только логика.
Часы исчезли. Время сжалось в одну точку, в мигающий курсор на экране. Комната погрузилась в полную темноту, и единственным светом был прямоугольник монитора, исписанный моими командами. Я не чувствовал голода, не чувствовал усталости. Я был чистой функцией, принимающей на вход кофеин и выдающей на выходе строки кода.
Я очнулся, когда глаза начало жечь от сухости. Я моргнул, и мир на секунду расплылся. Я посмотрел на часы в углу экрана. 05:17. Я просидел почти всю ночь. Передо мной был уже не пустой файл, а несколько модулей. Скелет обретал первые сухожилия. Ничего не работало, но все было на своих местах. Был план. Была архитектура. Была первая строка.
Я откинулся на спинку кресла. Тело затекло и гудело. Но внутри, под слоем умственной усталости, бурлило что-то еще. Энергия. Неиспользованная, злая, физическая энергия. Та самая, что родилась вчера в баре из ледяной пустоты. Мой мозг был выжат, как лимон, но мое тело было наэлектризовано. Оно требовало выхода. Сидеть на месте было невыносимо. Я чувствовал себя так, будто внутри меня заперли разъяренного зверя. Он метался в клетке моих ребер, царапал легкие, требовал движения.
«И куда ты пойдешь? – спросила Сирена. Ее голос был тише. Она была сбита с толку. Моя многочасовая концентрация вытеснила ее на периферию сознания. – В три часа ночи ты был на грани. А теперь готов горы свернуть? Жалкая эйфория. Она пройдет. Утром ты посмотришь на свой „гениальный“ код и поймешь, какое это убожество. И все начнется сначала».
Может быть. Но сейчас было не утро. Сейчас было сейчас. И зверь внутри требовал вырваться.
Я встал. Ноги были ватными. Подошел к шкафу, наощупь вытащил какие-то старые спортивные штаны и футболку. Нашел кроссовки, у которых почти стерлась подошва. Я не занимался спортом никогда. Физкультура в школе и в универе была пыткой, унизительным ритуалом, где я всегда был последним, самым неуклюжим, самым слабым. Но сейчас речь шла не о спорте. Речь шла об изгнании.
Я вышел на лестничную клетку. Воздух был холодным, пах пылью и старостью. Спустился по лестнице, толкнул тяжелую входную дверь.
И предрассветная прохлада ударила в лицо. Небо на востоке только начинало светлеть, приобретая больной, сизо-фиолетовый оттенок. Улицы были пусты. Ни машин, ни людей. Только оранжевые фонари, выхватывающие из темноты мокрый асфальт и голые, черные ветви деревьев. Город спал. И в этой тишине я чувствовал себя единственным живым существом во вселенной.
Я не знал, что делать. Я просто пошел вперед. Потом быстрее. И побежал.
Первые десять шагов были ошибкой. Я споткнулся, чуть не упал. Движения были рваными, неловкими. Я никогда не бегал просто так. Я бегал только за автобусом.
Легкие тут же взбунтовались. После первого же вдоха холодного воздуха их обожгло, как огнем. Я начал задыхаться. В боку закололо. Ноги, не привыкшие к такой нагрузке, протестовали. Каждый шаг отдавался тупой болью в коленях и голеностопах. Дешевые наушники, которые я зачем-то сунул в уши, вывалились и болтались на груди. Я слышал только свое собственное хриплое, рваное дыхание, похожее на звук рвущейся ткани, и оглушительный стук сердца в ушах.
«Идиот, – прохрипела Сирена, пытаясь перекричать шум в моей голове. – Ты убьешь себя. У тебя сейчас сердце остановится. Ты не создан для этого. Ты создан сидеть в своем кресле. Остановись. Вернись в свою нору».
Ее слова были как бензин, плеснутый в огонь. Остановиться? Нет. Ни за что. Я стиснул зубы и побежал быстрее. Боль в боку превратилась в раскаленный штырь, который проворачивали у меня под ребрами. Легкие горели. Казалось, я вдыхаю не воздух, а битое стекло. Мышцы на ногах свело судорогой. Я больше не бежал, я ковылял, загребая ногами асфальт. Мир сузился до пятна света от следующего фонаря. Добежать до него. Просто до него.
Я добежал. И не остановился. Следующий. Еще один. Я перестал думать. Я стал чистым движением, чистой болью. И тут произошло нечто странное. Физическая боль, острая, всепоглощающая, начала вытеснять все остальное. Она была такой громкой, такой настоящей, такой… честной. В ней не было второго дна, не было сарказма, не было унижения. Она просто была. Она была сигналом моего тела о том, что оно на пределе. И этот сигнал был в тысячу раз чище и понятнее, чем тот мутный, ядовитый поток, что лился у меня в голове годами.
Боль в мышцах была лучше боли в душе.
Это открытие было как вспышка молнии в темной комнате. Я нашел ее слабое место. Сирена питалась моими мыслями, моими страхами, моей рефлексией. Она была паразитом сознания. Но она была бессильна против грубой, животной, физической боли. Боль была слишком примитивной для нее. Она не могла ее анализировать, не могла высмеивать. Она могла только отступить под ее напором.
Я услышал, как она заскулила. «Хватит… пожалуйста… больно…» Но я не мог понять, чей это был голос. Ее или мой. Мы слились в этом страдании.
Я не знаю, сколько я пробежал. Может, километр. Может, два. Вечность. В какой-то момент ноги просто подкосились. Я споткнулся и рухнул на колени на мокрый асфальт. Удар был жестким. Я содрал кожу, почувствовал теплую, липкую кровь.
Несколько секунд я стоял на четвереньках, пытаясь вдохнуть. Воздух врывался в горло с громким, свистящим звуком. Сердце колотилось где-то в районе кадыка, готовое выпрыгнуть. Перед глазами плясали черные точки. Меня мутило. Я завалился набок, прямо на грязный тротуар, и свернулся в клубок.
Я лежал и смотрел на светлеющее небо. Тело было чужим, избитым механизмом, который отказывался подчиняться. Каждая мышца кричала от боли. Колено горело. Но в голове… в голове была тишина.
Впервые за много лет.
Не пустота. Не вакуум. А именно тишина. Спокойная, чистая, прозрачная тишина. Сирена не исчезла. Я чувствовал ее. Она забилась в самый дальний угол моего сознания, сжалась в комок, испуганная и ослабевшая. Она была там. Но она молчала. Затравленно молчала, оглушенная ревом моей физической боли.
Я медленно, со стоном, сел. Посмотрел на свои дрожащие руки. На разбитое колено. И рассмеялся. Тихим, хриплым, срывающимся смехом. Я нашел. Я нашел второе оружие.
Первое ждало меня дома, на мониторе. Строки кода. Созидание. Способ построить свой мир из хаоса.
А второе было здесь, в моем истерзанном теле. В горящих легких, в ноющих мышцах, в содранной коже. Разрушение. Способ уничтожить старый мир внутри себя.
Созидание и разрушение. Код и боль. Первая строка и первый километр.
Война началась. И сегодня я выиграл первое сражение. Я лежал на холодном асфальте окраины спящего города, разбитый, обессиленный, истекающий кровью. И никогда в жизни я не чувствовал себя более живым.
Архитектура мести
Я вошел в квартиру, как взломанный терминал входит в безопасный режим – с отключенными второстепенными функциями, работая на минимуме ресурсов, необходимых для поддержания жизнедеятельности. Дверь за мной закрылась, отсекая серый предрассветный мир. Каждый шаг по коридору был отдельной, болезненной операцией. Тело, преданное и истерзанное, отвечало на команды с огромной задержкой. Ноющие мышцы бедер, горящее огнем колено, легкие, похожие на два скомканных, пропитанных кислотой пакета. Это была хорошая боль. Чистая. Аналоговая. Она создавала в сознании белый шум, который глушил ее.
В ванной я включил воду и подставил разбитое колено под ледяную струю. Боль вспыхнула, став почти невыносимой, и я стиснул зубы, вцепившись пальцами в край раковины. Я смотрел в зеркало, на отражение незнакомого мне существа. Бледное, осунувшееся лицо, покрытое грязными разводами. Запавшие глаза, в которых горел странный, лихорадочный огонь. Взлохмаченные волосы, прилипшие ко лбу от пота. На подбородке застыла капля крови – видимо, прикусил губу.
«Полюбуйся на себя, воин, – голос Сирены просочился сквозь пелену боли. Слабенький, дребезжащий, как помехи на старом радио. Она была ранена, но не мертва. – Выглядишь как пакет с мусором, который переехала машина. Это твоя великая победа? Ты сломал свое тело, чтобы на пять минут заткнуть мне рот. Гениальный план. Что дальше? Начнешь биться головой о стену, чтобы не думать о том, какой ты ничтожный?»
Я не ответил. Я выключил воду, нашел в аптечке перекись и залил рану. Зашипела пена, выталкивая грязь. Еще одна вспышка боли. Я наклеил на колено кусок пластыря, самый большой, какой нашел. Это была моя первая боевая отметина. Мой первый коммит в репозиторий новой жизни.
Я доковылял до кухни, налил в кружку воды из-под крана и выпил залпом. Затем еще одну. Тело жадно впитывало влагу. На столе стояла банка с растворимым кофе. Я насыпал в пустую кружку три ложки, залил холодной водой и размешал. Получилась черная, горькая жижа. Я выпил и ее. Топливо. Низкооктановое, грязное, но топливо.
Вернувшись в комнату, я рухнул в кресло. Экран монитора, на котором был открыт диалог с «Нексусом», светился в полумраке, как портал в другой мир. В мир, где не было боли, грязи и крови. Только чистая, холодная логика. Мой вчерашний крик и его бесстрастный анализ висели в истории чата, как артефакт из прошлой эпохи. Эпохи, которая закончилась сегодня на рассвете, на мокром асфальте.
Я проигнорировал их. Я открыл новое окно терминала рядом. Слева – диалог. Справа – командная строка. Два инструмента. Скальпель и карта. Я вернулся к диалогу с «Нексусом». Мои пальцы, еще не до конца отошедшие от утреннего холода, легли на клавиши.
Продолжим. Тема: архитектура децентрализованной финтех-платформы «Аксиома». Задача: создание системы объективного скоринга, основанной исключительно на анализе данных, с минимизацией человеческого фактора. Требуется разработать базовую концепцию.
Я нажал Enter. Запрос ушел. Сигнал был послан.
«Архитектура мести, не иначе, – язвительно прокомментировала Сирена, понемногу приходя в себя. – Ты собрался строить Вавилонскую башню из своего говна и палок, Новиков. У тебя нет ни денег, ни команды, ни опыта. У тебя есть только твое раздутое эго и пустая папка на диске. Думаешь, разговор с чат-ботом это исправит? Ты просто ищешь новый способ прокрастинации. Создаешь иллюзию деятельности, чтобы не смотреть правде в глаза: твоя „Аксиома“ – это просто еще один способ красиво обосраться».
Я не стал ее слушать. Я смотрел на пульсирующее многоточие под моим запросом. «Нексус» думал. Он анализировал. Он структурировал. В отличие от меня. Мои идеи об «Аксиоме» были вихрем, туманностью, из которой только предстояло родиться звездам и планетам. Мысли роились не пчелами, а осколками взорванного жесткого диска – острые, беспорядочные, каждый содержал фрагмент данных, но общая картина была утрачена. Мне нужен был кто-то, кто поможет собрать эти осколки в единый массив. И машина подходила для этой роли идеально.
Появился ответ. Длинный, разбитый на блоки.
Концепция принята. Для начала разработки архитектуры необходимо определить ключевые сущности и модули системы. Предлагаю следующую иерархию для обсуждения:
1. Ядро (Core Engine):
Модуль сбора данных (Data Harvester).
Модуль предобработки и нормализации (ETL Unit).
Модуль скоринга (Scoring AI).
Модуль отчетности (Reporting API).
2. Интерфейсы (Interfaces):
Пользовательский интерфейс (Web/Mobile App).
API для сторонних сервисов (B2B API).
Административная панель (Admin Dashboard).
3. Инфраструктура (Infrastructure):
База данных (Database).
Брокер сообщений (Message Broker).
Кэширование (Caching Layer).
Предлагаю начать с декомпозиции Ядра. Уточните источники данных для модуля Data Harvester.
Я впился глазами в текст. Вот оно. Хаос начал обретать форму. «Нексус» не придумал ничего нового, это была стандартная архитектура для любой сложной системы. Но он сделал главное – он дал мне отправную точку. Он разбил огромную, неподъемную задачу «создать финтех-стартап» на маленькие, понятные, решаемые подзадачи. Он превратил монстра, от одного вида которого опускались руки, в серию боссов поменьше, каждого из которых можно было попытаться победить по отдельности.
Я начал печатать. Пальцы летали над клавиатурой, боль в теле отступила на второй план, вытесненная азартом.
Источники данных для Data Harvester:
1. Открытые банковские API (анализ транзакций, баланса, кредитной истории).
2. Данные из публичных государственных реестров (ФНС, ФССП).
3. Агрегированные данные от телеком-операторов (обезличенная геолокация, паттерны мобильной активности).
4. Социальные графы (анализ деловых связей через открытые профили, НЕ личная информация).
5. Собственные данные платформы (история использования, финансовые цели пользователя).
Ключевой принцип: полный отказ от субъективных данных. Никаких анкет с вопросами о семейном положении или образовании. Только цифры. Поведение. Факты.
«Бред, – тут же вклинилась Сирена. – Просто бред сумасшедшего. Ты хоть представляешь, сколько стоит доступ к этим данным? Какие нужны лицензии? Какие нужны юридические согласования? Ты собрался в одиночку построить систему, на которую у корпораций уходят годы и миллионы долларов. Ты даже не знаешь, с чего начать. Ты просто накидываешь умные слова, которые вычитал в статьях на „Хабре“. Ты – имитатор, Новиков. Дешевая китайская подделка под настоящего разработчика».
Ее слова были как дротики с ядом. И один из них попал в цель. Я действительно не знал, как получить доступ к большинству этих данных. Это был просто список желаний. Моя рука замерла над клавиатурой. Сомнение, холодное и липкое, поползло по венам. Она была права. Это невозможно. Затея была обречена с самого начала. Я просто трачу время.
Я посмотрел направо. На окно терминала. Мигающий курсор на черном фоне. Мой мир. Мир, где невозможное становится возможным, если ты знаешь правильные команды. Я вернулся к диалогу с «Нексусом».
Признаю потенциальные трудности с доступом к данным. На этапе MVP (Minimum Viable Product) предлагаю сфокусироваться на пунктах 1 и 5. Создать эмуляторы для остальных источников данных для тестирования архитектуры. Главное сейчас – не данные, а логика их обработки.
Я нажал Enter. И почувствовал, как что-то внутри щелкнуло. Я не сдался. Я не позволил сомнению парализовать меня. Я признал проблему и нашел обходной путь. Я сделал то, что делает любой разработчик каждый день: я нашел work-around. Я обошел препятствие, не пытаясь пробить его лбом.
«Нексус» ответил почти мгновенно.
Подход принят. Фокусировка на MVP является рациональной стратегией. Переходим к Модулю скоринга (Scoring AI). Опишите базовую гипотезу, которая ляжет в основу модели. Какой тип машинного обучения предполагается использовать?
Гипотеза. Вот оно. Самое сердце. Идея, ради которой все затевалось.
Базовая гипотеза: финансовая надежность человека определяется не его социальным статусом, а стабильностью и предсказуемостью его финансовых потоков и поведенческих паттернов. Человек с небольшой, но стабильной зарплатой, который регулярно откладывает 10% и не имеет просрочек по микрозаймам, более надежен, чем топ-менеджер с огромным доходом, но хаотичными тратами и жизнью в кредит. Система должна искать не богатство, а порядок.
Я остановился. Это была не просто техническая гипотеза. Это была моя философия. Моя вера. Я сам был тем человеком с небольшой зарплатой. И я верил, что порядок внутри моей головы, моя способность к самодисциплине, стоят больше, чем резюме выпускника престижного вуза. «Аксиома» должна была стать системой, которая сможет это увидеть. Увидеть меня. И таких, как я.
Я продолжил печатать.
Тип МО: ансамбль моделей. Градиентный бустинг для табличных данных (транзакции, баланс). Рекуррентные нейронные сети (LSTM) для анализа временных рядов (паттерны трат, регулярность поступлений). Модель должна быть полностью интерпретируемой (использование LIME, SHAP), чтобы избежать эффекта „черного ящика“. Каждый скоринговый балл должен иметь объяснение, на основе каких факторов он был сформирован.
«Ого, какие слова! – Сирена просто задыхалась от сарказма. – LSTM! SHAP! Ты хоть одну из этих моделей сам реализовывал с нуля, гений? Или только импортировал готовую библиотеку в Jupyter-ноутбуке на датасете „Титаник“? Ты лепишь Франкенштейна из кусков технологий, которых до конца не понимаешь. Эта хреновина рухнет под собственным весом еще до первого запуска. Твой мозг – это спагетти-код, Новиков. Одна большая функция main() с тысячей вложенных циклов и без единого комментария. Попытаешься что-то изменить – обрушишь все. И твой проект будет таким же».
Ее голос был громким. Она нашла мою уязвимость – синдром самозванца. Страх, что я недостаточно хорош, недостаточно умен, что я просто притворяюсь. Этот страх жил во мне всегда. Он заставлял меня по десять раз перепроверять каждую строчку кода, панически бояться код-ревью, избегать сложных задач.
Я закрыл глаза. Вдох. Выдох. Я почувствовал фантомную боль в разбитом колене. Я вспомнил холодный асфальт и тишину в голове. Та боль была настоящей. А этот страх… этот голос… это просто шум. Набор данных. Невалидный запрос, который нужно отфильтровать.
Я открыл графический редактор. И начал рисовать.
Я не был художником. Я был инженером. Моими инструментами были не кисти, а прямоугольники, ромбы и стрелки. Я начал визуализировать архитектуру, которую мы обсуждали с «Нексусом».
Вот прямоугольник «Data Harvester». От него стрелки к двум другим блокам: «Bank API» и «Platform DB». Дальше – большой блок «ETL Unit». Внутри него – более мелкие: «Validator», «Normalizer», «Enricher». Я выстраивал на экране логическую схему. Фабрику по обработке данных. Каждый блок, каждая стрелка, каждая подпись на своем месте. Это было похоже на медитацию. Я брал хаотичный рой идей из своей головы и прибивал их гвоздями к холсту цифровой реальности. Упорядочивал. Структурировал.
«Детский сад, – прошептала Сирена, но уже не так уверенно. Моя концентрация лишала ее сил. – Рисуешь квадратики. Думаешь, от этого твой код напишется сам? Ты просто играешь в серьезного архитектора. А на деле ты – ребенок, строящий замок из песка, который смоет первым же приливом».
Я добавил главный блок. «Scoring AI». От него шли две стрелки. В одну сторону – «Gradient Boosting», в другую – «LSTM». Они сходились в блоке «Ensemble Model». А оттуда – жирная, финальная стрелка к блоку «Final Score».
Я откинулся на спинку кресла и посмотрел на схему. Она была простой. Элегантной. Логичной. Это была карта. План будущей войны. Теперь я знал, где будут проходить основные сражения. Я видел свои цели. Я мог оценить их сложность. Монстр перестал быть бесформенным ужасом из темноты. Теперь у него было имя, анатомия, и я знал, куда целиться.
Я сделал скриншот схемы и отправил его «Нексусу» с короткой подписью:
Вот базовая архитектура Ядра. Принимается?
Пока машина анализировала изображение, я встал и подошел к окну. Солнце уже поднялось. Город проснулся. Внизу сновали машины, шли по своим делам люди-функции. Они спешили на свои работы в свои офисы, чтобы выполнять чужие задачи по чужим правилам. А я стоял здесь, в своей клетке-крепости на семнадцатом этаже, и строил свой собственный мир. Мир, который будет работать по моим.
Телефон «Нексуса» пискнул. Я вернулся к креслу.
Схема логически корректна и соответствует обсуждаемой концепции. Архитектура является масштабируемой и модульной, что позволит вносить изменения в отдельные компоненты без пересборки всей системы. Предлагаю утвердить данную схему как v0.1 и перейти к следующему этапу: выбор технологического стека для каждого модуля.
Утвердить. v0.1. Эти слова были музыкой. Моя идея, мой хаос, моя месть только что прошли первую валидацию. Пусть машинную, пусть бездушную. Но это было доказательство. Не мне, не Сирене. Это было доказательство для самой вселенной, что моя конструкция в принципе может существовать. Она не нарушает законов физики. Она не противоречит законам логики.
Я чувствовал дикую, первобытную радость творца. Ту самую, которую, наверное, чувствует программист, когда его код впервые компилируется без ошибок. Ту самую, которую чувствует бог, глядя на созданный им мир и видя, что он хорош.
Время растворилось в кофейном осадке на дне кружки и вязком гудении кулеров. Я перестал чувствовать пальцы, они стали продолжением клавиатуры, механическими молоточками, отбивающими синтаксис на наковальне редактора. Мы с «Нексусом» перешли к технологическому стеку.
Python для Ядра. FastAPI для API. PostgreSQL для базы. Redis для кэша. RabbitMQ для очередей. Docker для контейнеризации. Kubernetes для оркестрации. Каждое решение было выбором оружия. Я не просто выбирал технологии. Я выбирал экосистему, философию, сообщество. Я строил фундамент.
Сирена все еще была там. Она не сдавалась. Она сменила тактику. Теперь она не кричала, а методично, капля за каплей, точила камень моей уверенности.
«Ты выбрал FastAPI? А ты уверен, что справишься с асинхронностью? Ты же вечно путаешься в async/await».
«PostgreSQL? Она сложная в настройке. Взял бы что-то попроще, вроде MySQL, к чему привык».
«Kubernetes? Серьезно, Новиков? Ты собрался в одиночку управлять кластером? Ты хелло-ворлд на нем будешь деплоить неделю. Смешно».
Ее слова были разумны. В каждом из них была доля правды. Я действительно многого не знал. Я действительно выбирал технологии, с которыми у меня было мало опыта. Но я делал это сознательно. «Аксиома» не должна была быть удобной. Она должна была быть правильной. Она должна была быть построена на лучших, самых современных инструментах. Это был не просто проект. Это был мой университет. Мой тренажерный зал. Мой способ стать сильнее.
Я научусь. – отвечал я ей мысленно, не прерывая диалога с «Нексусом». – Я разберусь. Я потрачу на это неделю. Месяц. Год. Но я это сделаю.
И с каждым таким ответом ее голос становился все тише, все более незначительным. Она была голосом моего прошлого. Голосом страха и сомнений. А я строил будущее. В будущем для нее не было места.
День превратился в вечер. Я не ел. Я не спал. Я только пил воду и горькую кофейную жижу. На экране передо мной была уже не просто схема, а подробный технический документ. Десятки страниц, описывающих каждый модуль, каждый эндпоинт API, каждую таблицу в базе данных. План был готов. Детальный, выверенный, беспощадный. Архитектура моей маленькой личной мести была завершена.
Я откинулся на спинку кресла. Тело орало от боли и усталости. Глаза горели. Но в голове была звенящая, кристальная ясность. Я посмотрел на документ. На схему. На первую написанную вчера строчку кода: from core.logic import AxiomEngine. Теперь я точно знал, что будет скрываться за этими словами. Я видел всю конструкцию целиком, от фундамента до шпиля.
«Ну что ж, архитектор, – прошептала Сирена из самого темного угла сознания. Ее голос был едва слышен. Это был шепот призрака. – Бумажный тигр готов. Красивая картинка. А теперь попробуй это построить. Посмотрим, как быстро твой карточный домик развалится».
Я закрыл все окна, кроме одного. Пустой файл app.py. Мигающий курсор под той самой первой строкой.
«Я построю», – сказал я вслух. В пустой, темной комнате мой голос прозвучал твердо и незнакомо.
Я не знал, развалится ли мой домик. Может быть, она была права. Но это уже не имело значения. Процесс был запущен. И я собирался довести его до конца. Или умереть, пытаясь.
Я поставил курсор на новую строку и начал писать код. Настоящий код. Первую функцию моего будущего движка. И в этот момент я был абсолютно, безоговорочно счастлив.
Ритуалы выжившего
Будильник не звонил. Он детонировал. В 06:00:00 по системному времени мой смартфон извергал из своего динамика гитарный рифф, грубый и рваный, как край разбитого стекла. Не мелодия для пробуждения. Сигнал боевой тревоги. Skillet. «Monster». Каждый день одно и то же. Первые несколько секунд, пока сознание выныривало из вязкой, безsонной темноты, я не понимал, где я и кто я. Был только этот рёв, проникающий прямо в ствол мозга, и дикое, животное желание разбить его источник о стену.
Это было первое испытание дня. Не поддаться. Не нажать «отложить». Не умереть обратно в подушку. Я протягивал руку, нащупывал холодный корпус телефона. Пальцы не слушались, но я заставлял их провести по экрану, отключая демона. Тишина, которая наступала после, была оглушительной. И в этой тишине я слышал ее.
«Ну что, выживший? Готов к новому дню унижений? – Голос Сирены был едким, как кислота, но лишенным вчерашней силы. Он больше не гремел, а шипел, как пробитая шина. – Твои мышцы все еще кричат после вчерашней пытки? Давай, полежи еще. Заслужил. Ты ведь так стараешься стать кем-то другим. Но под этой новой прошивкой все тот же старый, дефектный процессор».
Я сел на кровати. Тело запротестовало. Каждая мышца, от икр до трапеций, была туго натянутым, ноющим канатом. Первые несколько дней я думал, что умираю. Теперь я знал этот язык боли. Это была обратная связь. Система сообщала мне, что вчерашние нагрузки были обработаны, и в мышечной ткани идет процесс компиляции новых, более сильных волокон. Боль была ценой апгрейда.
Я не отвечал ей. Спорить с ней было все равно что пытаться отладить продакшен, вставляя в код принты. Бессмысленно и непрофессионально. Ее нужно было не переспорить. Ее нужно было лишить среды выполнения.
На полу уже лежала одежда. Не та, в которой сплю. Та, в которой я сражаюсь. Старые шорты, компрессионная футболка, видавшие виды кроссовки. Я натягивал их на себя механически, как солдат, собирающий винтовку с закрытыми глазами. Каждый элемент ритуала был важен. Не было места для выбора, для сомнений. Выбор – это уязвимость. Это точка входа, через которую она могла запустить свой вредоносный скрипт. А у меня все шло по жестко прописанному сценарию.
Я вышел на кухню. Стакан воды. Никакого кофе. Кофеин будет позже, как награда, как допинг перед основной работой. Сейчас – только вода. Гидратация системы перед пиковыми нагрузками. Я стоял у окна, глядя на темные, спящие окна дома напротив, и пил мелкими, размеренными глотками.
«Смотри, как ты стараешься, – не унималась она. – Водичка, одежда по уставу. Думаешь, этот маскарад тебя спасет? Ты просто сменил одну тюрьму на другую. Раньше твоей тюрьмой была твоя комната и твоя ничтожность. Теперь это твое расписание. Ты не стал свободнее, Новиков. Ты просто стал своим собственным надзирателем».
В этом была доля правды. Но она не понимала главного. Это была моя тюрьма. Я сам спроектировал ее стены. Сам установил решетки. И сам держал ключи.
Я вышел на улицу. Холодный, влажный воздух ударил в лицо, заставив окончательно проснуться. Город еще спал, погруженный в сизый, предрассветный туман. Редкие машины проносились мимо, их фары вырывали из темноты куски реальности и тут же бросали их обратно в ничто. Я был единственным пешеходом в этом мире призраков.
Первые сто метров – всегда ад. Тело кричало. Легкие горели от первого же глотка холодного воздуха. Ноги были чугунными. Хотелось остановиться, сесть на асфальт и просто дышать. Сирена тут же включалась на полную.
«Вот оно! Видишь? Ты не можешь! Ты слабак! Твое тело умнее тебя, оно знает, что это самоубийство! Послушай его! Вернись домой, в тепло, в безопасность! Залезь под одеяло и признай, что ты просто кусок дерьма, который решил поиграть в спортсмена!»
Я бежал. Я продирался сквозь эту боль, как сквозь колючую проволоку. Я сосредоточился на ритме. Вдох через нос, выдох через рот. Шаг. Шаг. Шаг. Я считал шаги. Я слушал стук кроссовок по асфальту. Монотонный, гипнотический. Тук-тук. Тук-тук. Это был метроном моей новой жизни. Я отключал сознание, превращаясь в механизм. Левая нога, правая нога. Поршни, толкающие тело вперед.
Через километр боль меняла свою природу. Она переставала быть острой, разрывающей. Она становилась тупой, горячей, фоновой. Она была везде, но она больше не парализовывала. И тогда начиналось самое важное. Мой разум, освобожденный от ее ядовитого шепота, который тонул в реве крови в ушах и хрипе дыхания, начинал работать. Чисто. Быстро.
Пробежка была не тренировкой. Это была утренняя сборка мусора. Garbage collection. Весь ментальный хлам, накопившийся за ночь – обрывки снов, тревоги, сомнения – все это сгорало в топке физического усилия. Я думал об архитектуре «Аксиомы». В голове всплывала схема, которую я нарисовал. Я прокручивал в уме потоки данных. Вот запрос приходит на эндпоинт FastAPI. Он валидируется через Pydantic. Создается задача и отправляется в очередь RabbitMQ. Воркер, написанный на Celery, забирает задачу. Он обращается к модулю Data Harvester…
Я бежал и дебажил. Я мысленно писал код. Я видел узкие места. Вот здесь, на этапе обогащения данных, может возникнуть бутылочное горлышко. Нужно будет кэшировать запросы к внешним API в Redis. Я принимал решения, которые не мог принять вчера, сидя за столом, когда ее голос мешал сосредоточиться. Здесь, на асфальте, под низким серым небом, я был один на один с чистой логикой. Она пыталась пробиться, но не могла. Ее аргументы были слишком сложными, слишком абстрактными для этого первобытного состояния.
«Ты все равно ничего не сможешь… тебя никто не оценит… ты один…» – ее голос доносился откуда-то издалека, как радиостанция из другого города. А я думал о том, какой индекс лучше создать для таблицы с транзакциями, чтобы ускорить выборку. Моя реальность была конкретнее. Мои проблемы были решаемы.
Я пробегал пять километров. Каждый день. Финишная точка – большой дуб на краю парка. Последние сто метров я выжимал из себя все. Я ускорялся, превращая бег в агонию. Я хотел финишировать на пике боли, полностью опустошенным. Я добегал, хватался руками за колени, и несколько минут просто стоял, пытаясь не выплюнуть собственные легкие. Мир качался. В глазах темнело. Но в голове была тишина. Блаженная, абсолютная, выстраданная тишина.
Дорога домой была медитацией. Тело гудело от приятной усталоosti, эндорфины начинали свою работу. Я шел медленно, чувствуя каждую мышцу. Я замечал то, чего не видел раньше. Как первый луч солнца пробивается сквозь облака и окрашивает верхушки домов в розовый. Как дворник в оранжевом жилете медленно метет листья. Как пахнет мокрым асфальтом и озоном. Мир перестал быть враждебной декорацией. Он стал просто… миром. Набором объектов и явлений. Я перестал интерпретировать его, искать в нем угрозу. Я просто наблюдал.
Возвращение. Контрастный душ. Сначала горячая вода, расслабляющая мышцы. Потом – ледяная. Удар. Шок. Еще один способ заткнуть ее, если она пыталась вернуться. После душа я чувствовал себя так, будто меня собрали заново из новых деталей.
Завтрак. Всегда один и тот же. Гречка. Два вареных яйца. Большая кружка черного, горького кофе без сахара. Я ел медленно, сидя за пустым кухонным столом. Это было не наслаждение. Это была заправка. Я загружал в систему белки, углеводы и кофеин. Я смотрел в окно. Я не читал новости, не открывал соцсети. Мой телефон был инструментом, а не развлечением. Он лежал в комнате, на зарядке. Утром у него было свое время, у меня – свое.
«Ты превращаешься в робота, – шептала она, когда я мыл за собой тарелку. Ее голос был почти безразличным, констатирующим. – Ритуалы, правила, расписание. Где в этом жизнь, Новиков? Ты не живешь. Ты функционируешь. Выполняешь программу. И в конце дня просто выключаешься».
«Я и есть программа, – думал я в ответ. – И я сам себя пишу. Идет полный рефакторинг. Старые, неэффективные модули отправляются в утиль».
И потом начиналась работа. Восемь, десять, иногда двенадцать часов. С короткими перерывами, чтобы размять спину и залить в себя еще кофе. Мой стол был моим миром. Два монитора – два окна в единственную реальность, которая имела значение. Слева – окно с «Нексусом» и технической документацией. Мой штурман и моя карта. Справа – среда разработки. Мое поле боя.
Я писал код. Не так, как раньше. Не рывками. Не приступами вдохновения, сменяющимися неделями прокрастинации. Я писал его методично. Как каменщик, который кладет кирпич за кирпичом. Я брал одну маленькую задачу из плана, который мы составили с «Нексусом». Например, «Реализовать функцию валидации банковского счета». И я делал ее. Сначала писал тесты, которые заведомо проваливались. Красные буквы в консоли. 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. Товар добавлен в корзину. То есть, в рюкзак.
Я почти закончил. Оставался только кефир. Отдел молочной продукции. Холодный, пахнущий кисломолочной чистотой отсек в конце зала. Я уже протягивал руку к нужной бутылке, когда боковым зрением уловил движение. Что-то знакомое в силуэте, в том, как свет отразился от каштановых волос. Запрос на распознавание образа ушел в мой внутренний движок. И вернулся с результатом, который вызвал каскадный сбой всей системы.
Лена.
Она стояла в двух метрах от меня, спиной, и сосредоточенно изучала этикетку на баночке с йогуртом. На ней было простое серое пальто, на плече висела сумка. Она была абсолютно обычной. Не сияющим идолом с отфотошопленной страницы в соцсети. А настоящим, живым человеком, выбирающим йогурт в супермаркете. И от этой реальности удар был в тысячу раз сильнее.
Сердце пропустило такт, потом забилось с частотой перегруженного процессора, пытаясь обработать внезапный скачок напряжения. Дыхание застряло где-то в гортани. Мой отлаженный, аскетичный мир, моя крепость из ритуалов и кода, дал трещину. И в эту трещину хлынул весь хаос прошлого. Все стертые контакты, удаленные диалоги, заблокированные воспоминания – все это ломанулось обратно из архива, игнорируя любые файрволы.
Я замер, превратившись в статую с бутылкой кефира в руке. Моим единственным инстинктом было – не двигаться. Не дышать. Стать частью стеллажа. Слиться с фоном. Возможно, она меня не заметит. Возможно, она просто возьмет свой йогурт и уйдет.
Но она, словно почувствовав мой взгляд, обернулась.
Наши глаза встретились. Секунда. Может, меньше. Но в эту секунду уместился весь мой позор, все мои провалы, все ночи, проведенные за разглядыванием ее фотографий. Я увидел ее глаза. Они скользнули по моему лицу – по капюшону, по впалым щекам, по усталости, которая, наверное, была написана на мне, как лог-файл. В ее взгляде не было ничего. Ни узнавания, ни презрения, ни интереса. Пустота. Как будто она смотрела на полку с товаром, который ее не заинтересовал. Она просто перевела взгляд обратно на йогурты, сделала свой выбор и пошла в сторону касс.
Она не узнала меня. Или сделала вид. Второй вариант был еще хуже. Он означал, что я был распознан, классифицирован как «незначительный объект» и отброшен. Игнорировать – это активное действие. Это значит, ты существуешь, но твое существование решено считать нулевым.
Она прошла мимо. Легкий шлейф ее духов – что-то свежее, неуловимое – коснулся меня и тут же рассеялся в запахе хлорки. Я смотрел ей в спину. На ее уверенную походку. На то, как она достала из кармана телефон, что-то быстро набрала и улыбнулась экрану. Наверное, ответила кому-то. Тому парню. Тому, кто был за кадром.
И тут вернулась она. Сирена.
Она не шептала. Она не шипела. Она взорвалась в моей голове оглушительным, злорадным, торжествующим хохотом. Таким громким, что я физически пошатнулся, вцепившись пальцами в холодную полку, чтобы не упасть.
«А-ХА-ХА-ХА-ХА! НУ ЧТО, ВЫЖИВШИЙ?! ЧТО, БОЕЦ?! ПОСТРОИЛ СЕБЯ С НУЛЯ?! – ее голос гремел, как набат, сотрясая мой череп. – Ты видел?! ТЫ ВИДЕЛ ЭТО?! Она посмотрела на тебя, как на пустое место! Как на кусок грязи на полу! Вся твоя дисциплина, все твои пробежки, весь твой говнокод – все это превратилось в пыль в одну секунду! Пыль!»
Я стоял, вцепившись в эту бутылку кефира, как утопающий в обломок доски. Гудение холодильников слилось в один монотонный, сводящий с ума вой. Свет ламп стал невыносимо ярким. Мне казалось, что все в магазине смотрят на меня, видят, как я разваливаюсь на части.
«Ты думал, что-то изменилось? Думал, ты стал другим? – продолжала она свой триумфальный монолог, наслаждаясь каждым словом. – Ты нарастил пару килограммов мышц, чтобы прикрыть ими свою ничтожную душу? Какая жалкая попытка! Ты все тот же! Забитый, испуганный мальчик в дурацкой толстовке с капюшоном, который боится поднять глаза! Она даже не сочла тебя достойным того, чтобы скривить губы в презрительной усмешке! Ты для нее – просто шум. Помеха в эфире ее прекрасной, нормальной жизни!»
Я заставил себя разжать пальцы. Поставил кефир обратно на полку. Криво. Бутылка качнулась. Мне нужно было уйти. Немедленно. Выбраться из этого стерильного, освещенного ада. Я развернулся и пошел к выходу. Не к кассам. Просто к выходу. Рюкзак с гречкой и яйцами бил меня по спине. Бесполезный груз.
«Куда же ты, герой? А как же ритуал? – издевалась она. – Ты же сейчас сорвешься, правда? Придешь домой и нажрешься какой-нибудь дряни. Или, еще лучше, напьешься. Давай, сделай это! Покажи, чего на самом деле стоит вся твоя новая прошивка! Один неперехваченный exception – и вся система летит к чертям! И этот exception – это ты сам!»
Я вывалился на улицу. Дневной свет, даже такой тусклый, ноябрьский, ударил по глазам после искусственного освещения магазина. Я жадно глотнул холодного воздуха. Он не принес облегчения. Я шел домой, не видя дороги. Автопилот вел мое тело по знакомому маршруту, пока внутри бушевала гражданская война.
Сирена была права. Я хотел сорваться. Я хотел купить бутылку самого дешевого, самого крепкого алкоголя. Запереться в комнате, задернуть шторы и пить, пока реальность не растворится, пока ее голос не утонет в вязком, спиртовом тумане. Это был старый, знакомый скрипт. Проверенный способ обработки ошибок. Закомментировать проблемный блок и сделать вид, что его не существует.
Дома я бросил рюкзак на пол. Он упал с глухим стуком. Яйца, скорее всего, разбились. Мне было все равно. Я прошел в комнату и рухнул в кресло. Включил мониторы. Рабочий стол. Иконки. Код. Мой упорядоченный, логичный мир. Но сейчас он казался мне чужим и фальшивым. Насмешкой. Я смотрел на строки кода, на названия файлов – transaction_validator.py, risk_assessment_engine.py – и видел в них только бессмысленный набор символов.
«И для чего все это? – ее голос стал тише, ядовитее. – Ты думаешь, ей есть дело до твоего risk assessment engine? Ты думаешь, хоть кому-то в этом мире есть до него дело? Ты строишь свою цифровую песочницу, пока настоящая жизнь проходит мимо. Она сейчас придет домой, разберет покупки. Может, тот парень уже ждет ее там. Они будут ужинать, смеяться. А ты? Ты будешь сидеть и пялиться в свой черный экран, имитируя деятельность. Имитируя жизнь. Ты – симуляция, Новиков. Плохо написанная, глючная симуляция неудачника».
Я закрыл глаза. Ее слова были как гвозди, которые она методично вбивала мне в мозг. Я чувствовал, как рушится моя защита. Вся дисциплина, вся выстроенная за недели стена из тренировок и работы, рассыпалась в прах от одного ее взгляда. От ее пустого, безразличного взгляда.
Я открыл браузер. Пальцы сами потянулись набрать ее имя в поиске. Старый рефлекс. Наркоман, ищущий дозу. Я остановил себя в последний момент. Нет. Этого я не сделаю. Это будет окончательной капитуляцией. Я сжал руки в кулаки так, что ногти впились в ладони. Боль. Физическая боль. Она немного отрезвляла.
Весь день я просидел так. Неподвижно. В кресле. Я не мог работать. Я не мог есть. Я не мог даже думать. В голове был только белый шум ее злорадства и застывший в памяти образ – ее лицо с выражением полного безразличия. Я смотрел, как за окном сгущаются сумерки, как день медленно умирает. И вместе с ним умирала моя воля. Старый я, тот, из первой главы, тот, кто слушал Linkin Park на полной громкости, чтобы заглушить боль, поднимал голову. Он шептал: «Сдавайся. Это бесполезно. Ты проиграл».
Когда за окном стало совсем темно, я поднялся. Тело затекло, двигалось с трудом, как несмазанный механизм. Я не пошел на кухню за бутылкой. Я не лег на кровать, чтобы утонуть в жалости к себе. Я подошел к стулу в углу, на котором лежала моя беговая одежда.
«Что, опять? – Сирена фыркнула. – Решил снова устроить свой цирк? Думаешь, пробежка что-то изменит? Ты можешь бежать сколько угодно, но от себя не убежишь. Твоя ничтожность – это не лишний вес. Ее нельзя сжечь калориями».
Я молча переодевался. Шорты. Футболка. Кроссовки. Я зашнуровывал их с ожесточением, затягивая узлы так туго, что они впивались в подъем стопы. Это не была моя утренняя, ритуальная пробежка. Это было нечто другое. Это не было очищением. Это был акт самоистязания. Я не собирался убегать. Я собирался наказать себя. Выбить из своего тела, из своих мышц, из своих легких этот яд, эту униженность. Заменить душевную боль физической. Перебить один сигнал другим, более мощным.
На улице было темно и сыро. Моросил мелкий, противный дождь. Я не стал вставлять наушники. Сегодня мне не нужна была музыка. Сегодня моим саундтреком будет стук собственного сердца и хрип рвущихся легких.
Я побежал. Не так, как утром – размеренно, контролируя дыхание. Я рванул с места, как будто за мной гнались. Я вложил в первый же рывок всю свою ярость, все свое отчаяние. Холодный воздух обжег горло. Мышцы, не разогретые, не готовые к такой нагрузке, взвыли от протеста. Но мне было плевать. Пусть болят. Пусть рвутся.
Первый километр. Второй. Мой обычный утренний маршрут. Сирена все еще пыталась говорить, но ее голос тонул в шуме. В реве крови, стучащей в висках. В моем собственном сдавленном рычании, которое вырывалось с каждым выдохом.
Пятый километр. Моя утренняя норма. Тело умоляло остановиться. В боку кололо так, будто туда воткнули раскаленный прут. Но я не остановился. Я пробежал мимо своего финишного дуба и помчался дальше, в темноту парка, где не было фонарей.
«Стой! Идиот! Ты убьешь себя! – кричала она, но в ее голосе уже слышалась паника. Она теряла контроль. Этот уровень физического страдания был незнакомой для нее территорией. – Ты не выдержишь!»
Именно этого я и добивался. Я бежал на пределе. На грани потери сознания. Мир сузился до пятна света от далекого фонаря впереди и до разрывающей боли в груди. Я перестал быть Кириллом Новиковым, неудачником, которого не узнала девушка. Я стал просто телом. Машиной из мяса и костей, работающей на износ.
Седьмой километр. Девятый. Я уже не бежал, я волочил себя вперед. Каждый шаг был пыткой. Во рту появился привкус металла. Кровь. Дождь усилился, стекая по лицу ледяными струями, смешиваясь с потом. Я споткнулся, чуть не упал, но удержался на ногах. И побежал дальше.
На десятом километре что-то щелкнуло. Боль не ушла. Она достигла такого пика, что перешла в иное качество. Она стала фоном. Как гул сервера. И в этой выжженной болью пустыне внутри меня наступила тишина. Абсолютная. Сирена замолчала. Она не могла существовать в этом вакууме чистого физического страдания. Ее сложные психологические конструкции не выдерживали такого примитивного, животного ужаса.
Я остановился. Я не мог больше сделать ни шагу. Я согнулся пополам, упершись руками в колени, и меня вырвало. Желчью и водой. Я стоял под дождем, в темноте, и выплевывал из себя всю грязь этого дня. Когда спазмы прекратились, я выпрямился. Я был полностью, абсолютно пуст. Не было ни злости, ни обиды, ни жалости к себе. Ничего. Только гудящее от перенапряжения тело и звенящая тишина в голове.
Домой я шел, шатаясь. Дорога заняла вечность. Я принял душ, стоя под струями горячей воды и чувствуя, как она оживляет застывшие мышцы. Я не чувствовал себя победителем. Я чувствовал себя выжившим после авиакатастрофы. Контуженным, изломанным, но живым.
Я вышел из душа, вытерся. И сел за компьютер.
Было почти одиннадцать вечера. Руки слегка дрожали от усталости. Но голова была ясной. Кристально ясной. Той пустоты, которую я выстрадал на пробежке, хватило, чтобы смыть весь ментальный мусор.
Я открыл план проекта в своем таск-менеджере. Нашел самую сложную, самую ответственную задачу, которую я откладывал уже несколько дней. «Реализация модуля „Ядро транзакций“». Сердце «Аксиомы». Алгоритм, который должен был обрабатывать финансовые операции, обеспечивая их атомарность, согласованность, изоляцию и долговечность. ACID. Четыре буквы, за которыми скрывался ад из блокировок, параллельных запросов и обработки пограничных случаев. Ошибка в этом модуле означала бы потерю денег. Полный провал.
Идеальная задача для этой ночи.
Я налил себе самую большую кружку кофе, какую только смог найти. И начал работать.
Мир за пределами моих мониторов перестал существовать. Не было ни дождя за окном, ни тиканья часов, ни моего гудящего тела. Была только задача. Чистая, холодная, беспощадная логика.
Я начал с тестов. Я писал код, который описывал, как система должна упасть. Что будет, если придет два параллельных запроса на списание с одного счета? Что будет, если база данных откажет в середине транзакции? Что будет, если внешний API вернет ошибку? Я создавал цифровые модели катастроф. Я думал как Сирена, пытаясь найти все возможные уязвимости, все способы сломать мою собственную систему. Красные буквы FAILED множились в консоли.
А потом я начал писать код, который превращал эти красные буквы в зеленые.
Я погрузился в состояние, которое никогда раньше не испытывал. Это был не просто «поток». Это была ярость, переплавленная в концентрацию. Энергия унижения, страха и боли, которая весь день разрушала меня изнутри, теперь была направлена в одну точку. Она стала топливом для моего мозга. Я писал код не пальцами. Я писал его нервами.
Я строил архитектуру из транзакционных блоков, менеджеров контекста и очередей с повторными попытками. Я использовал блокировки на уровне базы данных, чтобы предотвратить состояние гонки. Я писал сложнейшие SQL-запросы, которые казались мне элегантными, как математические формулы.
Прошел час. Два. Пять. Я не замечал времени. Кофе в кружке давно остыл, я пил его, не чувствуя вкуса. Мои пальцы летали над клавиатурой. Щелк-щелк-щелк. Монотонный звук создания нового мира. Упорядоченного. Справедливого. Мира, где каждое действие имело предсказуемое последствие. Мира, где не было места для безразличных взглядов и несправедливой боли.
Когда за окном начало светать, окрашивая серый утренний туман в бледные, акварельные тона, я закончил.
Последний тест. Самый сложный. Симуляция высокой нагрузки с одновременным падением нескольких внешних сервисов. Я запустил его. И замер, глядя на бегущие по экрану строчки логов. Секунды тянулись, как часы.
А потом в консоли появилась финальная строка. Зеленая.
OK. Tests passed: 128. Failed: 0.
Я откинулся на спинку кресла. Тело было свинцовым. В глазах плясали цветные пятна от бессонной ночи и непрерывного взгляда в монитор. Я был выжат до последней капли.
Но модуль был готов. Самый сложный, самый важный модуль «Аксиомы». Он был написан. Он работал. Он был доказательством.
Я посмотрел на себя в темном экране монитора. На осунувшееся, измученное лицо с красными глазами.
Сирена молчала. Она проиграла. Я взял ее самую мощную атаку, принял весь урон на себя, переработал эту разрушительную энергию и превратил ее в самый прочный кирпич в основании моего нового мира.