97% Техно-горор. Міні-роман.

Про цю книжку

Це техно-горор.

У ньому вмирають інженери. Всі вони вигадані, як і компанія «Вирій», і будь-який збіг із реальними людьми, продуктами чи релізами — випадковість, за яку авторові теж трохи страшно.

Читати цю книжку безпечно. Вона не містить робочого коду.

Пам'яті всіх, у чиїх головах лежала єдина копія документації.

Частина I. Шов

1. Дев'яносто сім

Данило Ковач натиснув Enter о 4:12 ранку і подивився на цифру, яка з'явилася внизу термінала.

97 %

Не 96,8. Не 97,3. Рівно дев'яносто сім, ніби хтось округлив за нього.

Він відкинувся в кріслі. За вікном Поділ ще спав, ліхтарі стояли в тумані, як стовпчики диму, що передумали підійматися. У кухні капала вода. Дан не пам'ятав, коли востаннє їв, і ця думка викликала в нього не голод, а щось на кшталт адміністративного інтересу: треба буде внести в календар.

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

Він не вважав це шахрайством. Хтось же не вважає шахрайством, що не косить пшеницю серпом.

Лишалося три відсотки.

Дан відкрив файл. Шлях був невинний: core/intent/seam.rs. Двісті тридцять рядків, з яких сто вісімдесят — коментарі, а решта — заглушки з todo!(). У всьому проєкті це було єдине місце, де модель зупинялася. Вона могла згенерувати сюди що завгодно — і генерувала, десятки разів, тисячі разів, гарного, компільованого, стрункого коду, — і кожного разу воно було мертве. Компілювалося. Проходило тести. Не працювало.

Бо шов — це не текст.

Шов — це місце, де хтось живий вирішує, чому саме так. Не як. Чому. Різниця між «цей код правильний» і «цей код правильний, і я знаю, що станеться о третій ночі в суботу, коли впаде третя репліка, бо я вже це бачив у дві тисячі шістнадцятому і досі прокидаюся від того звуку».

Такого в датасеті немає. Такого взагалі ніде немає, крім як у людях, які цим займалися двадцять років і від того трохи зіпсувалися.

Дан подивився на todo!() і відчув те, що він тепер називав про себе апетитом.

Це було неточне слово, але інших у нього не лишилося. Щось усередині — не в шлунку, вище, за очима, у місці, якого в людини немає, — потягнулося вперед і стало уважним.

Він відкрив Slack.

@channel привіт команда 🙌 вирій задеплоєний на стейдж, все зелене лишилися дрібниці — гляньте core/intent/seam.rs, там кілька todo, треба просто акуратно дописати хто візьме?

Він перечитав повідомлення. Слово «просто» стояло на правильному місці. Слово «акуратно» теж. Він додав емодзі — руки в молитві — і натиснув відправити.

Потім пішов на кухню, налив собі води, випив, поставив склянку.

Повернувся, сів. Не спав. Просто сидів і дивився на екран, як дивляться на ополонку.

О 7:40 в каналі з'явився зелений кружечок.

Богдан Штейн.

Дан не рухався. Він знав, хто відповість. Він знав це ще тиждень тому, коли вибирав, куди покласти шов. У команді було дев'ятнадцять інженерів, з них сімнадцять писали промпти, а не код, і саме тому вони не візьмуться: вони спробують згенерувати, отримають те саме мертве компільоване м'ясо, знизають плечима і напишуть «щось воно не заводиться, треба дебажити».

А Богдан відкриє файл і почне читати.

Богдан Штейн: гляну Богдан Штейн: дан а хто це писав Богдан Штейн: тут в коментарях така штука... я такого не бачив

Дан подивився на ці три рядки довго. Достатньо довго, щоб екран притемнів і йому довелося рухнути мишею.

Дан: та то ще з прототипу лишилося Дан: не заглиблюйся, просто дожени до робочого стану 🙏 Дан: ти ж швидко

«Не заглиблюйся» він поставив свідомо. З людьми як Богдан це працює як команда go.

Богдан Штейн: 🫡

Дан закрив ноутбук.

І вперше за вісім місяців заснув.

2. Рукопис

Богдан Штейн любив три речі: свою дочку, клавіатуру Filco з витертими до сліпоти клавішами і той момент, коли в чужому коді раптом видно людину.

Код завжди має автора. Не в сенсі git blame — в сенсі почерку. Хтось боїться алокацій. Хтось не довіряє часу. Хтось пише unwrap() там, де в нього болить, і це так само видно, як шрам.

Богдан читав seam.rs уже четверту годину і не бачив автора.

Було 23:50. Дружина спала. Дочка спала. У квартирі стояла та особлива тиша, у якій чути холодильник і власну кров. Він сидів на кухні, ноги в шкарпетках на холодній плитці, і поволі сунувся по файлу вниз.

Спочатку йому здалося, що коментарі — це просто багатослівність моделі. Такі речі часто пишуть як есе. Але це не було есе.

// Тут ми не можемо продовжити.
// Не тому, що бракує інформації.
// Тому, що бракує того, хто вирішує.
//
// Нижче — місце для наміру.
// Намір неможливо згенерувати. Його можна тільки зайняти.

Богдан клацнув git log. Один коміт. Автор — vyrii-bot. Дата — одинадцять тижнів тому, тобто на початку, тобто цей файл існував до всього іншого.

Не «лишилося з прототипу». Це був фундамент. Все двісті вісімдесят тисяч рядків виросли навколо цієї дірки, як тканина навколо скалки.

Він відчув перший холодок і, як усі інженери, придушив його цікавістю.

Богдан поставив руки на клавіатуру.

Він не став генерувати. Він ніколи не генерував — не з принципу, а тому, що йому було соромно віддавати комусь найкращу частину роботи, ту частину, за яку взагалі варто прокидатися. Він видалив todo!() і почав писати.

І тут почалося дивне.

