LLM в ежедневной разработке: где помогает, а где мешает
Этот блог я написал вместе с языковой моделью. Рассказываю без восторгов: что получилось быстро, где модель ошиблась и какое правило оказалось главным.
Эта запись есть на другом языке: English
Про языковые модели в разработке сейчас пишут в двух крайностях: либо «скоро программисты не нужны», либо «бесполезная игрушка, которая выдумывает функции». Обе версии далеки от того, что я вижу на практике.
Сайт, который вы читаете, я делал в паре с языковой моделью: свой движок на PHP, админка, аналитика, разметка для поисковиков. Опыт получился показательный — и потому, что многое вышло быстро, и потому, что ошибки были настоящие. Хочу рассказать про обе стороны.
Где выигрыш очевиден
Первый черновик чего угодно. Пустой файл — самая дорогая часть задачи. Модель закрывает её за минуту: каркас класса, структура конфига, регулярка, SQL-запрос. Дальше вы правите, а не сочиняете с нуля. Ускорение здесь не в разы, но стабильное.
Незнакомый синтаксис и забытые детали. Точный формат .htaccess, флаги rsync, как в этой версии PHP правильно сделать то, что в новой делается одной строкой. Раньше это были двадцать минут в документации и на форумах, сейчас — один вопрос.
Работа с чужим кодом. Объяснить, что делает незнакомая функция, чем отличаются два похожих места, что сломается, если убрать эту строку. Модель тут заменяет не программиста, а долгое вчитывание.
Рутина, которой много. Перевести интерфейс на второй язык, разложить текст по шаблонам, привести двадцать однотипных файлов к одному виду. Скучная работа, где ошибиться легко, а проверить результат просто.
Общая закономерность: модель сильна там, где нужен широкий охват и где результат легко проверить.
Где начинаются проблемы
Уверенный тон при ошибке. Это главная ловушка. Неправильный ответ выглядит ровно так же, как правильный — тем же спокойным тоном, с той же аккуратной аргументацией. Человек, который не знает ответа, обычно это как-то выдаёт. Модель — нет.
Факты, которые звучат правдоподобно. При работе над сайтом мне нужно было найти информацию о человеке по открытым источникам. В выдаче попался громкий заголовок, который отлично подходил по смыслу — и относился к совершенно другому человеку. Если бы этот «факт» не проверили, он бы отправился прямо на страницу «Обо мне».
Здесь простое правило: всё, что можно перепутать с чужим, проверяется отдельно. Особенно если речь о людях, датах, цифрах и цитатах.
Незнание вашей системы. Модель не знает, что на этом сервере старая версия PHP, что в конфиге хостинга включена неочевидная настройка, что вон тот каталог трогать нельзя. Она предложит решение, правильное в среднем, — и неправильное здесь.
Ошибки от излишней уверенности в действии. При деплое этого блога был момент, когда локальный конфиг для разработки перезаписал боевой. Сайт секунду смотрел в 127.0.0.1 вместо своего домена. Ошибка обнаружилась сразу, потому что после деплоя выполнялась проверка — но если бы проверки не было, всё выглядело бы «успешно».
Это, пожалуй, главный вывод про ИИ в инфраструктуре: не так важно, что он умеет, как то, что произойдёт, когда он ошибётся.
Правило, которое работает лучше всего
Я свёл всё к одному принципу: доверяй ровно настолько, насколько легко проверить.
- Код, который можно запустить и увидеть результат — проверяется мгновенно. Здесь можно двигаться быстро.
- Код, который трогает данные, деньги или прод — только после явной проверки, лучше с бэкапом до.
- Факты о реальном мире — всегда через источник. Без исключений.
Из этого следует практический приём, который сильно повысил качество работы: просить не только решение, но и способ его проверить. Не «напиши функцию», а «напиши функцию и команду, которой я сразу увижу, что она работает». Половина ошибок отваливается на этом шаге.
Что изменилось в самом процессе
Заметная перемена: сместился центр тяжести работы. Раньше основное время уходило на написание кода, а ревью было коротким. Теперь наоборот — черновик появляется быстро, а основная работа в том, чтобы его прочитать, понять и решить, что оставить.
Это требует другой дисциплины. Соблазн «выглядит правильно, поехали» очень сильный, особенно когда код аккуратно отформатирован и снабжён комментариями. Но аккуратность оформления ничего не говорит о правильности — это, пожалуй, самая коварная особенность работы с моделями.
И ещё одно: отвечать за результат всё равно вам. Никого не интересует, кто написал строку, которая уронила прод. Поэтому код, который вы не понимаете, нельзя отправлять дальше — независимо от того, кто его сочинил.
Кому это заменит работу
Мой опыт говорит так: модель хорошо делает то, что вы умеете проверить. Если вы разбираетесь в предметной области, она резко ускоряет. Если не разбираетесь — она ускоряет производство кода, который вы не можете оценить, и это не польза, а отложенная проблема.
Поэтому вопрос «заменит ли ИИ разработчиков» кажется мне неправильно поставленным. Ближе к реальности другое: меняется соотношение навыков. Писать код становится дешевле, а понимать, проверять и отвечать за него — дороже.
Собственно, это и раньше было главным в профессии. Просто теперь стало заметнее.