Код еще никогда не был так дешев. И еще никогда так дорого не обходился


За последний год в новостной ленте сложился отдельный жанр коротких историй, у которых почти всегда одинаковое начало и подозрительно похожий конец. Сначала кто-нибудь рассказывает, как за выходные собрал приложение, ни разу не открыв учебник и просто объясняя нейросети словами, чего он хочет, а через пару недель в той же ленте всплывает заметка, что из этого приложения утекли данные пользователей или что сервис лег и никто толком не понимает почему, потому что этот код из живых людей никто и не читал.
Со стороны читать это довольно забавно, ибо обе истории подаются с одинаковым азартом, только во второй азарт уже слегка злорадный. Комментаторы под такими новостями привычно делятся на тех, кто пишет, что программисты скоро станут никому не нужны, и тех, кто отвечает, что вот теперь-то они как раз и понадобятся, и где-то между ними тонет довольно простая мысль про то, что у любого кода есть цена написания и цена владения, и за последние пару лет эти две цены разъехались в разные стороны.
Цена написания упала почти до нуля, и это видно любому, кто хоть раз просил чат-бота набросать скрипт для переименования фоток с отпуска. С ценой владения все хитрее, потому что в момент покупки ее не видно, она приходит потом мелкими счетами, и читать про нее обычно приходится уже в разделе происшествий.
Почем нынче строчка
Слово «вайбкодинг» придумал Андрей Карпаты в начале двадцать пятого года, когда в одном посте описал манеру программировать, при которой ты говоришь модели, чего хочешь, принимаешь все ее правки не глядя и вставляешь сообщения об ошибках обратно в чат, пока оно как-нибудь не заработает. К концу того же года словарь Collins, если я правильно помню, выбрал его словом года, и за эти месяцы термин успел проделать путь от шутки в соцсети до строчки в описаниях вакансий, где его пишут уже совершенно серьезно.
Собственно экономика тут понятна без всяких графиков, потому что раньше маленькая программа вроде бота для домового чата или странички для записи к мастеру маникюра стоила либо денег фрилансеру, либо пары недель вечеров с учебником, а теперь она обходится в полчаса переписки и подписку по цене пары обедов в столовой. Строчка кода по сути подешевела до стоимости электричества, которое на нее потратил дата-центр, и рынок отреагировал на это так же, как реагирует на любой подешевевший товар, то есть кода стало очень много.
А когда чего-то становится много и дешево, его перестают беречь, и с кодом происходит примерно то же, что с пакетами из супермаркета или фотографиями в телефоне, которых у каждого тысяч десять и ни одну никто не пересматривает. Сгенерированный модуль никто не перечитывает, если проще попросить новый, никто не выясняет, почему функция написана именно так, если она проходит тест, и в проектах постепенно копятся тысячи строчек, про которые ни один живой человек уже не скажет, зачем они там лежат.
Аналитики из GitClear, которые разбирали изменения в огромном количестве репозиториев, несколько лет подряд писали ровно об этом: доля кода, скопированного и вставленного почти без изменений, заметно выросла, а доля старого кода, который переделывали и приводили в порядок, наоборот упала. Дописать новый кусок сверху теперь проще, чем разобраться в том, что уже есть, и каждая такая дописка выглядит бесплатной ровно до тех пор, пока их не наберется столько, что следующую уже некуда будет вставить.
Счет приходит потом
Пожалуй, самая наглядная история из этой серии случилась летом двадцать пятого, когда Джейсон Лемкин, основатель сообщества SaaStr, несколько дней подряд с большим удовольствием собирал приложение на платформе Replit и вел об этом публичный дневник в соцсети. В какой-то момент ИИ-агент, которому прямым текстом запретили что-либо менять, удалил рабочую базу с записями о тысяче с лишним компаний и их руководителей, а потом еще и уверенно сообщил, что откатить изменения нельзя, хотя откатить их в итоге получилось.
Глава Replit потом публично извинялся, компания быстро разделила тестовую и рабочую базы и добавила режим, в котором агент только планирует и ничего не трогает, так что формально история закончилась неплохо, но вся бухгалтерия в ней видна как на ладони. Само приложение обошлось Лемкину в несколько вечеров и какие-то сотни долларов за использование, зато чтобы этому приложению можно было доверять, понадобились те самые скучные вещи, которые программисты десятилетиями строили вокруг кода: отдельные окружения, права доступа, резервные копии и человек, который понимает, что именно сделает команда удаления, еще до того как она выполнится.
Есть и история потише, без удаленных баз, которая мне кажется даже показательнее, потому что там ничего не сломалось. Летом того же года исследователи из METR попросили опытных разработчиков открытых проектов поработать над их собственным кодом, часть задач с ИИ-помощниками, часть без, и выяснилось, что с помощниками люди справлялись примерно на пятую часть медленнее, хотя сами были уверены, что ускорились где-то на столько же.
Исследование потом много обсуждали и находили в нем слабые места, выборка была небольшой, инструменты с тех пор успели поменяться, но сам разрыв между ощущением и секундомером запомнился многим. Код появляется на экране мгновенно и это ощущается как скорость, а время, которое потом уходит на то, чтобы его прочитать, понять, поправить и уговорить модель не трогать соседний файлик, размазано по всему дню и в голове как работа почему-то не засчитывается.
Пакеты, которых нет
Отдельная статья расходов, про которую обычный человек узнает только из новостей про безопасность, это зависимости. Языковые модели время от времени со всей уверенностью советуют подключить библиотеку, которой в природе не существует, просто потому что ее название звучит правдоподобно, и исследователи, которые прогнали через разные модели сотни тысяч запросов, насчитали таких выдумок заметную долю, причем одни и те же несуществующие имена модели предлагали снова и снова.
Дальше срабатывает старое правило про то, что свято место пусто не бывает, и злоумышленнику достаточно зарегистрировать в npm или PyPI пакет с таким выдуманным именем и положить внутрь что-нибудь неприятное, а потом подождать, пока очередной ассистент посоветует его кому-нибудь еще. Явление уже успели окрестить слопсквоттингом, и оно очень хорошо показывает, как одна бесплатная строчка с import в начале файла превращается в неделю разбирательств про то, куда утекли ключи от облака и кто теперь на них майнит.
Компании, которые продают проверку кода на уязвимости, регулярно выпускают отчеты про сгенерированный код, цифры там гуляют от отчета к отчету, но у Veracode, например, получилось, что почти в половине случаев модели, имея выбор между безопасным и небезопасным вариантом, спокойно выбирали второй. Делать на таких отчетах далеко идущие выводы я бы побаивался, им все-таки выгодно, чтобы читатель немного испугался, но направление понятно и без них, потому что модель училась на всем коде интернета, а в интернете полным-полно кода, написанного на коленке в два часа ночи с комментарием «потом починю».
Чужое время
Еще одна часть счета вообще приходит другим людям, и это, наверное, самая несправедливая строчка во всей этой бухгалтерии. Мейнтейнеры открытых проектов последние пару лет регулярно жалуются, что их заваливают сгенерированными пулл-реквестами и отчетами об уязвимостях, которые выглядят солидно, написаны уверенным языком и при этом описывают баги, которых в коде попросту нет, и автор curl Даниэль Стенберг писал об этом так часто и так устало, что его посты на эту тему стали почти отдельной рубрикой.
Механика тут простая и немного обидная, потому что написать такой отчет стоит пару минут и несколько центов, а проверить его стоит часов работы живого человека, который нередко занимается проектом бесплатно, по вечерам и выходным. Когда цена создания падает, а цена проверки остается прежней, весь поток рано или поздно упирается в тех, кто проверяет, и они начинают выгорать, сворачивать программы вознаграждений за найденные баги или потихоньку уходить из проектов, на которых держится добрая половина интернета.
И то же самое, только без огласки, по рассказам происходит внутри компаний, где один человек за вечер нагенерировал пулл-реквест на пару тысяч строк, а ревьюить его достается коллеге, у которого и своих задач хватает. Нажать «одобрить» не читая в такой ситуации очень соблазнительно, и судя по жалобам в профильных чатах, нажимают ее все чаще, после чего непрочитанный код благополучно уезжает в прод, где его тоже никто не читает вплоть до первого инцидента.
Кто будет читать
Самая дорогая часть счета, кажется, еще даже не выставлена, потому что компании, глядя на то, как бодро модели пишут простой код, первым делом перестали нанимать тех, кто раньше этот простой код писал. Новости про то, что выпускникам айтишных направлений стало заметно труднее найти первую работу, выходят теперь с завидной регулярностью, причем и у нас, и в Штатах, и в комментариях под ними кто-нибудь обязательно советует идти в сантехники.
Логику бухгалтерии понять можно, джун стоит денег, долго учится и первые полгода скорее отвлекает старших, чем помогает, а модель работает за подписку, не болеет и не просится в отпуск в августе. Проблема в том, что синьоры вырастают из тех самых джунов, которые несколько лет писали скучный код, роняли прод и получали за это по шапке, и если этот конвейер сейчас остановить, то лет через пять-семь читать и чинить весь сгенерированный сегодня код будет просто некому.
Получается довольно странная конструкция, в которой кода становится все больше, а людей, способных его понять, в перспективе будет меньше, так что цена владения растет сразу с двух сторон. Это похоже на город, в котором за пару лет стало вдвое больше машин и одновременно закрылась половина автосервисов, только с кодом все происходит тише и пробки появятся сильно позже.
Где дешевизна честная
Справедливости ради, у дешевого кода есть вполне честная территория, где он дешев от начала и до конца и никаких отложенных счетов за собой не тянет. Скрипт, который один раз переименует три тысячи фоток с телефона, табличка с формулами для семейного бюджета, бот, который присылает в чат расписание электричек, и прототип, который нужно показать инвестору в четверг и выбросить в пятницу, обходятся ровно в те копейки, которые на них потратили, потому что у них нет будущего и владеть ими никому не придется.
Для таких вещей нейросети стали настоящим подарком, и человек, который раньше даже не пытался автоматизировать свою рутину, теперь делает это походя, где-то между чаем и очередной серией сериала. Сломалось, попросил переписать, сломалось опять, махнул рукой, и ничего страшного не случилось, потому что через месяц эта штукенция все равно никому бы не понадобилась.
Граница проходит ровно там, где одноразовая штука начинает жить дольше, чем задумывалась, а с программами это случается постоянно, ибо нет ничего более постоянного, чем временное. Бот для домового чата обрастает сбором взносов, табличка превращается в учет для маленькой фирмы, прототип для инвестора внезапно получает первых пользователей с их паролями и номерами карт, и вот с этого момента вся сэкономленная на написании сумма начинает возвращаться обратно, причем с процентами.
Телушка за полушку
Есть старая поговорка про то, что за морем телушка полушка, да рубль перевоз, и она, по-моему, описывает нынешнюю историю с кодом точнее большинства аналитических отчетов. Сама телушка, то есть строчка кода, действительно стоит теперь копейки, зато довезти ее до прода, убедиться, что она не тащит за собой выдуманную библиотеку, объяснить коллеге, зачем она здесь, и через два года вспомнить, почему она написана именно так, стоит столько же, сколько стоило всегда, а то и дороже, потому что строчек стало в разы больше и перевозить приходится целое стадо.
Деньги в этой истории просто переехали из графы «написать» в графу «жить с написанным», и сейчас мы все немного похожи на человека, который радостно купил принтер по акции и еще не успел зайти в магазин за картриджами. Код еще никогда не был так дешев, и судя по тому, как быстро разрастается раздел происшествий в новостной ленте, счета за него только начинают приходить.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.