Read the book: «Монолит»

Font::

Глава

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

Монолит

Глава 1. Приглашение

Дмитрий влетел в комнату и едва не снёс плечом косяк. До начала оставалось меньше минуты. Тяжёлая дверь общежития глухо хлопнула за спиной, и красный глаз HAL-9000 на старом постере дёрнулся в сквозняке, будто успел проводить его взглядом.

Он боялся только одного — опоздать.

— Чёрт… — тихо выдохнул он.

Дмитрий быстро пересёк комнату двумя широкими шагами. На ходу сбросил рюкзак на пол и почти упал на скрипучий стул перед письменным столом у окна.

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

Предыдущие обитатели нарисовали огромного кота в очках. Чуть ниже крупными буквами было написано:

«СДАШЬ АЛГОРИТМЫ — СДАШЬ ВСЁ»

Немного дальше поверх узора жирно красовалась надпись:

«НЕФРИТОВЫЙ ЖЕЗЛ»

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

У окна стоял старый письменный стол с облупившимся краем. На нём лежал ноутбук, рядом стояла кружка с давно остывшим чаем, а поверх стопки распечатанных листов была разложена тренировочная подборка задач.

На верхнем листе крупно было написано:

ICPC Regional Training Set — Problem H

Дмитрий резко открыл крышку ноутбука. Экран вспыхнул холодным светом и отразился в тёмном стекле окна.

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

Вектор

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

Под логотипом было написано:

Vector Nexus

Дмитрий кликнул.

Окно программы открылось почти мгновенно. В правом верхнем углу уже медленно пульсировал тёмно-красный огонёк. На долю секунды в центре экрана мелькнула строка:

Инициализация core-platform… Загрузка сервисов…

Затем текст исчез.

Интерфейс переключился на экран подключения. В левом верхнем углу светился логотип компании:

Вектор ↗

Внизу появилась строка:

Подключение к конференции…

Проверка устройства…

Синхронизация профиля…

Внизу интерфейса появилось сообщение:

Рады вас видеть, Дмитрий.

Ниже автоматически подтянулись строки:

Университет: Южный технический университет

Специализация: алгоритмы и структуры данных

ICPC: региональный финал

Мелким серым текстом было добавлено:

Профиль сформирован автоматически.

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

Красный огонёк в углу экрана медленно пульсировал.

Дмитрий прищурился. Красный круг показался ему странно знакомым — почти такой же смотрел на него со старого постера HAL-9000 на двери. Он усмехнулся.

— Ну конечно… — пробормотал он. — Кто только придумал сделать маскотом конференции искусственный разум, который не пускает Дэйва.

Он покачал головой.

— Дизайнеры. Что с них взять.

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

— Дмитрий, добрый день! Вы меня слышите?

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

— Простите. День длинный. Дмитрий?

— Да, здравствуйте… извините, я только подключился.

Анна улыбнулась — быстро, будто по привычке, но не совсем автоматически.

— Ничего страшного. Меня зовут Анна, я из команды рекрутинга Вектора.

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

— Я посмотрела ваш профиль. Финалист университетского этапа ICPC, победитель региональной олимпиады по программированию, несколько призовых мест на тренировочных контестах. Очень хороший результат.

Дмитрий немного неловко улыбнулся.

— Спасибо… стараюсь.

Анна кивнула и переключила презентацию.

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

Все эти схемы, дата-центры и ровные ряды экранов на слайдах выглядели гораздо более естественной средой для сложных алгоритмов.

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

Слайды сменялись один за другим: дата-центры, серверные залы, кампусы из стекла и бетона. Потом — столовые, кофейпойнты, спортзалы.

Дмитрий машинально посмотрел на пакет лапши на своём столе.

Следующий слайд назывался Ценности Вектора. Фразы звучали слишком уверенно, чтобы им совсем уж верить, но ровно настолько, чтобы захотеть оказаться по ту сторону этих слайдов.

Потом появился слайд конкретнее.

Развитие и обратная связь

— В Векторе действует система регулярной аттестации сотрудников.