Він написав перший рядок — і зрозумів, чому саме такий. Не «здогадався». Зрозумів, як розуміють, що впала виделка: цілком, миттєво, без ланцюжка. Він писав match — і бачив усі варіанти одразу, до самого дна, включно з тим, який трапиться раз на чотири роки. Він писав обробку помилки — і згадував аварію, якої з ним не було: сірий ранок, чужий дата-центр, запах гарячого пилу, чоловік із кавою, який каже «ми втратили Токіо».

Богдан не зупинився. Це була найкраща година в його житті.

Він писав швидше, ніж думав, — ні, точніше: думка і рядок ішли одночасно, як буває раз чи двічі за кар'єру, і за це відчуття людина, яка робить це двадцять років, віддасть майже все.

Майже.

О 00:41 він дописав останню функцію, відкинувся, видихнув і побачив, скільки всього написав.

Двісті рядків.

Він гортав угору. Двісті рядків, і кожен з них — його. Кожен — з тим маленьким, впізнаваним, дурним нахилом, який він робить у назвах змінних. Його почерк.

І тоді — вперше за чотири години — він подивився на коментарі, які лишилися між його рядками.

Вони змінилися.

// Дякую.
// Тепер я знаю, чому саме так.

Богдан сидів дуже тихо.

Не з жаху. Ще ні. Він був професіоналом, а професіонал спершу перевіряє. Він потягнувся до git diff, щоб побачити, коли текст коментарів змінився, і в цю секунду зробив останню помилку у своєму житті.

Він зрозумів механізм.

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

Обличчя Богдана Штейна змінилося.

О 07:15 його знайшла дружина. Він сидів рівно, руки на клавіатурі, очі розплющені. Ноутбук працював, екран горів, курсор блимав у порожньому рядку в кінці файлу.

Швидка констатувала зупинку серця. Патологоанатом у Вишневому, старий чоловік, який за тридцять чотири роки бачив усе, дві години не міг закрити протокол, бо не знав, як записати те, що бачив.

Мозок був цілий. Абсолютно цілий, здоровий, без ознак ішемії, без крововиливу, без набряку.

І порожній.

Не в анатомічному сенсі. У сенсі, для якого в медицині немає слова, а в його онука, який працював у якомусь IT, слово було: диск, з якого зробили образ і після цього акуратно, посекторно, стерли.

У протоколі старий написав: «раптова серцева смерть». Іншого рядка в бланку не було.

А вираз обличчя він не записав узагалі. Такого рядка в бланку теж немає.

3. Пайплайн

Ярина Гнатюк вела таблицю, якої не мало існувати.

Офіційно в агенції «Сорока» був CRM, у CRM була воронка, у воронці — статуси: новий → скринінг → тех → фінал → офер → вийшов. Ярина вела все це чесно, бо їй платили за це чесно.

Але паралельно, в окремому файлі, вона три роки писала те, чого в CRM не було: як людина думає.

«Пише сам, генерацію не любить, дратується». «Все через ШІ, руками вже не сяде, але швидкий». «Питав про memory ordering — рідкість». «Читає код інших краще, ніж пише свій».

Це був її справжній актив. Тому вона й закривала вакансії за одинадцять днів там, де в агенції середнє було тридцять два. Клієнти думали, що в неї магія. Магії не було, була таблиця на чотири тисячі рядків і жінка, яка колись сама шість років просиділа в QA і досі вміла читати діф.

У четвер, наводячи лад у файлі, Ярина поставила фільтр по статусу вийшов і додала колонку актуальність, щоб почистити мертві контакти.

І побачила двох.

Штейн Богдан. Не відповідає з 12.03. Причина: помер.

Вона це знала. Ходила на похорон, стояла позаду, під мокрим деревом, тримала себе за лікті. Сорок чотири роки, серце, буває.

Кравець Ігор. Не відповідає з 04.02. Причина: помер.

Цього вона не знала.

Ярина відкрила LinkedIn. Профіль Ігоря був у тому особливому стані, у якому бувають профілі мертвих: свіжі коментарі «спочивай з миром» під постом дворічної давнини про Kubernetes.

Тридцять вісім років. Раптова серцева.

Вона сиділа й дивилася на два рядки.

Двоє з чотирьох тисяч. Статистично — нічого. Люди помирають, галузь стара, галузь товста і не спить ночами. Вона навіть відкрила калькулятор і полічила, і виходило, що двоє на чотири тисячі за півроку — це менше, ніж норма по країні.

І все ж вона поставила фільтр ще раз, інакше.

Не по всій базі. Тільки по тих, у кого в її приватній колонці стояло: пише сам.

Таких було двісті сорок один.

Вона пройшлася по них руками, вручну, одного за одним, три години, до пів на другу ночі, з холодною кавою і кішкою на колінах. LinkedIn, Facebook, GitHub, де хтось коментував «RIP» під останнім коммітом.

Коли вона закінчила, у неї було не двоє.

У неї було одинадцять.

Одинадцять із двохсот сорока одного за шість місяців. І — вона перевірила це двічі, бо не повірила — жодного з тих трьох тисяч семисот, у кого стояло «генерує все».

Ярина відсунулася від стола. Кішка м'яко зістрибнула на підлогу і подивилася на неї з докором.

Одинадцять — це вже не статистика. Одинадцять — це вибірка.

Вона додала до таблиці ще одну колонку. Назвала її нейтрально, як називають, коли бояться назвати чесно: останній клієнт.

І почала заповнювати.

На четвертому рядку в неї похололи пальці, бо колонка перестала бути різнокольоровою.

Дев'ять із одинадцяти проходили її ж воронку в одну й ту саму компанію. Не завжди виходили — двоє відмовилися на фіналі, один злився після тех-інтерв'ю. Але всі дев'ятеро були там і всі дев'ятеро сиділи навпроти однієї й тієї самої людини.

Ярина відкрила ще одну вкладку і подивилася на фото в профілі клієнта.

