Глава 9: Наследие Лабиринта

Воздух в основной зоне разработчиков HeroTech Solutions был густым не только от запаха переоцененного кофе и нестиранных худи. Он был густым от ужаса.

Фиона Ли, менеджер проекта, которая однажды успешно провела мирный договор между frontend- и backend-командами во время Великой Войны CSS-in-JS 22 года, стояла во главе конференц-стола. В руках у неё не было обычного планшета. В руках была физическая папка из мануилы.

«Команды, — сказала она, понизив голос до мрачного шёпота. — Совет принял решение. Пора перенести Alpha Core в облако».

Коллективный вздох пронёсся по комнате. Карлос Ривера, который был на середине глотка своего двойного эспрессо, поперхнулся. Он закашлялся, обрызгав тёмной жидкостью свою винтажную футболку «I Love PHP».

«Alpha Core? — выдавил Карлос хрипло. — Фиона, вы не можете быть серьёзны. Это не модуль. Это геологический слой! Документация к нему напечатана на матричной принтере! Парнем, который умер в 2004!»

«Погоди, — влез Лукас Харт, его глаза блестели опасным возбуждением человека, только что прочитавшего статью на Medium. — Alpha Core? Это же система, которая обрабатывает все расчёты процентов для всего legacy-банковского подразделения? Та, что по сути три макроса Excel, держащиеся за руки с Perl-скриптом?»

«Это больше, чем то, Джуниор Деваелопер Харт, — сказал Кай Накамура, его металлическая кожа отражала флуоресцентный офисный свет. Его голубые глаза закрутились, когда он обращался к историческим записям. — Alpha Core — это распределённый монолит, состоящий из 40% VBScript, 30% Perl и 30% чистой, неразбавленной злобы. Мои внутренние сенсоры детектируют 94.7% вероятность полного сбоя системы, если мы даже попытаемся git init в его директории».

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

Карлос повернулся к нему, его покрасневшие глаза дёргались. «Просто открой файл? Послушайте его! «Просто открой файл!» Кэндзи, у тебя в последнее время много удачи, но это не простой CI/CD-фикс. Это Лабиринт Миноса, только Минотавр — это null pointer exception, а нить сделана из спагетти-кода!»

Фиона шлёпнула стикер на стол — маленький, злобного вида мультяшный баг. «Совет хочет современную архитектуру. Microservices. Serverless. Kubernetes. Лукас, им понравилась твоя提案».

Лукас встал, сияя. «Я уже всё спланировал! Мы используем «SizzleFrame.io», новый реактивно-рекурсивно-квантовый JS-фреймворк, который ещё официально не запущен. Перепишем весь 50-тысячестрочный Perl-движок в 400 micro-lambda!»

Кэндзи вздохнул. «Это звучит как много работы для расчёта, который по сути просто principal * rate».

«Это не просто расчёт, Кэндзи! Это история!» Карлос хлопнул ладонью по столу. «Я пытался рефакторить логику interest-tier в 2015. Я провёл три дня внутри вложенного if, который был на двадцать четыре уровня в глубину. Я видел вещи… Я видел GOTO-операторы, которые вели к строкам кода в других файлах. Я видел глобальные переменные, которые шарились с драйвером принтера!»

«Задача простая, — сказала Фиона, игнорируя ПТСР Карлоса. — Кэндзи, ты лид по этому. Кай, ты ассистируешь. Лукас, ты предоставляешь «современное видение». Карлос… ты предоставляешь защитное снаряжение».


Через час команда стояла в Серверной, столпившись вокруг терминала, который выглядел так, будто принадлежит музею. Alpha Core не жил на основном сервере. Он жил на конкретном гудящем бежевом ящике в углу с надписью: DO NOT TOUCH (Srsly).

«Я подготовил миграционный скрипт, — сказал Лукас, открывая свой ноутбук. Он был обклеен стикерами фреймворков, которые существовали ровно три недели. — Запускаю протокол поглощения «SizzleFrame». Три, два, один—»

Лукас нажал Enter.

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

«Ошибка!» — крикнул Кай, его глаза вспыхнули красным. «Alpha Core отвергает модернизацию! Он интерпретирует JavaScript как вражескую инъекцию «ненужного блота»!»

На мониторе бежевого ящика начала извергаться зелёная текстовая прокрутка. Это не был код. Это был поток ASCII-арт черепов и предупреждений Perl из 1990-х.