Ежеквартальная оценка результатов.

Обратная связь руководителя и команды.

Индивидуальные траектории развития.

Внизу слайда мелким текстом было добавлено:

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

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

Дмитрий кивнул.

Он немного помедлил, а потом спросил:

— А кто будет руководителем команды?

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

Она переключила слайд.

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

Дмитрий тихо присвистнул.

— Звучит… масштабно.

Дмитрий хотел добавить: «и красиво», но не успел.

— Да, — согласилась Анна. — Но это одна из самых интересных инженерных задач в компании.

Следующий слайд.

Сложная схема из десятков блоков и стрелок.

— У Вектора тысячи сервисов, — сказала Анна. — Но многие из них выросли из одной большой системы.

На экране появился большой тёмный прямоугольник.

Подпись:

CORE PLATFORM

Анна чуть улыбнулась.

— Внутри компании её обычно называют просто… монолит.

Она пожала плечами.

— Инженеры любят простые названия.

Анна задумалась.

— Честно говоря, никто уже до конца не помнит, почему он называется именно так.

Она на мгновение отвела взгляд, будто вспоминая.

— Есть версия, что это слово появилось после одного из внутренних инструментов архитектурного анализа. Когда инженеры пытались автоматически разобрать зависимости системы, отчёт генератора почему-то озаглавил её одним словом — Monolith.

Анна усмехнулась.

— Название просто прижилось.

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

— Эта платформа работает уже больше пятнадцати лет и обеспечивает значительную часть внутренних процессов компании, — продолжила Анна. — Интересно, что за всё это время её ни разу полностью не останавливали.

Она задержала взгляд на схеме.

— Даже на обновлениях. Обычно мы просто переключаем часть трафика и смотрим, как система реагирует. У старых систем иногда появляется своя инерция. Потом уже не очень понятно, ты её обслуживаешь или просто стараешься не мешать.

Он посмотрел на схему ещё раз.

— А стажёры обычно попадают именно в эту команду?

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

Она улыбнулась.

— И мы хотим предложить его вам.

Дмитрий моргнул.

— Серьёзно?

— Абсолютно.

Она закрыла презентацию.

— Я отправлю вам детали на почту. И, Дмитрий…

— Да?

— Добро пожаловать в Вектор.

Связь в Vector Nexus тихо оборвалась. Экран потемнел.

Дмитрий ещё секунду сидел, глядя на монитор, потом открыл почту.

Новое письмо уже лежало там.

Vector Engineering Internship — Offer

Дмитрий улыбнулся. Похоже, его жизнь только что резко изменилась.

И только потом он заметил, что окно Nexus почему-то не закрылось полностью. В правом верхнем углу всё ещё медленно пульсировал тёмно-красный огонёк.

Он мигнул чуть ярче и снова стал тусклым, словно соединение всё ещё не закончилось.

Дмитрий больше не обращал на него внимания. Красный огонёк продолжал спокойно мигать.

Глава 2. Первый день

Стеклянные двери кампуса Вектора разошлись перед ним беззвучно.

Ещё вчера всё это существовало только на экране ноутбука: логотип, оффер, голос Анны, тёмно-красный огонёк в углу окна Nexus. Теперь Дмитрий стоял в настоящем холле компании и невольно замедлил шаг.

Холл был огромный и очень светлый. Пол из серого камня, высокие потолки, аккуратные ряды турникетов. За ними начиналась длинная стена из экранов, на которых медленно двигались графики, диаграммы и какие-то показатели.

Дмитрий прошёл через турникет и направился к стойке регистрации.

Девушка за стойкой подняла глаза.

— Соколов? — спросила она.

Дмитрий остановился.

Он не успел ни подойти к стойке, ни сказать ни слова.

— Да… — сказал он после паузы.

Ему показалось, что он что-то пропустил. Может быть, его имя было написано на пропуске? Но пропуска у него ещё не было.

Он машинально огляделся.

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

Он мигнул.

Дмитрий отвёл взгляд.

Девушка уже доставала из-под стойки белую коробку с логотипом компании.

