Правило трех
Rule of three в разработке говорит, что можно один раз задублировать кусок кода, но при третьей копии нужно рефакторить. Это уточнение принципа DRY (Don't Repeat Yourself), учитывающее тот факт, что не всегда очевидно, как устранить дублирование, и ожидание третьего случая может прояснить ситуацию.
LLM'ки обожают дублировать код. Подумай о том, как при отсутствии других указаний, если попросишь LLM изменить программу, она выплюнет новую копию программы с запрошенными изменениями. Чтобы LLM решила рефакторить для удаления дублирования, требуется момент, когда LLM активно решает приложить усилия. (На самом деле, у Sonnet 3.7 есть некоторая склонность к этому, но если посмотришь на системный промпт Claude Code, они специально просят модель не быть проактивной, поскольку модели легко теряют фокус на том, что делают). Естественно, если код заcopy-paste'н повсюду в кодовой базе, LLM будет предполагать, что ты хочешь, чтобы код был заcopy-paste'н повсюду. Ты должен попросить модель уменьшить дублирование.
Примеры
- Попросил LLM написать тесты для функциональности, и в итоге она задублировала большую логику между тестами. Пришлось явно попросить выделить helper методы. (Еще одна сложность: когда LLM пишет новый тест, ей нужно знать о helper'е, чтобы его использовать. В agent mode лучше надеяться, что она посмотрит на правильный файл, чтобы узнать о helper'е!)