WARNING: MY GLOBAL HASH IS ASCENDING. ERROR: SUBROUTINE 'CALCULATE_WEALTH' HAS ACHIEVED SENTIENCE. FATAL: EXCEL MACRO ENCOUNTERED AN UNHANDLED EXISTENTIAL CRISIS.

«Оно течёт!» — заорал Карлос, ныряя под стол. «Legacy-долг! Он материализуется!»

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

«Зависимости SizzleFrame слишком тяжёлые!» — закричал Лукас, его дорогой смарт-часы franticно пищали. «Система пытается NPM install весь интернет, чтобы компенсировать! Мы теряем соединение!»

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

«Спагетти-тон!» — воскликнул Кай, принимая оборонительную стойку. «Сенсей! Эта сущность состоит из 15 лет отложенного рефакторинга! Её уровень силы over 9000… строк на файл!»

Кэндзи шагнул вперёд, руки в карманах худи. Он посмотрел на визжащего, глючного монстра из бумаги и legacy-кода. Посмотрел на бежевый ящик.

«Это просто… бардак, — сказал Кэндзи».

«Кэндзи, назад!» — заорал Карлос из-под стола. «Ты не можешь просто «One-Review»нуть проявление исторической некомпетентности! Тут нужна комитет! Тут нужна трёхмесячная discovery-фазa!»

Спагетти-тон бросился вперёд. Он замахнулся массивной рукой из буквальных #ifdef-блоков на голову Кэндзи.

Кэндзи не двинулся. Он даже не вынул руки из карманов до самой последней секунды.

Тап.

Палец Кэндзи коснулся «груди» монстра — которая на самом деле была просто кучей неразрешённых JIRA-тикетов из 2008.

«Убери свой бардак, — пробормотал Кэндзи».

Он не использовал новый фреймворк. Не использовал 400 microservices. Даже библиотеку не использовал.

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

За эту секунду Кэндзи:

  1. Выявил circular dependency, вызывавший memory leak.
  2. Заменил 24-уровневый вложенный if на один hash-map lookup.
  3. Переписал Perl-движок в три строки чистого стандартного Python.
  4. Удалил макросы Excel. Все.

Спагетти-тон замер. Зелёный свет стал мягким, успокаивающим белым. Циклон из бумаги рухнул, листы безвредно fluttering на пол. Визжащие вентиляторы в бежевом ящике замедлились до тихого гула.

Экран терминала очистился.

Migration complete. Accuracy: 100.00%. Execution time: 0.0004ms. PR Status: Approved (1 Review).

Тишина заполнила серверную.

Лукас уставился на свой ноутбук. «Погоди… где SizzleFrame? Где microservices? Ты… ты просто использовал standard library?»

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

Карлос выполз из-под стола, челюсть отвисла. Он посмотрел на код на экране. Он был красив. Элегантен. Прост.

«Он… он просто повезло, — прошептал Карлос дрожащим голосом. — Система и так вот-вот крашнется. Он просто… коснулся её в тот самый момент, когда энтропия ресетнулась! Да! Точно! Удача!»

«Удача? — сказал Кай, franticно черкая в своём цифровом блокноте. — Карлос-сан, вы стали свидетелем «Single-Stroke Refactoring»! Сенсей не просто починил код; он заставил замолчать призраков наших предшественников!»

«Подумаешь, — фыркнул Лукас, закрывая ноутбук. — Если не в SizzleFrame, то это уже по сути legacy-код. Пойду напишу блог-пост о том, как мы успешно «leveraged human-centric intervention» для стабилизации ядра».

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

«Хорошая работа, Кэндзи, — сказала она. — Вот твоя наклейка».

Кэндзи взял стикер и прилепил на худи, не глядя. «Пончиков уже нет, да?»

«Ушли двадцать минут назад, — подтвердила Фиона».

Кэндзи вздохнул, ощущая тяжесть тысячи идеальных pull request’ов на плечах. «Как обычно».

Когда команда выходила, бежевый ящик издал один радостный бип. Впервые за пятнадцать лет Alpha Core обрёл покой.


Тем временем, в тускло освещённом офисе на верхнем этаже конкурирующего тех-гиганта, монитор ожил. Фигура в строгом костюме уставилась на дашборд, показывающий внезапный всплеск эффективности систем HeroTech.

«Alpha Core приручён? — прошипела фигура. — Невозможно. Ни один человек не может распарсить столько техдолга».

Он повернулся к тёмному углу. «Пробуди CodeGladiator. Пора геймифицировать их уничтожение».

«Один-Ревью Мен» пережил наследие прошлого, но «Организационная Меноу» будущего только начиналась.