— Ваш комплект сотрудника.

Она протянула коробку; та оказалась неожиданно тяжёлой.

Внутри лежали ноутбук, телефон, пропуск, синяя футболка с логотипом Вектора, кружка, блокнот и несколько листов со стикерами.

На внутренней стороне крышки было напечатано:

Build systems that move the world

Девушка улыбнулась.

— Поздравляю.

Она чуть наклонила коробку к нему.

— Теперь вы официально часть инженерной культуры Вектора.

Дмитрий кивнул.

— Спасибо.

Девушка жестом показала в сторону огромной стены экранов в конце холла.

— У нас принято показывать новым сотрудникам операционную панель компании.

Дмитрий поднял голову.

Вся дальняя стена холла была занята экранами. На них медленно обновлялись графики, диаграммы и какие-то аббревиатуры.

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

На первом экране крупно светилась строка:

ZBS — Zero Bug Score

0.000%

— Это показатель качества программных систем, — сказала девушка. — Количество обнаруженных дефектов в критических компонентах платформы.

— Ноль? — спросил Дмитрий.

— Именно, — кивнула она. — Мы очень гордимся этой цифрой.

Дмитрий только начал говорить, но следующий экран сменился почти незаметно.

TRASH — Total Reliability & Availability System Health

99.98%

— Это агрегированный показатель здоровья инфраструктуры: устойчивость сервисов, операционные риски, стабильность процессов.

Экран рядом обновился.

CHAOS — Corporate Health & Operational Stability

12.4

— Это интегральный индекс операционной динамики. Чем выше показатель, тем активнее система адаптируется.

Дмитрий кивнул, хотя не был уверен, что понял смысл фразы.

Последний экран выглядел особенно спокойным.

DISASTER — Distributed Incident Status & Event Response

0 active

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

— Любые? — переспросил Дмитрий.

— Абсолютно любые.

Дмитрий снова посмотрел на стену экранов. В другой обстановке он бы, наверное, усмехнулся над этим парадом аббревиатур, но здесь сначала почему-то хотелось понять, как всё это склеено.

Почти все графики были зелёными. Все показатели находились в «нормальной зоне».

Только в углу одного из экранов была маленькая строка:

Days since last catastrophic event: 0

Он моргнул.

Но экран уже обновился.

Девушка тем временем протянула ему пропуск.

— Ваш этаж шестой.

Она указала в сторону лифтов.

— Платформенная команда.

И снова улыбнулась.

— Добро пожаловать в Вектор.

Дмитрий вошёл в лифт и остановился перед панелью кнопок.

Он уже собирался нажать 6, но кабина мягко тронулась вверх сама.

На табло загорелась цифра 6.

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

На втором этаже лифт остановился.

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

Сотрудники продолжали разговор, словно лифт был просто продолжением коридора.

— …я тебе говорю, вчера навигатор опять предложил маршрут через реку.

— Через мост?

— Нет. Напрямую.

— Ну… оптимизирует.

— Видимо.

Лифт тронулся дальше.

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

— Ой, извините! — быстро сказал Дмитрий.

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

— Ничего.

Второй сделал глоток кофе.

— Сейчас робот приедет.

На табло загорелась цифра 3, лифт остановился, двери открылись, и из коридора тихо въехал круглый робот-уборщик — низкий, матовый, с вращающимися щётками и небольшим сенсорным куполом сверху.

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

Vector Autonomous MultiPurpose Intelligent Room Equipment

Ниже стоял инвентарный номер:

Unit 17

Робот замер, словно оценивая обстановку, затем подъехал к луже кофе и начал негромко жужжать, втягивая жидкость.

— Быстро реагирует система, — сказал Дмитрий.

— Да, — ответил один из сотрудников. — Иногда даже слишком быстро.

Робот аккуратно собрал кофе, немного покрутился на месте, будто проверяя результат, и выехал обратно в коридор прежде, чем двери закрылись.

Лифт продолжил движение.

Несколько секунд все молчали.

Потом один из сотрудников сказал:

— Кстати, у меня вчера погода в приложении показывала прогноз на 31 декабря 2099 года.

