В эпоху AI-кодирования хорошие привычки программирования по-прежнему важны


Недавно я делал бенчмарк для агента и обнаружил, что нельзя просто оценивать сложность задачи программирования для ИИ с точки зрения разработчика.
Например, задача рефакторинга: разбить большой файл в несколько тысяч строк на более чем десять небольших модулей по функциям.
Эта задача для разработчика на самом деле не считается сложной, основная работа — перемещение кода, организация импортов, проверка сборки, — с этим справится даже новичок.
Поэтому я решил использовать простую задачу для бенчмарка, и результат оказался неожиданным.
Claude Code посчитал задачу довольно большой, попытался拆一部分, создал PR и написал Future work, планируя делать поэтапно.
Мой собственный агент — «жесткий» подход, я продвинулся в сторону полного拆分, но цена была очевидна: расход токенов в десятки раз больше, чем у Claude, и большая часть времени уходила на повторное чтение файлов, исправление ошибок компиляции, снова чтение и исправление ошибок.
Это заставило меня понять, что задача, которая кажется человеку простой, для агента не обязательно таковой.
Для человека такие рефакторинги часто сводятся к «просто перенести этот кусок». Но для агента сначала нужно разбить большой файл на части, запомнить, какие функции и тесты связаны, затем сгенерировать множество изменений между файлами, и в конце — исправлять ошибки компиляции по чуть-чуть.
Это выглядит как механическая работа, но на деле превращается в задачу с высокой затратой токенов и сложным управлением состоянием.
Недавно я видел мнение, что в эпоху AI-кодирования принципы разделения модулей уже не так важны, ведь люди всё равно не читают код. Сейчас я с этим не согласен. Четкие границы модулей, подходящий размер файлов, простые зависимости — это не только удобно для человека, но и помогает снизить сложность задачи для агента.
С другой стороны, инструменты для чтения и изменения файлов у агента сейчас не очень подходят для таких рефакторингов.
Когда агент меняет файлы, он в основном делает текстовые замены. Например, Claude Code часто использует схему old_string / new_string: сначала подает старый текст, потом заменяет его на новый.
Codex обычно применяет apply_patch: создает патч, похожий на git diff, который заменяет старое содержимое новым.
Оба метода подходят для небольших изменений, но если нужно удалить большой кусок кода или перенести целый набор функций в другой файл, модель обычно сначала читает исходный контекст, а потом генерирует большой блок замены или diff.
Поэтому я дал агенту подсказку: пусть он сначала с помощью скриптов, sed, perl или подобных инструментов разбивает большой файл на части, удаляет старое содержимое и записывает в новый файл, а потом постепенно исправляет.
Это значительно повысило его эффективность.
По умолчанию агент так не делает, потому что в системных подсказках явно требуют, чтобы он использовал встроенные инструменты для изменения файлов, а не командную строку.
Дальше я подумал, что для более продвинутого редактирования агенту нужны более сложные инструменты.
Не просто интерфейс «заменить текст», а возможность через парсер, LSP или компилятор строить структуру кода, чтобы он мог делать рефакторинг как в IDE: перемещать функции, удалять блоки impl, организовывать импорты.
Интересно, есть ли кто-то, кто уже пробовал что-то в этом направлении.
В целом, даже в эпоху AI-кодирования хорошие привычки программирования остаются ценными.
Чем раньше через инженеринг тестовых сред (harness engineering) превратить хорошие привычки в стандартную работу агента, тем меньше затрат на последующий рефакторинг.
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • комментарий
  • Репост
  • Поделиться
комментарий
Добавить комментарий
Добавить комментарий
Нет комментариев
  • Закрепить