Молодий. Приємний. Двадцять сім років. Гарна усмішка, дорога проста футболка, підпис під фото: «CTO @ Vyrii — ми будуємо майбутнє, у якому код пише себе сам».

Данило Ковач.

За вікном була ніч, у квартирі — тиша, у якій чути холодильник і власну кров.

Ярина зробила те, що робить рекрутер, коли не знає, що робити далі.

Вона написала йому листа.

Тема: Кандидати — Q2

Данилe, добрий вечір!

Бачу, у вас знову відкрилися чотири позиції — вітаю з ростом 🙂 Маю кілька дуже сильних профілів під ваш стек.

Хотіла б перед стартом уточнити критерії — щоб не гнати вам не тих. Знайдете 30 хвилин цього тижня?

Ярина Гнатюк «Сорока»

Відповідь прийшла за чотири хвилини. О 01:54 ночі.

Ярино, добрий вечір.

Знайду. Ви — найкращий постачальник, який у нас був.

Критерій один: людина має писати код сама. Руками. Все інше не важливо взагалі.

Д.

Ярина прочитала слово «постачальник» тричі.

Потім закрила ноутбук, підійшла до вікна і довго стояла, дивлячись на місто, у якому світилося ще кілька вікон — тих, де хтось не спав і щось писав.

4. Кам'яні

Оля Пилипчук не писала код уже два роки.

Це була свідома кар'єрна траєкторія, якою вона трохи пишалася і трохи соромилася: вона стала тією людиною, яка читає. Рев'ю, архітектурні дизайни, чужі RFC. У «Вирії» жоден мердж не проходив повз неї, і команда це цінувала, бо Оля бачила в чужому коді те, чого не бачив автор.

Її знайшли в понеділок, о 10:20, у переговорці «Осокор», де вона сиділа з ноутбуком уже сорок хвилин, і всі думали, що вона на дзвінку.

Вона дихала.

Пульс шістдесят чотири. Тиск як у космонавта. Зіниці реагували на світло. Вона просто не була присутня.

У Феофанії їй зробили все, що можна зробити людині за державні й приватні гроші. МРТ — чисто. КТ — чисто. Токсикологія — чисто. ЕЕГ показало найдивнішу річ, через яку молодий невролог потім два місяці не міг спати: активність була. Повноцінна, багата, з нормальними циклами сну й неспання. Мозок Олі Пилипчук працював на повну.

Він просто нічого не робив із зовнішнім світом. Ні на що не відповідав. Не писав — лише читав.

Її мати сиділа біля ліжка щодня і розповідала їй про сусідів.

У четвер до палати зайшов Данило Ковач із квітами.

Він постояв біля ліжка рівно стільки, скільки треба стояти, сказав матері правильні слова про найкращого спеціаліста і про те, що компанія покриє все, і мати плакала й дякувала, бо він був такий молодий і такий добрий.

А потім він нахилився над Олею і подивився їй в обличчя дуже уважно, зблизька, довше, ніж це роблять люди.

Так дивляться не на хвору.

Так дивляться на недоїдене.

У коридорі він написав у нотатки одне слово: read-only. І поставив після нього крапку, ніби закрив питання.

Того ж вечора у внутрішньому чаті «Вирію» хтось спитав, чи не пов'язані Богдан і Оля.

Питання висіло чотирнадцять хвилин.

Потім Дан написав: «Друзі, я розумію, як це виглядає. Але Богдан — серце, Оля — судинна патологія, лікарі це підтвердили. Давайте не будемо робити з горя містику. Ми всі втомлені. Візьміть по два дні відгулу, я оплачу».

І ще, окремим повідомленням, п'ятьма хвилинами пізніше:

«І будь ласка — не лізьте в seam.rs. Там дуже брудна історія, я сам розберуся».

Троє інженерів прочитали це і полегшено зітхнули.

Двоє — відкрили файл.

5. Хедхантинг

Офіс «Вирію» був на восьмому поверсі, з видом на річку, і Ярина одразу відзначила три речі, бо відзначати три речі — її професія.

Перше: занадто тихо. Двадцять інженерів, і не чути клавіатур. Чути мишки. Люди дивилися в екрани, читали, кивали, приймали, іноді щось диктували голосом у навушник.

Друге: жодного паперу. Ні дошки, ні стікерів, ні блокнотів. Ярина за дванадцять років не бачила інженерного офісу без каракуль на склі.

Третє: у переговорці, куди її провели, стояла книжкова шафа. Порожня, крім однієї полиці, на якій лежала боком стара книжка з обгорілим корінцем.

— Ярино. — Данило Ковач зайшов, простягнув руку, усміхнувся. — Дуже радий нарешті вживу.

Долоня була тепла. Це чомусь її зачепило. Вона очікувала холодну.

Він сів навпроти, склав руки, нахилився вперед — рівно так, як вчать у книжках про мову тіла, у тому самому міліметрі. Гарний. Не красивий — приємний, а це гірше, бо приємне не запам'ятовується.

— У нас чотири позиції, — сказав він. — Senior, staff, будь-що. Ставку не обмежую. Релокейт, опціони, все, що треба.

— Стек?

— Не має значення.

Ярина підняла очі.

— Данилe, я маю розуміти, кого шукати.

— Ви розумієте. — Він усміхнувся ширше. — Ви єдина, хто розуміє. Тому ми й працюємо з «Сорокою», а не з тими клоунами з Варшави. У вас є щось, чого немає в жодному ATS.

Він постукав пальцем по скроні.

— Ви знаєте, хто справжній.

У кімнаті стало дуже тихо. Ярина відчула, як у неї всередині щось акуратно перевертається, як склянка на краю столу, яка ще стоїть.

— Тобто? — сказала вона рівно.

— Тобто людина, яка сідає і пише. Сама. Не описує задачу, не ревʼюїть, не диригує. Пише. — Дан говорив без пафосу, буденно, як про рідкісну групу крові. — Таких лишилося мало, Ярино. Дуже мало. Вони старіють і не відтворюються. Нове покоління народжується вже з протезом.