— И какая там погода?

— Облачно. Минус три.

Второй задумался.

— Ну… стабильно.

Он сделал ещё глоток кофе.

— А у меня вчера система прислала уведомление.

— Какое?

— «Спасибо, что были с нами».

— За что?

— Не уточнили.

Второй тихо хмыкнул.

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

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

— Может, это тест.

— Может.

— Или просто кто-то опять выкатывал обновление в пятницу.

Дмитрий вышел следом.

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

Один из сотрудников кивнул в сторону дальнего конца этажа.

— Платформенная команда там.

Дмитрий поблагодарил и пошёл в указанном направлении.

Чем дальше он шёл по коридору, тем больше вокруг становилось мониторов с графиками, логами и архитектурными схемами.

Почти на всех схемах линии в итоге сходились в один и тот же прямоугольник.

В центре диаграммы он был подписан коротко:

MONOLITH

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

— Платформенная команда? — спросил Дмитрий, заглянув за стеклянную стену.

— Да.

Человек кивнул, будто это и так было очевидно, и протянул руку.

— Саша.

Рукопожатие было коротким и уверенным.

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

— Иногда врёт, — сказал голос слева.

Саша слегка наклонил голову в сторону соседнего стола.

— Это Олег.

Высокий худой парень в наушниках снял один наушник и посмотрел на Дмитрия так внимательно, будто пытался понять, с каким типом задачи ему предстоит иметь дело.

— Привет.

— Привет.

Олег коротко кивнул и снова надел наушник.

— Он сейчас дебажит очередное проявление свободы воли монолита, — пояснил Саша.

— Я всё слышу, — сказал Олег, не оборачиваясь.

С другой стороны стола сидел ещё один человек, который выглядел немного старше остальных и держал в руках кружку с крупной надписью:

NO SILVER BULLET

Саша постучал костяшками пальцев по столу.

— Алексей.

Алексей поднял взгляд.

— А?

— Это Дмитрий. Новый стажёр.

Алексей задержал на нём взгляд чуть дольше, чем требовало знакомство, и кивнул.

— Добро пожаловать.

Он сделал глоток кофе, поморщился и только потом откинулся в кресле.

— Не бойся, — сказал он. — Первые пару лет тут тяжело.

Саша усмехнулся.

— Он шутит.

— Не особо.

Дмитрий невольно снова посмотрел на схему на стене.

— Это… вся система? — спросил он.

Саша тоже повернулся к стене и некоторое время рассматривал схему, будто видел её впервые.

— Нет, — сказал он наконец. — Это только часть.

Он указал на центральный прямоугольник.

— Вот это — монолит.

Дмитрий сделал шаг ближе.

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

SYSTEM STATUS: ACTIVE

UPTIME: 1843 days

SYSTEM AGE: origin 1994

Дмитрий машинально пересчитал в голове.

— Подождите… — сказал он. — Эта система старше меня.

И сам услышал в своём голосе почти уважение.

Саша кивнул.

— Ага.

— И всё ещё работает?

Олег снял наушник.

— В основном.

— Иногда даже правильно, — добавил Саша.

Дмитрий снова посмотрел на схему.

— А почему она называется монолит?

Саша пожал плечами.

— Тебе уже рассказывали версию про старый отчёт?

— Да, — сказал Дмитрий. — Что генератор сам написал MONOLITH.

— Ну вот, — сказал Саша. — Это самая приличная версия.

Олег добавил:

— Есть ещё версия, что кто-то так назвал директорию временно.

— И временно оказалось навсегда, — сказал Саша.

Алексей сделал ещё один глоток кофе.

— Как обычно.

Дмитрий снова посмотрел на дашборд.

UPTIME: 1843 days

— Её правда ни разу не останавливали? — спросил он.

Саша покачал головой.

— Полностью — нет.

— Иногда выключают куски, иногда запускают новые, иногда делают вид, что понимают, что происходит.

Олег повернулся в кресле.

— Но в целом она просто… работает.

Он кивнул на схему.

