🕵️♂️ Ни для кого не секрет, что сейчас многие программы пишутся с использованием больших языковых моделей (LLM). У этого явления есть свои особенности, некоторые из которых удалось понять за пару месяцев написания своей библиотеки.
⚠️ Во-первых, это история совсем не про "напиши мне программу, которая ...", скорее про отдельные несложные модули порядка 100 строк или ручную замену каждой отдельной строки во время рефакторинга. Главное тут — четкое понимание того, что и зачем делает код. Если человек, далекий от разработки, сумел сгенерировать и запустить полурабочий MVP калькулятора, это еще не значит, что "программисты не нужны".
♻️ Важно понимать, что любая языковая модель оперирует статистикой. Она не "понимает" ваш код в привычном смысле, а генерирует наиболее правдоподобное продолжение, как T9 в телефоне. И качество этой генерации зависит от множества факторов, оно уникально в каждой конкретной модели. Имеет смысл попробовать разные и понять, какая из них лучше откликается на ваши промты.
🐞 Чем проще "сломать язык" тем сложнее будет отлаживать вайбкод. Если вам действительно важно использовать этот код в дальнейшем, а не просто положить на полку — для Python как минимум проставьте тайп хинты и сделайте прогон стат. анализатором, например mypy.
📋 В идеале конечно еще покрыть код тестами, их же можно будет использовать как часть промта. Если писать тесты руками очень лениво — пробуйте генерировать тесты и проверять покрытие, скорее всего в процессе такого "ревью" найдете много мертвого кода и других интересных вещей.
🧩 Сложные и ответственные части кода быстрее и надёжнее писать вручную. Я пытался в многопоточность и shared memory на плюсах, получил невероятные впечатления от количества Undefined Behavior и утечек памяти.
📦 Большие проекты со сложной иерархией импортов — это боль. Модель путает в каком файле лежит объявление, путает docstring'и разных функций и как следствие вызывает одну вместо другой. Пытается объявлять новые функции и классы, дублирующие существующие, или переписывать стабильный код.
💾 Субъективно 30-40 тыс. токенов — предельный контекст для нормальной работы. Просто скопировать весь код и описание новой фичи не получится. Лучше конкретный модуль. Если в нем есть вызовы функций/классов другого модуля — только описание этих зависимостей, ни в коем случае не зависимый модуль целиком. Иначе снова каша из строк вместо вывода.
🎰 Если комментарии в коде устарели и противоречат коду, то на выходе казино, неизвестно что модель примет за источник истины. Вероятность получить рабочий код как в анекдоте про блондинку и динозавра. С отладкой ситуация аналогична. Если вы просто копируете ошибки из консоли в чат с моделью, то отлаживать такой код дольше, чем выучить язык и написать руками. Если догадаетесь расставить по коду логирование, процесс пойдет намного быстрее.
⚖️ Сейчас многие исследования заявляют, что программисты быстрее и лучше кодируют, когда не пытаются заменить собственную голову на Ctrl+С, Ctrl+V в чате. Субъективно мне такой процесс показался проще. Меньше мыслетоплива уходит на кодинг, но больше времени на отладку. Пока весь такой код сидит в пет-проектах, которые я пишу после работы — меня устраивает. Думаю со временем будет все больше новых подходов, способных поднять качество такого кода для его применения в проде.