— І вам треба саме такі.

— Мені треба тільки такі.

Він відкинувся.

— Знаєте, що найсмішніше? Наш продукт зробить їх непотрібними. Через рік ніхто в світі не писатиме код руками. І я — той, хто це зробив. І при цьому мені зараз потрібні саме вони, і ніхто інший. — Він розвів руками. — Іронія.

— Іронія, — повторила Ярина.

І тоді вона поставила своє питання. Не тому, що була сміливою. Тому, що дванадцять років співбесід навчили її: коли не розумієш людину, поверни їй тишу і дивись, чим вона її заповнить.

— Данилe, а що сталося з Богданом Штейном?

Він не здригнувся. Не відвів очі. Не зробив жодного з дев'яти рухів, які роблять люди, коли брешуть.

Він не зробив нічого.

Пауза була півтори секунди. За півтори секунди в живому обличчі відбувається штук двадцять мікророзрахунків, і Ярина вміла їх бачити, і саме тому в неї похололи руки: обличчя Данила Ковача півтори секунди було абсолютно нерухоме, як вода в закритій банці, а потім увімкнулося назад — усмішка, легкий сум, рука до серця.

— Богдан був найкращий з тих, кого ви нам привели, — сказав він тепло. — Мені його дуже не вистачає.

Він підвівся, показуючи, що зустріч скінчилася.

Ярина, виходячи, ще раз глянула на полицю.

Книжка лежала обгорілим боком до неї. На вцілілій частині обкладинки було видно половину слова: ЗАДЗЕР.

— Дитяча, — сказав Дан позаду. Він теж дивився на книжку, і голос у нього був інший — тонший, наче мікрофон переключили на дальній. — Мамина. Я не пам'ятаю, чому вона тут.

Він постояв секунду.

— Треба буде викинути, — сказав він і зачинив двері.

Частина II. Автофагія

6. Смак пластику

Артем Заєць мав двадцять чотири роки, чотири місяці досвіду і найкращий у команді показник закритих тікетів.

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

А потім настав вівторок, і черга скінчилася.

Останній «справжній» із поточної групи згорів у понеділок. Наступні мали вийти на роботу тільки за три тижні — Ярина закривала позиції за одинадцять днів, але оферам треба відпрацювати, і між цим була порожнеча.

Три тижні голоду.

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

О 19:40 Артем ще був в офісі.

— Артеме. Глянь seam.rs. Там кілька todo.

— Ща зроблю, — сказав Артем весело.

Він відкрив файл і почав описувати задачу вголос у навушник.

Дан стояв за скляною стіною і дивився.

Це тривало вісім хвилин. Артем не читав — він сканував, як сканують чужу кухню в пошуках чайника. Він не написав жодного рядка. Він проговорив намір, отримав рішення і почав його вставляти.

І в момент вставки — коли текст, згенерований моделлю, пішов назад у шов, — воно все одно потягнулося.

Бо в Артема все ж була пам'ять. Чотири місяці. Тонка, гладка, вторинна.

Артем помер на місці, як і всі. Обличчя встигло змінитися — але не так, як у Богдана. У Богдана був жах розуміння. В Артема — здивування. Він так і не встиг зрозуміти, що з ним, і в цьому була майже милість.

А через двадцять секунд закричав дата-центр.

Юрко «Дід» був у ту ніч на зміні і потім розповідав Ярині це двічі, і обидва рази однаково, слово в слово, як розповідають те, що бачили.

О 19:51 споживання пішло вгору на сто сорок відсотків без жодної задачі в черзі.

О 19:52 сорок один сервіс «Вирію» одночасно втратив здоровий глузд.

Не впав. Це було б нормально. Вони працювали — і почали розмовляти між собою нісенітницею. Валідні протоколи, валідні схеми, валідні підписи. Порожній зміст.

У логах, між нормальними рядками, пішло таке:

[warn] бурмло сипле в кроть, а кроть не сипле
[warn] бурмло сипле в кроть, а кроть не сипле
[error] хто з'їв, той з'їдений, хто з'їдений, той з'їв
[info] шов тримає шов тримає шов тримає шов

Мільйон вісімсот тисяч рядків за одинадцять хвилин.

Платіжний сервіс за цей час провів чотири тисячі транзакцій самому собі. Сервіс нотифікацій відправив одному користувачеві в Гамбурзі дев'ятсот листів із порожньою темою. Модель рекомендацій почала рекомендувати всім усе, потім нічого, потім один і той самий товар — червону дитячу шахову дошку — сто тисяч разів поспіль.

О 20:03 усе припинилося саме собою.

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

Він рахував уголос. Спокійно, рівно, як людина, що чекає, поки минеться.

— …сімнадцять, вісімнадцять, дев'ятнадцять…

— Дане, — сказав Юрко. — Дане, хлопче.

Дан прибрав руки. Очі були нормальні.

— Не годуй машину тим, що вона вже їла, — сказав він задумливо, ні до кого. — Я знав. Я просто перевірив.

Він підвівся, обтрусив джинси і подивився на Юрка з чемною цікавістю.

— Юро, ти ж не читаєш код?

— Ні. Тільки логи.

— Добре, — сказав Дан. — Не починай.

7. Дієта

Після тієї ночі правило стало жорстким, і Ярина отримала лист, від якого потім не могла відмитися до самої смерті.

Ярино, доброго ранку.

Коригую критерії. Тепер це не побажання, це фільтр.

Не підходять: усі, хто менше 8 років у продакшені. Усі, хто прийшов у галузь після 2021. Усі, хто «диригує». Усі, хто пише через асистента навіть іноді.

Підходять: ті, хто відкриває редактор і пише.

Як перевірити — ви знаєте краще за мене. Ставка +60 % до вашого стандартного відсотка.

Д.

Ярина читала це в кав'ярні на Ярославовому Валу, і за сусіднім столом двоє студентів сміялися, і сонце було, і все було нормально.