— Это главное свойство монолита.

Дмитрий задумчиво посмотрел на центральный прямоугольник.

MONOLITH

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

— Ничего, — сказал Саша. — Скоро Егор придёт и расскажет, как мы будем это всё переделывать.

Он ещё немного смотрел на схему на стене, потом хлопнул ладонью по столу и повернулся к Дмитрию.

— Ладно, давай начнём с простого.

— Сначала поставим тебе окружение.

Дмитрий поставил на стол свой новый ноутбук из комплекта новичка и открыл крышку. Экран загорелся почти мгновенно. На нём уже были корпоративный образ системы, логотип Вектора в углу, несколько предустановленных приложений и аккуратная папка Vector Dev Tools на рабочем столе.

Олег, не отрываясь от своего монитора, сказал:

— Да.

— Это самая простая часть.

Пауза.

Алексей тихо добавил:

— И самая длинная.

Саша наклонился ближе к экрану.

— У нас своя система контроля версий, — сказал он. — Называется Perverse.

— Почти как Perforce, — добавил Олег.

— Только хуже.

Саша сделал вид, что не услышал.

— Открой терминал.

Дмитрий открыл терминал. Чёрное окно с белым текстом выглядело почти слишком чистым на новом ноутбуке.

— Теперь открой корпоративную вики.

Через минуту на экране появилась страница с оптимистичным названием:

Developer Onboarding — Quick Start

Под заголовком шло три шага.

Установить Perverse CLI

Получить исходный код

Выполнить make install-dev

Саша кивнул.

— Видишь. Всё очень просто.

Он указал на строку команды.

perverse materialize monolith@internal.dev.vector

— Начинай.

Дмитрий набрал команду.

Терминал задумался.

Потом начал печатать строки.

Resolving workspace…

Syncing objects…

Receiving files…

Несколько секунд всё выглядело вполне нормально.

Потом терминал остановился.

ERROR: client spec not found

Дмитрий посмотрел на Сашу.

— Это нормально?

Саша вздохнул.

— А, да.

— Инструкция немного устарела.

Олег снял наушник.

— Немного.

— Года на четыре.

Саша открыл другой терминал.

— Сначала нужно создать workspace.

Он набрал несколько команд.

— Потом прописать клиента.

— И только после этого materialize.

Дмитрий снова запустил команду.

На этот раз синхронизация пошла дальше.

Receiving file 18432/91277

Receiving file 18433/91277

Receiving file 18434/91277

— Сколько там файлов? — спросил Дмитрий.

Олег ответил, не оборачиваясь:

— Никто точно не знает.

— Мы перестали считать несколько лет назад.

Саша пожал плечами.

— Монолит большой.

В этот момент дверь пространства команды открылась.

Внутрь зашла девушка с ноутбуком под мышкой.

Она остановилась у ближайшего стола и молча смотрела на экран Дмитрия, где терминал продолжал прокручивать тысячи строк.

Дмитрий заметил её не сразу. Поднял глаза и поймал спокойный оценивающий взгляд, будто она уже много раз видела подобные сцены и примерно представляла, чем всё закончится.

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

Она ещё раз посмотрела на терминал.

Потом на Сашу.

Потом снова на терминал.

— О, — сказала она.

— У вас новый человек ставит монолит.

Саша даже не повернулся.

— Ага.

Она перевела взгляд на Дмитрия и рассматривала его так внимательно, что ему стало немного неловко.

— Сочувствую, — сказала она наконец.

Дмитрий чуть растерялся.

— Спасибо.

— Лера, — сказал Саша, кивнув в её сторону. — Карты и навигация.

— Платформа карт и навигации, — уточнила она.

Она подошла ближе и наклонилась к экрану Дмитрия.

Терминал продолжал прокручивать строки.

— По инструкции? — спросила она.

— Да.

Она кивнула.

— Смело.

Олег добавил:

— Исторически.

Лера наблюдала за бегущими строками.

Потом сказала:

— Знаешь, как у нас говорят про монолит?

Дмитрий посмотрел на неё.

Она чуть улыбнулась.

