Почему качество кода сложно измерить
На протяжении последнего месяца звучат всё более спорные утверждения:
- Я не писал код с 2025 года;
- Code review умерли;
- Люди больше не читают код.
Индустрия действительно трансформируется, но организации, которые отказываются читать и писать код сами, делают это на свой риск.
Проекты, написанные "под вибрацию" ИИ, деградируют со временем в немасштабируемый беспорядок. Причина проста, но её сложно исправить: поддерживаемость кода и хорошую архитектуру невозможно объективно измерить в краткосрочной перспективе. Последствия плохой архитектуры или немасштабируемого кода проявляются через месяцы, а то и годы.
Легко определить, что такое плохой код: код, который сложно читать и понимать, сложно эволюционировать в ответ на меняющиеся требования. Код, где изменение одного места неожиданно ломает программу в других, удалённых местах — как "эффект бабочки". Код, где добавление нового функционала требует серьёзных переделок в нескольких местах, а потом всё равно что-то забывают пропатчить, и появляются противоречия. Код, где инварианты дизайна не ясны, а разработчики его уже уехали, оставив систему без охранника. Код, который сложно тестировать, требующий мокирования и раскрывающий детали реализации, что приводит к хрупким тестам, которые потом мешают полезному рефакторингу.
И всё же общеизвестный факт: заметить плохой код может только со временем. Месяцы, годы. Опытные инженеры развили нюх на запахи кода и могут принять решение задолго до того, как появятся видимые проблемы.
Интуиция эксперта vs AI
Грамотные разработчики полагаются на интуицию, которую они выковали кровью и потом — долгие ночи отладки production-проблем, обеты никогда больше не повторять старые ошибки. Это интуиция, которую нельзя свести к жёсткому набору правил, потому что всё зависит от контекста. Эксперты не следуют правилам — они их создают.
Здесь и зарывается собака. ИИ не обучен на том, что означает "поддерживаемый код". Любое reinforcement learning требует сигнала награды, который можно измерить сразу же, а не через месяцы или годы. ИИ учится правилам из учебников для новичков. ИИ замечает паттерны в коде "в дикой природе", а большинство кода там — откровенно дерьмо. Нет фитнесс-функции для поддерживаемого кода, которую бы мы знали, иначе она уже была бы встроена в наши линтеры.
Замечали, как ужасно ИИ упрощает код? Даже state-of-the-art модели. Он не может нормально выделить функцию, предпочитая раскалывать большую функцию на несколько маленьких, которые на самом деле не переиспользуются. Извлечение меньшей функции из большей — это дурной выбор, если для понимания исходной функции нужно читать реализацию извлечённой. Определение переиспользуемых и поясняющих функций — это искусство, требующее мастерства. Большинство разработчиков остаются на уровне "продвинутых новичков" в модели Дрейфуса, и не способны определять хорошие, поясняющие, переиспользуемые функции. ИИ тоже.
Проблема обучения через ошибки
Это было бы не так страшно, если бы люди оставались в управлении и учились на ошибках. Но растёт тренд, когда люди полагаются на ИИ для написания и даже чтения кода.
Эти люди никогда не достигнут мастерства, потому что они больше не принимают решения, не несут ответственность за ошибки в коде и не учатся на них. ИИ делает ошибки, ИИ не учится на них, и люди, полагающиеся на ИИ для кодирования, тоже не учатся.
Не всё так плохо с LLM
Не поймите меня неправильно — LLM это отличный инструмент. Я не луддит, я интегрировал ИИ в свою повседневную работу, одновременно обучая коллег тому, что я узнал. С удовольствием использую LLM для всей скучной, душегубящей работы. Вижу выигрыш в производительности. Но в конце концов, это просто инструмент, и как и все революции, его свет тоже поблёкнет. На мой взгляд, это уже начинает происходить — сейчас новости о технологиях, честно говоря, скучные.
Люди вообще плохи в прогнозировании. Будущее нас всех удивит. Но я сделаю свой прогноз:
В будущем мы увидим всё больше компаний, гордо заявляющих о своей политике "БЕЗ ИИ" как о конкурентном преимуществе. И они будут правы.
"Но автоматизированные конвейеры всегда эффективнее" — скажут люди. Это верно, но софтверная индустрия особенная: мы всегда занимались автоматизацией в масштабах, всё, что мы делаем — это автоматизация. LLM не единственный способ это делать, и в зависимости от контекста, может быть отвлечением. "Кодирование не решено" в какой-либо значимой степени. Да, можно указать LLM построить компилятор C/C++, а можно просто склонировать GCC или LLVM и получить лучший компилятор C/C++, бесплатно. И может быть, есть лучшие способы потратить время и ресурсы, чем переизобретать одни и те же CRUD-приложения (потребности людей бесконечны, новых задач всегда в избытке).
Если люди и компании не начнут ответственно относиться к использованию ИИ, будут последствия.