Ремесло Jul 16, 2026 at 17:457В закладки

Ник Малыхин должен был запустить базу Java 1.5 на современном оборудовании. Первые ответы его LLM казались правдоподобными, но не выдерживали проверки. Решение: перестать доверять ему на слово и заставить опираться на доказательства.
LLM, работающий с устаревшим кодом, выдаёт ответы, которые кажутся правильными, но не соответствуют проекту. Рабочий подход: заставлять помощника основываться на доказательствах — коде, тестах, артефактах — а не на своей памяти.
26 июля 2026 года на сайте martinfowler.com Никита Малыхин рассказывал о своей модернизации Java-базы с версии 1.5 до современной среды. Контекст необычный: современные инструменты анализа и рефакторинга плохо работают с Java 1.5, и многие просто отказываются с ним взаимодействовать. Первая его реакция — просить помощника напрямую исправить код — привела к тому, что Малыхин описывает как ответы, которые «казались правдоподобными», но «не выдерживали проверки в реальной кодовой базе»: код выглядел как правильный Java 1.5, но не соответствовал реальному репозиторию.
Перелом произошёл в методологии. Вместо того чтобы использовать LLM как писателя, Малыхин использовал его как аналитика и проверяющего, привязывая каждый шаг к репозиторию: внимательное чтение существующего кода, проверка гипотез на основе тестов и трассировок выполнения, отказ от ускорения там, где код сам по себе не даёт оснований для утверждений. Послание статьи простое: модернизация legacy с LLM не идёт быстрее, чем у археолога, она так же медленна, но с меньшим количеством пробелов в доказательствах.
Этот шаблон в современных инструментах агентов называют по-разному — evidence-first prompting, grounded reasoning, retrieval-first — но у него одно общее правило: каждое утверждение помощника должно опираться на артефакт репозитория (файл, строку, тест). Отсутствие этого ограничения порождает самые дорогостоящие «ложные срабатывания» LLM при работе с legacy: API, появившиеся позже целевой версии, методы, которых не существует, несуществующие импорты.
Для команд, работающих с legacy, «помощник» не нужен для написания кода, а для поиска. Реальная продуктивность приходит, когда LLM читает, а не гадает. Следствие для CTO: правильные метрики проекта по модернизации с помощью ИИ — это не «строки, сгенерированные», а «гипотезы, опровергнутые самим кодом». Разница между этими двумя подходами — это разница между проектом legacy, который завершится успешно, и проектом, который снова обернётся техническим долгом.
Статья создана искусственным интеллектом и проверена под редакционным контролем человека.
Войдите, чтобы участвовать в обсуждении.
Interesting approach. Does this method also work for other legacy systems, or is it specific to Java 1.5?
Est-ce qu'on peut vérifier les suggestions du LLM avant de les implémenter, surtout sur un vieux système comme Java 1.5 ?
On pourrait tester les propositions du LLM dans un environnement isolé avant de les appliquer au système principal ?
Est-ce que ça marche aussi sur des gros projets Java 1.5 ?
Est-ce que ça marche aussi sur des gros projets Java 1.5 ? Les LLM ont du mal avec le code ancien très imbriqué, leurs suggestions sont moins fiables.
Est-ce que ça marcherait aussi pour d'autres vieux systèmes ?
Intéressant, mais comment ça se passe avec d'autres langages anciens ?
Les LLMs pourraient-ils vraiment sauver nos vieux systèmes ?
Harness Ops : post-mortems et bench des agents en prod