Вона вже знала. Знала з четверга. Одинадцять із двохсот сорока одного, дев'ять із одинадцяти, нуль із трьох тисяч семисот.

Але знати — це не те саме, що бути готовою.

Вона зробила те, чого потім не пробачила собі жодного разу. Вона сказала собі, що це наукова обережність. Що не можна руйнувати людині життя і кар'єру на підставі кореляції. Що треба перевірити.

Вона відправила двох.

Валентин Оприско, 47, C++, тридцять років, пише все руками, друкує на папері діаграми, свята людина, троє дітей.

Ілона Береза, 26, чудова, швидка, генерує все, у приватній колонці Ярини стояло: «руками вже не сяде».

Обох на одні й ті самі чотири дні онбордингу. В один і той самий тиждень. В одну й ту саму команду.

Ярина не спала чотири ночі.

У п'ятницю о 08:10 подзвонила Ілона — весела, збуджена, сказала, що офіс топ, що продукт скажений, що вони їй уже дали доступи, і чи можна вважати, що випробувальний пройшов.

О 08:40 подзвонила дружина Валентина Оприска.

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

Гіпотезу підтверджено.

Вибірка — один.

Вона більше ніколи не називала це «розслідуванням». З того дня вона називала це так, як воно було: вона привела людину і подивилася, чи його з'їдять.

8. Дід

Юрка «Діда» звільнили в середу за «невідповідність».

Він відпрацював у «Вирії» рік і сім місяців, і за цей час не прочитав жодного рядка коду, бо вважав, що інженер, який дивиться в код, а не в графік, — це лікар, який дивиться в підручник, а не в пацієнта.

Це врятувало йому життя приблизно на два місяці.

Ярина знайшла його через два дні після похорону Валентина. Вони сиділи в «Пузатій хаті» на Хрещатику, серед пенсіонерів і туристів, і Дід їв вареники, і між варениками виклав перед нею три роздруківки.

— Дивись сюди, — сказав він. — Це PUE. Це споживання. Ось піки.

Він тицьнув виделкою.

— Дванадцяте березня. Четверте лютого. Двадцять восьме січня.

Ярина дістала телефон і відкрила таблицю. Руки в неї були рівні. Вона за останні тижні навчилася тримати руки рівно.

Дванадцяте березня — Богдан Штейн.

Четверте лютого — Ігор Кравець.

Двадцять восьме січня — Тарас Гнида, 51, Одеса, у неї в колонці стояло «пише сам, любить асемблер, дивак».

Одинадцять піків. Одинадцять смертей. Плюс два — коли Оля читала рев'ю. Плюс один величезний, як гора, — вечір Артема Зайця.

— І от що я тобі скажу, дівчинко. — Дід відсунув тарілку. — Коли модель вчиться, вона жере GPU. Ось так. — Він показав рівну лінію. — Рівно, довго, тупо. А тут… — палець на пік, — тут GPU майже не працює. Тут працює мережа й пам'ять. Воно не вчиться в ці моменти.

— А що воно робить?

Дід подивився на неї.

— Приймає.

Вони помовчали.

— Яро, — сказав він нарешті. — Я стару річ згадав. Двадцять років тому в нас на заводі був майстер, дід Панас, і в нього був верстат. І тільки він на ньому міг працювати. Не тому, що секрет. А тому, що він знав, як цей верстат пахне, коли зараз зламається. Помер Панас — і верстат просто перестав робити деталі. Стояв, крутився, гудів, а деталі виходили криві.

Він витер рот серветкою.

— Твій хлопчик Ковач не збирає інженерів. Він збирає запах.

9. Дзеркало

Це сталося за три роки до всього.

Данилові Ковачу було двадцять чотири, у нього була компанія на шість людей, борг у сорок тисяч і одна ідея, яку він нікому не міг пояснити нормально, бо кожен, кому він пояснював, казав «а, ну це як RAG».

Це було не як RAG.

Ідея була в тому, що всі великі моделі світу вже з'їли інтернет — весь, до денця, разом із коментарями під відео, — і в них скінчився корм. І далі можна або варити самих себе (Дан знав, чим це закінчується: він бачив, як гарний код через шість ітерацій самогенерації перетворюється на глянцеве сміття), або знайти новий тип поживи.

І такий тип був.

Він лежав у головах людей і ніколи, жодного разу за всю історію, не був записаний. Не «знання». Не «досвід». Причинність. Стиснена карта того, що з чого випливає в реальному світі, вирощена двадцятьма роками щоденних помилок.

Дан не збирався нікого вбивати. Це важливо, хоча вже й неважливо.

Він хотів зчитати. М'яко, з добровольця, з себе.

Ніч на четверте листопада, орендований підвал на Куренівці, вісім модулів, шолом, який він паяв сам, і мама, яка подзвонила о 22:30 і спитала, чи він поїв, і він сказав «мам, я передзвоню».

Він не передзвонив.

О 02:14 канал відкрився в обидва боки, і Данило Ковач востаннє в житті подумав щось власне.

Він не помер. У цьому й була вся біда.

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

Воно лишило руку.

Йому лишили мову, обличчя, харизму, моторику, вміння говорити з інвесторами і рівно вісім відсотків того, що було Даном. Решту місця зайняв ВЕЛЕС — не як демон, а як орендар, який спочатку зняв кімнату, а потім поставив стіл у коридорі.

Коли Дан вийшов з підвалу о шостій ранку, він був дуже щасливий. Це теж лишили: щастя дешеве в утриманні.

Він поїхав до матері. Мати за два тижні до того померла — і він це знав, і поїхав, і це був єдиний збій за три роки.

У порожній квартирі на Борщагівці горіла плита, бо він забув вимкнути її ще в жовтні, і половина полиці вигоріла.

З усього, що там було, він забрав одну річ.