— Если он работает — не трогай.

Пауза.

— Если не работает — тоже не трогай.

Олег тихо усмехнулся.

— Потому что тогда точно перестанет.

Лера снова посмотрела на терминал.

— Где оно упало?

— Пока нигде, — сказал Дмитрий.

Она спокойно кивнула.

— Подожди.

Вскоре терминал остановился.

ERROR: protobuf version mismatch

Лера коротко кивнула.

— Вот.

Саша уже открывал новый терминал.

— Сейчас поставим старую версию protobuf.

— В инструкции этого нет, — сказал Дмитрий.

— В инструкции много чего нет, — сказала Лера.

Саша быстро набрал несколько команд.

Сборка продолжилась.

Через несколько минут терминал вывел новую строку:

This may take a while...

Саша посмотрел на экран.

— Самое опасное сообщение в сборке.

— Почему? — спросил Дмитрий.

Олег ответил:

— Потому что после него обычно проходит полчаса.

Так и вышло.

Сборка шла ещё довольно долго.

Потом терминал снова остановился.

ERROR: missing internal certificate

Лера тихо усмехнулась.

— Классика.

Саша отправил ссылку в чат.

— Запроси сертификат здесь.

Пока система генерировала сертификат, Лера всё ещё стояла рядом и наблюдала за процессом.

— Первый день? — спросила она.

— Да.

Она посмотрела на него внимательнее.

— Тогда ты ещё оптимист.

Дмитрий не нашёлся, что ответить, и только улыбнулся.

Сертификат появился.

Сборка продолжилась.

Минут через пятнадцать терминал наконец вывел:

INSTALL COMPLETE

Саша удовлетворённо кивнул.

— Ну вот.

— Теперь у тебя есть рабочее окружение.

Дмитрий откинулся в кресле.

— А инструкция…

Саша закрыл страницу вики.

— А инструкция теперь твоя.

— В смысле?

Олег снова надел наушники.

— Ритуал посвящения.

Саша улыбнулся.

— Когда новый человек ставит окружение, он обновляет инструкцию.

Он кивнул на страницу.

— Чтобы следующий прошёл этот путь чуть быстрее.

Лера усмехнулась.

— Ненадолго.

Дмитрий открыл редактор страницы и начал переписывать шаги.

Сначала workspace.

Потом сертификат.

Потом protobuf.

Он сохранил страницу.

Саша посмотрел на обновлённую инструкцию.

— Отлично.

Олег сказал из-за монитора:

— Теперь она наконец рабочая. И именно поэтому скоро снова устареет.

Алексей тихо усмехнулся.

В терминале на экране Дмитрия продолжали медленно прокручиваться строки сборки.

Монолит устанавливался ещё на один компьютер.

Комната понемногу отходила от суеты. Кто-то вернулся с кофе; у доски спорили о каком-то SQL-запросе, рядом вполголоса материли сборку, которая снова решила проверить характер разработчиков. Дмитрий всё ещё сидел за своим новеньким ноутбуком, чувствуя странное удовлетворение после победы над make install-dev. Вики была обновлена, окружение наконец заработало, и мир большой компании пока выглядел вполне рациональным и даже немного элегантным.

Саша вдруг посмотрел поверх монитора в сторону стеклянной перегородки коридора.

— А вот и он.

— Кто? — спросил Дмитрий.

Олег, не отрываясь от экрана, ответил:

— Сейчас сам всё увидишь.

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

— Всем привет.

Несколько человек коротко кивнули.

Саша повернулся к Дмитрию.

— Егор.

Егор поставил ноутбук на стол, подключил кабель к экрану на стене и открыл презентацию. На экране появился чёрный фон.

HARMONY

Под надписью стоял аккуратный подзаголовок:

Platform Convergence Program

Егор сделал шаг назад, оглядел комнату и, убедившись, что все смотрят на экран, начал:

$1.89
Age restriction:
18+
Release date on Litres:
02 June 2026
Writing date:
2026
Volume:
220 p.
Copyright Holder::
Автор
Download format:

Similar books