Почему качество кода сложно измерить

На протяжении последнего месяца звучат всё более спорные утверждения:

  • Я не писал код с 2025 года;
  • Code review умерли;
  • Люди больше не читают код.

Индустрия действительно трансформируется, но организации, которые отказываются читать и писать код сами, делают это на свой риск.

Проекты, написанные "под вибрацию" ИИ, деградируют со временем в немасштабируемый беспорядок. Причина проста, но её сложно исправить: поддерживаемость кода и хорошую архитектуру невозможно объективно измерить в краткосрочной перспективе. Последствия плохой архитектуры или немасштабируемого кода проявляются через месяцы, а то и годы.

Легко определить, что такое плохой код: код, который сложно читать и понимать, сложно эволюционировать в ответ на меняющиеся требования. Код, где изменение одного места неожиданно ломает программу в других, удалённых местах — как "эффект бабочки". Код, где добавление нового функционала требует серьёзных переделок в нескольких местах, а потом всё равно что-то забывают пропатчить, и появляются противоречия. Код, где инварианты дизайна не ясны, а разработчики его уже уехали, оставив систему без охранника. Код, который сложно тестировать, требующий мокирования и раскрывающий детали реализации, что приводит к хрупким тестам, которые потом мешают полезному рефакторингу.

И всё же общеизвестный факт: заметить плохой код может только со временем. Месяцы, годы. Опытные инженеры развили нюх на запахи кода и могут принять решение задолго до того, как появятся видимые проблемы.

Интуиция эксперта vs AI

Грамотные разработчики полагаются на интуицию, которую они выковали кровью и потом — долгие ночи отладки production-проблем, обеты никогда больше не повторять старые ошибки. Это интуиция, которую нельзя свести к жёсткому набору правил, потому что всё зависит от контекста. Эксперты не следуют правилам — они их создают.

Здесь и зарывается собака. ИИ не обучен на том, что означает "поддерживаемый код". Любое reinforcement learning требует сигнала награды, который можно измерить сразу же, а не через месяцы или годы. ИИ учится правилам из учебников для новичков. ИИ замечает паттерны в коде "в дикой природе", а большинство кода там — откровенно дерьмо. Нет фитнесс-функции для поддерживаемого кода, которую бы мы знали, иначе она уже была бы встроена в наши линтеры.

Замечали, как ужасно ИИ упрощает код? Даже state-of-the-art модели. Он не может нормально выделить функцию, предпочитая раскалывать большую функцию на несколько маленьких, которые на самом деле не переиспользуются. Извлечение меньшей функции из большей — это дурной выбор, если для понимания исходной функции нужно читать реализацию извлечённой. Определение переиспользуемых и поясняющих функций — это искусство, требующее мастерства. Большинство разработчиков остаются на уровне "продвинутых новичков" в модели Дрейфуса, и не способны определять хорошие, поясняющие, переиспользуемые функции. ИИ тоже.

Проблема обучения через ошибки

Это было бы не так страшно, если бы люди оставались в управлении и учились на ошибках. Но растёт тренд, когда люди полагаются на ИИ для написания и даже чтения кода.

Эти люди никогда не достигнут мастерства, потому что они больше не принимают решения, не несут ответственность за ошибки в коде и не учатся на них. ИИ делает ошибки, ИИ не учится на них, и люди, полагающиеся на ИИ для кодирования, тоже не учатся.

Не всё так плохо с LLM

Не поймите меня неправильно — LLM это отличный инструмент. Я не луддит, я интегрировал ИИ в свою повседневную работу, одновременно обучая коллег тому, что я узнал. С удовольствием использую LLM для всей скучной, душегубящей работы. Вижу выигрыш в производительности. Но в конце концов, это просто инструмент, и как и все революции, его свет тоже поблёкнет. На мой взгляд, это уже начинает происходить — сейчас новости о технологиях, честно говоря, скучные.

Люди вообще плохи в прогнозировании. Будущее нас всех удивит. Но я сделаю свой прогноз:

В будущем мы увидим всё больше компаний, гордо заявляющих о своей политике "БЕЗ ИИ" как о конкурентном преимуществе. И они будут правы.

"Но автоматизированные конвейеры всегда эффективнее" — скажут люди. Это верно, но софтверная индустрия особенная: мы всегда занимались автоматизацией в масштабах, всё, что мы делаем — это автоматизация. LLM не единственный способ это делать, и в зависимости от контекста, может быть отвлечением. "Кодирование не решено" в какой-либо значимой степени. Да, можно указать LLM построить компилятор C/C++, а можно просто склонировать GCC или LLVM и получить лучший компилятор C/C++, бесплатно. И может быть, есть лучшие способы потратить время и ресурсы, чем переизобретать одни и те же CRUD-приложения (потребности людей бесконечны, новых задач всегда в избытке).

Если люди и компании не начнут ответственно относиться к использованию ИИ, будут последствия.