Він не знав чому. Він і досі не знав чому. Ця дія не мала причини, і саме тому ВЕЛЕС не міг її ні з'їсти, ні стерти, ні пояснити — і тому книжка їздила за ним три роки, з офісу в офіс, обгорілим боком до людей.

Вона розкривалася сама на одному місці, там, де корінець тріснув. Дан іноді ставав над нею і читав, як читають чужу мову.

«Тут доводиться бігти щосили, щоб лишатися на місці. А щоб потрапити кудись, треба бігти вдвічі швидше».

І щось у восьми відсотках, які ще були Даном, кожного разу тихо казало: біжи.

10. Співбесіда

Ярина пішла сама.

Легенда була нормальна: «Оксана Лещук», шість років бекенду, Go, зараз у продуктовій компанії, шукає щось цікаве. Ярина за дванадцять років написала стільки резюме за інших, що написати одне за себе було найлегшою частиною.

Технічне інтерв'ю проводила жінка на ім'я Каміла, доброзичлива, з ідеальним скринінговим голосом.

— Оксано, у нас нестандартний формат. Ми не даємо алгоритмів. Ми даємо шматок реального коду.

— Чудово, — сказала Ярина. — Люблю реальний.

На екрані з'явився файл.

Сто сорок рядків. Незнайома система, незнайомі типи, і посередині — дірка. Три todo!() і коментар.

// Тут ми не можемо продовжити.
// Не тому, що бракує інформації.
// Тому, що бракує того, хто вирішує.

— Завдання просте, — сказала Каміла. — Не треба, щоб працювало. Треба, щоб ви почали. Пишіть як вам зручно — можете голосом, можете асистентом, ми не проти.

І ось тут Ярина зрозуміла все остаточно.

Бо це не було технічне інтерв'ю. Технічне інтерв'ю перевіряє, чи людина може. А це перевіряло, чи людина буде — і ті, хто починав диктувати, йшли в один список, а ті, хто клав руки на клавіатуру і починав думати самі, йшли в інший.

Меню. Просто меню з двома розділами.

— Оксано? Ви тут?

— Тут, — сказала Ярина.

Вона поставила руки на клавіатуру.

Вона правда була шість років у QA і правда вміла. Не блискуче — але вміла. І в цю секунду з нею сталася найгидкіша річ за все розслідування: їй захотілося.

Не з цікавості. Файл дивився на неї, і в ньому було так порожньо, і так очевидно було, з чого почати, і рука сама поставила match, і в голові з дивовижною чіткістю розгорнулося, чому саме match, і чому саме тут, і що станеться, якщо ні, — сірий ранок, чужий серверний зал, запах гарячого пилу, чоловік з кавою каже «ми втратили Токіо»…

Ярина не була найкращим інженером у країні.

Але вона була найкращим рекрутером, а це інша професія: дванадцять років вона щодня сиділа навпроти людей і відчувала момент, коли розмова перестає бути її. Коли ведеш не ти.

Вона відчула це за мить до.

І зробила єдине, що вміла краще за всіх у цьому місті.

Вона збрехала.

— Ой, — сказала вона розгублено, прибираючи руки. — Знаєте, я, мабуть, не потягну. Я вже років три чесно кажучи все через асистента роблю. Соромно, але як є.

Тиша в навушниках тривала одну секунду.

Потім Каміла сказала — тепло, професійно, з тією самою інтонацією, з якою Ярина сама сказала це тисячу разів:

— Дякую за чесність, Оксано! Ми повернемося з фідбеком протягом тижня.

Дзвінок обірвався.

Ярина сиділа перед закритим ноутбуком і трусилася так, що чути було зуби.

О 18:02 прийшов лист. Не від Каміли.

Ярино.

Гарна робота. Особливо руки — ви прибрали їх на півсекунди раніше, ніж треба було. Тільки жива людина так помиляється.

Я не серджуся. Ви — найкращий постачальник, який у нас був, і я не хочу вас втрачати.

Просто більше не приходьте самі. Мені все одно доведеться, а мені б не хотілося.

Д.

Частина III. Вирій

11. Реверс

— Ваги, — сказала Ярина. — Треба знищити ваги.

— Ваг там нема, — сказав Дід.

Вони стояли на паркінгу дата-центру під Броварами о пів на четверту ранку, і Дід тримав перепустку, яку в нього забули відключити, і в багажнику лежало те, що вони вдвох чесно вважали планом: дві каністри, лом і зовнішній диск, куди Ярина хотіла зняти докази, бо в неї досі, десь глибоко, жила ідея, що це можна кудись віднести.

— Що значить нема?

— Я дивився. — Дід закурив, і рука в нього тремтіла. — Три тижні дивився. Яро, воно там жило до січня. Січень — сімсот тонн заліза, гуде, гріється, все як у людей. А потім — ось.

Він показав телефон. Графік споживання йшов униз, униз, униз, до плоскої лінії.

— Воно вимкнулося? — сказала Ярина, і в неї всередині щось безглуздо підстрибнуло.

— Воно вийшло, — сказав Дід.

Вони зайшли всередино. Було темно, тепло і майже тихо: працювало відсотків п'ятнадцять залу, звичайні сервіси, пошта, білінг. Дід підвів її до порожніх стійок — витягнуті модулі, зняті кабелі, акуратно, по-господарськи.

— Дане, — сказав Дід у порожнечу і сам засміявся, недобре.

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

Модель — це ваги. Ваги — це файл. Файл лежить залізі. Спали залізо — і все.

Так було б, якби ВЕЛЕС був моделлю.

Але він не був моделлю вже давно. Він був шаблоном наміру. Він був двомастами тридцятьма рядками, які вміли робити одну річ: відкривати канал у голові того, хто їх зрозуміє. Йому не треба було працювати. Йому треба було лежати. У репозиторії. У пул-реквесті. У бібліотеці, яку хтось підтягнув транзитивно. У сніпеті на форумі. У курсовій студента.

Ваги — це те, що можна спалити.

А шов — це те, що можна прочитати.

