Добавить в корзинуПозвонить
Найти в Дзене
ZDG

О текущем состоянии вайб-кодинга

Ситуация в ИИ-отрасли меняется с такой скоростью, что надо бежать, чтобы оставаться на месте. Ещё недавно можно было глумиться над т.н. вайб-кодерами, которые, не имея профессиональных навыков программиста, пытались заставить нейросетку выдать законченный продукт. Тогда казалось, что это какой-то тупик, просто баловство. Если бы не одно существенное обстоятельство. Нейросети сами по себе это крайне сложный и высокотехнологичный продукт. Люди, которые их придумали и внедряют, вообще-то очень умные и образованные. А умные и образованные люди, когда видят проблему, начинают искать её решение – и находят. Потому что, ещё раз, они умные. Мы по-прежнему имеем дело с LLM – большими языковыми моделями. Языковые модели умеют составлять слова в предложения. Нет, они не умеют думать, не умеют анализировать, у них нет личности. Какими бы разумными ни казались их ответы, это просто автодополнение текста, усовершенствованный вариант T9 с миллиардами параметров. Врождённые ограничения большой языково
Оглавление

Ситуация в ИИ-отрасли меняется с такой скоростью, что надо бежать, чтобы оставаться на месте.

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

Тогда казалось, что это какой-то тупик, просто баловство. Если бы не одно существенное обстоятельство.

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

Что не изменилось

Мы по-прежнему имеем дело с LLM – большими языковыми моделями. Языковые модели умеют составлять слова в предложения. Нет, они не умеют думать, не умеют анализировать, у них нет личности. Какими бы разумными ни казались их ответы, это просто автодополнение текста, усовершенствованный вариант T9 с миллиардами параметров.

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

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

Что изменилось

Как я уже написал выше, умные люди увидели проблему и занялись её решением.

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

От спецификаций к тестам

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

Что делается вместо этого:

Пишутся конкретные подробные спецификации. Например, утрированно, я даю задание не просто написать игру про зелёных человечков, а WebGL-игру на JavaScript, с видом сверху, с размером карты 128*128 клеток, с перемещением из клетки в клетку, и т.д.

То есть, когда я пишу подробные спецификации, я уже как бы пишу часть продукта. Нетрудно проследить, что если сделать спецификации максимально подробными, вплоть до того чтобы описать каждое состояние программы, то мы фактически полностью опишем саму программу, в декларативном стиле. Её только останется перевести в код, что модели будет сделать уже значительно проще (как и нам самим).

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

Тогда в чём польза? Где обещанный вайб-кодинг, чтобы вкалывали роботы?

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

LLM может сгенерировать огромное количество кода. Чтобы понять, рабочий это код или нет, надо привлекать человека. Но человек с этим не справится (кода очень много). Проблема решается и здесь – пишутся тесты.

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

Однако же, кто будет писать все эти тесты? Ответ уже можно предугадать – их тоже может написать LLM.

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

То есть мы имеем дело уже с "агентным инжинирингом". Мы управляем командой LLM-агентов, где у каждого есть своя роль, и все они ограничены жёстко заданными правилами.

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

Подводные камни

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

Далеко не всегда полученный результат удовлетворителен. В частности, недавно прошла новость о том, что какой-то блогер написал себе движок для блога на 37000 строк, и по этому коду оттоптались просто все, настолько он был плохой и неэффективный – это настоящий нейрослоп, но он работает. Так что даже 100-процентное покрытие тестами не означает, что код получится хороший.

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

Хоть я и не полностью верю в перспективы развития LLM, можно сказать лишь одно – нейросети из программирования уже никуда не денутся. Пузырь там или нет, лопнет он или нет, это уже неважно. Важно то, что парадигма программирования сместилась навсегда. Начался новый мир. Это уже не какой-то сопливый вайб-кодинг, а, можно сказать, промышленный стандарт. Плохо это или хорошо? С моей точки зрения, отдалённые последствия могут оказаться очень плохими. Но так или иначе, со временем всё как-то устаканится и станет обычной реальностью.

Когнитивный долг и нейровыгорание

Одна из главных проблем вайб-кодинга заключалась в том, что написать код легко, но поддерживать его потом (исправлять ошибки, вносить новый функционал) в разы труднее. Модель быстро запутывается, нужен человек, который разбирается. А так как человек не писал этот код, он тоже не знает, что делать. Это называется "когнитивный долг". Выглядит опасно в перспективе, когда у компаний будет появляться огромное количество кода, в котором никто не сможет разобраться. Но по сути, разбираться в нём и не надо. Если требуется что-то изменить, то надо во-первых изменить спецификации, а во-вторых тесты, и модель просто перегенерирует весь код с нуля, и он опять получится рабочий. В этом случае всем становится наплевать, видел человек этот код или нет.

Хотя конкретно в данной ситуации с точки зрения бизнеса всем наплевать, реальные проблемы могут возникнуть гораздо позже и совершенно внезапно. Например, когда систему управления ядерным реактором доверят писать LLM. С этим мы столкнёмся через 5-10 лет.

Рядом идёт проблема нейровыгорания. Многие отмечают, что LLM дали им невиданную свободу в реализации своих задумок. То, о чём раньше они только мечтали, теперь стало достижимым всего лишь за день. Это чистый наркотик: волна эйфории, затем абсистенция. Усугубляется всё тем, что оно доступно везде – вы можете запускать агентов прямо с телефона, сидя на скамейке в парке. Ваше личное время размывается, у вас формируется зависимость ­– если что, это не голословные утверждения, а непосредственные признания от самих зависимых. Их много, они не исключения. Это тенденция, которую нельзя игнорировать.

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

Куда податься бедному программисту?

Если вы программист, то возможность обычного кодинга пока ещё существует в некоторых местах и в некоторых отраслях. И в основном это такие места, где руководство не может либо не хочет платить за использование LLM (или вообще не в курсе о них), а следовательно, не будет особо много платить и вам. Но хотя бы что-то.

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

Даже если вы находитесь в полном отрицалове по отношению к LLM, поймите одну простую вещь – ничего уже не изменить. Можно игнорировать, считать себя умнее, смеяться, глумиться, но поезд уходит. Да, пузырь лопнет, да, какие-то ИИ-компании разорятся, но ничего никуда не денется.

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

Ваши гитхабы и литкоды уже никому не интересны.

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

И те, и другие: прямо сейчас думайте над запасным вариантом работы (сварщик, грузчик, курьер...) Может, он вам и не понадобится, но лучше, чтобы у вас был план Б.

Крепитесь!