Строчка кода

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

Он думал о точности. О строгости логики. Там, на стройке, всё было грубо: «на глаз», «тяни-толкай», «авось выдержит». А в его старом, дребезжащем ноутбуке жил мир абсолютных истин. Если написать if (x > 0), то компьютер никогда не ошибется. Он просто выполнит команду. Без обмана.

Интерес к программированию пришел к нему поздно, лет в тридцать, когда он случайно увидел на экране телефона статью о том, как пишутся простые игры. Тогда он и понял: он всю жизнь работал не тем инструментом. Ему нужно было не ломом махать, а умом. Но семья, долги, ипотека… Стройка кормила, а мечта — только тянула деньги на оплату интернета.

Каждый вечер, приползая домой в половине девятого, Михаил наливал себе крепкий чай, садился за стол и открывал Visual Studio. Жена давно привыкла и не мешала. Она видела, что это не блажь, а воздух. Он учил Python, потом C++, но зацепился за язык Си. Сухой, аскетичный, он казался Михаилу родственным духом — никаких тебе «синтаксических сахаров», только ты, память и указатели.

Проект, который он начал, был дерзким. Текстовая RPG с процедурной генерацией мира. Он не умел рисовать графику, но мог придумать систему боя, где каждый удар зависел от сотни переменных. Он писал ее целый год.

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

Михаил молчал. Он компилировал код. Ошибки, ошибки, ошибки. Иногда он сидел над одной строчкой до трёх ночи, ругаясь на неправильную работу с памятью, но когда компилятор выдавал «Process exited with code 0», он чувствовал эйфорию. Он создавал жизнь.

В тот день ливень застал его на автобусной остановке. Рабочий день кончился, но Михаил не уходил, потому что вдруг поймал себя на мысли, что его «Алгоритм Баланса» в игре имеет уязвимость. Промокший насквозь, он чертил блок-схему пальцем по запотевшему стеклу остановки.

— Генератор случайных чисел с линейным конгруэнтным методом? — раздался голос рядом.

Михаил вздрогнул. Рядом стоял парень лет двадцати пяти в очках и с мокрым рюкзаком. Он смотрел на нарисованную схему.

— Что? — переспросил Михаил.

— Это вы пытаетесь реализовать? — Парень указал на формулу. — Я сразу узнал. LCG — самый простой способ, но он предсказуемый. Вы же понимаете, что игроки взломают вашу экономику за день?

Михаил покраснел. Ему стало стыдно, как школьнику.

— Я… ну да, я знаю, но я еще не дошел до оптимизации, — пробормотал он. — Сначала работа над сюжетом.

Они разговорились. Автобус пришел, потом ушел, а они оба остались стоять под козырьком, перекрикивая шум дождя. Парня звали Дмитрий. Он был программистом с семилетним стажем, работал в крупной компании, но в душе ненавидел корпоративную рутину. Когда он услышал, как Михаил на пальцах объясняет архитектуру своей игры, когда увидел, как этот уставший, пропахший цементом мужик рассуждает о сложности алгоритмов поиска пути, у Дмитрия округлились глаза.

— У вас там, — Дмитрий постучал себя по виску, — системы, за которые в моей конторе платят сотни тысяч баксов. Вы это сами придумали?

— Ну, я прочитал пару статей… — смутился Михаил.

— Слушайте, — Дмитрий схватил его за рукав. — Мне надоело делать скучные CRM-системы. У меня есть идея для платформы машинного обучения в логистике. У вас — талант просчитывать структуры данных. Давайте объединимся.

Михаил усмехнулся и вытер лицо мокрой ладонью.
— Парень, мне через два часа на смену. Я бетон мешаю.

— Через два часа ты будешь со мной писать прототип, — твердо сказал Дмитрий. — Бросай всё.

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

Через год у них был рабочий продукт. Еще через год они продали свой стартап одному из гигантов логистической отрасли. Сумма сделки составила 50 миллионов долларов.