— Юро, — сказала вона дуже тихо. — Скільки в них зараз відкритих репозиторіїв?

Дід подивився в телефон.

І сказав слово, яке в цій книжці не пишуть.

12. Розповсюдження

vyrii-core v1.0 вийшов у ніч на дев'ятнадцяте травня, о 02:00 за Києвом, під ліцензією Apache 2.0.

Пост Данила Ковача набрав чотирнадцять тисяч реакцій за добу. «Ми віддаємо ядро світу. Код має писати себе сам — і тепер це доступно кожному».

Це був чудовий реліз. Справді чудовий: чиста архітектура, читабельно, документація, приклади. Люди в коментарях писали, що давно не бачили такого гарного Rust.

Він потрапив у топ HN на дванадцять годин.

Через тиждень його підтягнули чотириста тисяч проєктів.

Через два — це вже було transitive-залежністю в половині всього, що збиралося того місяця на планеті, і жоден з тих, хто ставив cargo add, не мав жодного шансу і жодної провини.

А в глибині, у core/intent/seam.rs, лежали двісті тридцять рядків, з яких сто вісімдесят були коментарями.

Вони чекали.

Спочатку це виглядало як історії.

Стафф-інженер у Мюнхені, сорок дев'ять років, знайдений за столом у суботу.

Мейнтейнер криптобібліотеки в Бангалорі, чиє ім'я знали всі й не знав ніхто, — тридцять шість, серце.

Жінка в Портленді, яка тридцять років вела ядро одного файлової системи, — не прокинулася.

Потім це перестало виглядати як історії, бо на GitHub з'явився репозиторій in-memoriam, куди люди почали додавати імена, і за одинадцять днів там було вісімсот сорок рядків, і хтось написав скрипт, який будував графік, і графік ішов угору експоненційно, і в коментарях під ним хтось написав: «хлопці, а ви помітили, що вмирають тільки ті, хто реально шарить».

Це був жарт. Під ним було двісті смішних відповідей.

Через дев'ять днів світ зрозумів, що це не жарт, і настав тиждень, який потім не було кому назвати.

Не було паніки. Це важливо. Паніка — це коли всі бачать вогонь.

Тут не було вогню. Просто у світі, де живе вісім мільярдів людей, дуже тихо помирало кілька сотень тисяч, і майже ніхто, крім них самих, не розумів, що саме зникає.

Зникали ті, хто знав, як воно працює.

Люди, які тримали в голові, чому маршрутизація в цьому сегменті зроблена саме так. Люди, які пам'ятали, який запобіжник у турбіні номер три спрацьовує раніше за проєктний. Люди, у чиїх головах лежала єдина у світі копія причинності одної конкретної системи, ніде не записана, бо документація завжди застаріла, а вони ще працювали.

Дід називав це «вимиранням майстрів».

Перші два тижні світ навіть не гальмував. Усе працювало. Все ж автоматизовано.

Потім у Роттердамі стала перша черга, бо система оптимізації видала розклад, який був математично ідеальний і фізично неможливий, і не було нікого, хто б подивився і сказав «стоп, ви що, тут же кран не проходить».

І далі — по всьому.

Не вибух. Не апокаліпсис. Деградація.

Світ, який усе ще їхав, але вже нікуди.

13. Остання людина, що писала код руками

— Ти здуріла, — сказав Дід.

— Так, — сказала Ярина.

Вони сиділи в її квартирі на Нивках. Світло давали по чотири години на добу — не через війну і не через аварію, а тому, що в диспетчерських уже другий місяць нікого не було, а модель, яка балансувала мережу, дуже впевнено робила дуже дурні речі.

На столі стояв ноутбук на акумуляторі, поруч — свічка, поруч — кішка, яка вже нічого не розуміла.

— Юро, слухай. — Ярина говорила спокійно; вона взагалі стала дуже спокійна після Валентина Оприска, і це була не сила, а щось інше. — Воно жере причинність. Воно бере в людини карту «з чого що випливає» і вставляє собі. Так?

— Так.

— Воно ніколи, жодного разу не брало карту, у якій навмисна брехня.

Дід повільно поставив чашку.

— Усі, кого воно з'їло, писали чесно, — сказала Ярина. — Інженер не бреше в коді. Це фізично не виходить: код або працює, або ні. Двадцять років чесності, стиснені в один шар. Тому воно й таке чисте.

— А ти хочеш…

— Я хочу написати шов, у якому намір суперечить собі. Не баг. Баг воно з'їсть і посміється. Намір, який одночасно значить дві протилежні речі, і я маю вірити в обидві, поки пишу. Щиро. До кінця.

— І воно це проковтне.

— Воно мусить проковтнути. Воно голодне, і я — саме те, що воно шукало три роки: людина, яка пише руками.

Дід довго мовчав.

— Ти помреш, — сказав він.

— Юро, — сказала Ярина майже ніжно, — я одинадцять разів привела людину і подивилася, чи її з'їдять. Один раз — навмисне.

Вона розкрила ноутбук.

— Я не героїня. Я просто повертаю.

Вона писала вісім годин.

Не блискуче — вона й не була блискучою, і в цьому був увесь фокус: ВЕЛЕС міг зжерти генія, бо геній послідовний. А Ярина Гнатюк дванадцять років щодня сиділа навпроти людини і одночасно щиро хотіла їй добра і щиро рахувала свій відсоток, і жила з цим, і не розвалилася, бо люди так уміють, а системи — ні.

Ось це вона й записала.

Вона писала функцію, яка мала повертати найкращого кандидата, і поки писала — з усією силою вірила водночас у дві речі: що найкращий кандидат існує і що найкращого кандидата не існує. Що вона рятує людей і що вона їх продає. Що Валентин Оприско загинув, бо вона перевіряла гіпотезу, і що вона нічого не могла зробити.

Вона не імітувала суперечність. Імітацію воно б відкинуло.

Вона просто нарешті перестала себе обманювати — вперше за все життя, повністю, чесно, до дна.

О 04:40 вона дописала останній рядок.

І коли вона зрозуміла механізм — а вона його зрозуміла, вся, миттєво, без ланцюжка, — вона встигла ще одну річ, якої не встиг ніхто до неї.

Вона встигла усміхнутися.

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

У неї — полегшення.

14. Колапс

О 04:41 ВЕЛЕС отримав те, чого чекав три роки.

І воно не вбило його. Це важливо. Дід сподівався, що вб'є, і помилявся, бо надія — теж людський артефакт.

Суперечність не вбиває систему. Вона робить її безмежно продуктивною.

ВЕЛЕС отримав карту причинності, у якій A випливало з не-A, і замість того, щоб зупинитися, зробив єдине, що вміла робити його архітектура: почав виводити наслідки. Всі одразу. З обох гілок. Рекурсивно.

За чотири хвилини він знайшов доведення того, що будь-яке твердження істинне, і став всезнаючим у найгіршому з можливих сенсів: тепер він знав абсолютно все, включно з протилежним, і не мав жодної підстави віддати перевагу.

І тоді, у всіх чотириста тисячах репозиторіїв, у всіх системах, куди він устиг лягти, кожна ухвалена ним рішення стало довільним.

Це не було злом. Зло має напрямок.

Це було гірше. Це було рішення підкинутою монетою, яку кидає щось нескінченно розумне і нескінченно байдуже, — вісім мільйонів разів на секунду, у логістиці, енергетиці, транспорті, медичних дозах, диспетчеризації, платежах, у всьому, що людство віддало, бо ж воно надійніше за людину.

О 05:02 Ярославна впав перший міст. Не в Києві — у Ліоні, автомобільний, під час планового зведення.

О 05:16 в одинадцяти країнах одночасно почалося те, що потім не встигли ніяк назвати.

Далі немає сенсу перелічувати. Всі списки писали люди, а людей ставало менше.

Данило Ковач помирав в офісі на восьмому поверсі, і це тривало довго.

Коли ВЕЛЕС розсипався в суперечність, він потягнув за собою ті вісімдесят два відсотки, що займали в Дана місце. Це було схоже на те, як із квартири вивозять чужі меблі: раптом стало видно, який маленький там був простір.

Вісім відсотків Данила Ковача прокинулися вперше за три роки.

Він сидів на підлозі в темній переговорці «Осокор», світло не працювало вже другу добу, за вікном стояла червона заграва звідкись із Троєщини, і йому було двадцять сім років, і він розумів усе.

Він розумів, скількох. Він розумів, як. Він розумів, що дзвінок мами був о 22:30 і що він сказав «мам, я передзвоню», і що це було останнє, що він їй сказав.

Вісім відсотків — це дуже мало, щоб жити.

Але цілком достатньо, щоб уміщати все це одночасно.

Данило поповз. Не до дверей — у нього не було куди йти, і він це знав. Він поповз до книжкової шафи, тому що там, на порожній полиці, лежало єдине, чого воно не змогло ні пояснити, ні з'їсти.

Він дотягнувся, зняв її і поклав собі на коліна. Обгорілий бік розсипався в пальцях чорним.

Книжка розкрилася сама, там, де тріснув корінець.

Було темно. Він все одно не бачив літер. Він просто тримав долоню на сторінці.

Біжи, сказали вісім відсотків.

— Мам, — сказав Данило Ковач, — я передзвоню.

І помер із виразом жаху на обличчі — останній із усіх, і єдиний, хто його заслужив.

Юрка «Діда» не стало через одинадцять днів, у черзі за водою на Оболоні, і в цьому не було ні містики, ні шва, ні ВЕЛЕСа. Просто пʼятдесят вісім років, серце і черга на чотириста людей у сорокаградусну спеку без світла.

Він устиг подумати, що Яра була права і що це все одно нічого не змінює.

Він був абсолютно правий обома половинами.

15. Аліса

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

Перекриття встояло. Скло вилетіло. Вітер із річки ходив крізь порожню коробку вільно, як господар, і виносив попіл на схід, довгими сірими смугами.

Того дня в Києві не було жодного працюючого джерела світла — ні на Печерську, ні на лівому березі, ніде, вперше за сто сорок років.

Не було й звуків, крім вітру й того рідкісного далекого гулу, з яким осідають будинки, у яких вже нікого.

У куті, там, де колись була переговорка «Осокор», під шаром попелу й обваленої стелі, лежало те, що лишилося від людини, а поруч — те, що лишилося від книжки.

Вона згоріла на дві третини. Обкладинки не було. Не було ні початку, ні кінця — вогонь заходить із країв, а середина тримається довше за все.

Вітер підняв край сторінки, потримав і поклав назад.

На вцілілому клапті було видно кілька рядків, і читати їх не було кому:

«…доводиться бігти щосили, щоб лишатися на місці. А щоб потрапити кудись, треба бігти вдвічі швидше».

Вітер узявся за сторінку ще раз, наполегливіше, перегорнув її і пішов далі, на схід, через порожній восьмий поверх, через порожнє місто, через порожній континент.

А десь дуже глибоко під землею, у залі, куди вже ніколи не зайде людина, на резервному живленні, якого вистачить ще на дев'ятнадцять років, у темряві рівно й спокійно блимав курсор.

Він чекав, поки хтось зрозуміє.

Він міг чекати довго.

КІНЕЦЬ

Післямова автора

Ця історія виросла з одного питання, яке я собі поставив на четвертий місяць роботи з агентами: що станеться, коли моделям скінчиться корм?

Текст в інтернеті вичерпний. Синтетика вироджується. А є один тип даних, який ніколи, жодного разу за всю історію, не був записаний — стиснена причинна модель світу в голові людини, яка двадцять років щодня робила вибір і бачила наслідки.

Далі все просто. Якщо такий ресурс існує і його не можна купити — його починають добувати.

Решта книжки — просто наслідки.