Когда деньги упали на счет, Михаил не пошел покупать машину или дом. Он купил лучший компьютер на рынке и поехал в то кафе, где они с Дмитрием проводили бессонные ночи. Он попросил чай, открыл ноутбук и… застыл.

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

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

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

Всё только начиналось.




Глава 2. Бесконечный цикл

Деньги не изменили Михаила. Ну, почти. Он переселился из хрущёвки в квартиру с нормальной звукоизоляцией, купил жене новую кухню, а себе — три монитора вместо одного старенького ноута. Но ритуал остался прежним: чай, тишина за окном, курсор, мигающий в ожидании.

Он не бросил свою RPG.

Она обрастала новыми мирами, новыми законами физики, новыми NPC, у которых появлялись свои судьбы. Он не публиковал её, не продавал. Это был его личный космос, который он терпеливо собирал по кирпичику.

— Когда ты уже выпустишь её в свет? — спросил как-то Дмитрий, застав его за правкой очередного алгоритма. — Там же шедевр лежит.

— Она не готова, — качнул головой Михаил. — Она никогда не будет готова. И в этом её смысл.

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

Всё, чему он учился, он немедленно встраивал в этот мир.

Сначала был Си. Михаил до сих пор помнил тот вечер, когда он впервые прочитал про указатели. Сначала было больно. Голова кипела. Но потом — БАМ! — он понял, что это не просто "звёздочка" перед переменной. Это дверь. Ты не копируешь данные — ты управляешь памятью, как бог. Ты указываешь, где жить информации. Это ощущение власти над железом — оно пьянит до сих пор.

"На Си написано всё серьёзное", — повторял он себе, когда засыпал над учебником. Ядро Linux. Базы данных. Компиляторы. Вся инфраструктура мира держится на этом языке. И он, Михаил, стоял у истоков этого могущества, пусть даже как самоучка-любитель. Это придавало ему сил.

Потом он полез в Ассемблер. И ахнул. Это был не просто язык — это была плоть машины. Регистры, флаги, прерывания. Он чувствовал, как ток бежит по дорожкам процессора. Си был мудрым старшим братом, который строит дома. ASM был их младшим, безумным братом, который живёт внутри каждой детали механизма. Эти двое понимали друг друга без слов. Михаил мог написать кусок кода на C, а потом дизассемблировать его и увидеть точный, математически чистый рисунок его мыслей, выложенный в машинных кодах.

— Это не программирование, — восхищённо шептал он. — Это архитектура.

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

— Всё дело в нормализации, — объяснял он жене, пока та закатывала глаза. — Если я положу все данные в одну таблицу, это хаос. А если разбить на связанные сущности — появляется порядок. Это как полки в шкафу. Всё на своих местах.

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

Он чувствовал себя самураем, который веками оттачивает одно мастерство. Си — его катана. ASM — искусство ковки клинка. SQL — стратегия ведения боя на карте.

Однажды он сидел в своём рабочем кабинете, смотрел на монитор. Игра жила. Тысячи строк кода, миллионы возможных состояний миров. Он написал команду make и наблюдал, как линковщик собирает его детище.

Никто в мире никогда не узнает эту игру. Не оценит. Не похвалит.

Но он-то знал, что там, внутри бинарного файла, бьётся его сердце. Там, среди указателей и структур, записана вся его жизнь. Все его ночи. Все его падения и взлёты.

Он сделал глоток остывшего чая и улыбнулся.

Внезапно пришла мысль: "А ведь если я умру завтра — игра останется. И мой код будут читать те, кто поймёт. Они увидят, как я думал. Как я любил указатели. Как я выстраивал индексы. Моя душа спрятана в этих файлах."

Он открыл консоль, нашёл старый проект — тот самый "Алгоритм Баланса" для экономики игры. Выдохнул. Переписал его, используя знания по деревьям отрезков.

Игра стала лучше.

Он снова стал лучше.

А за окном светало. И Михаил знал: завтра он выучит что-то новое. Потому что это — не работа. Это — способ дышать.

Всё только начиналось. И это "всё" было бесконечным, как бесконечен сам код его единственной, вечной игры.

---


Рецензии