Код больше не читают
На Hacker News выложили проект: инструмент, чтобы вайбкодеры могли читать и анализировать код. В комментах сразу развернулась дискуссия. Один пишет: «А зачем это вайбкодерам? Они же код не читают, им Клод готовые файлы отдаёт, а они их на GitHub и в прод». Второй добавляет: «Зачем вообще код читать? Его слишком много, это время отнимает. Надо скинуть его в LLM, она прочтёт и скажет, всё ли там нормально».
И ведь пишут на полном серьёзе.
Я сначала хотел возмутиться. Потом подумал. И понял: в этом есть большая правда. Только сформулирована она грубо.
Читать каждую строку сгенерированного кода - это не масштабируется. Если вы каждый день принимаете сотни строк от LLM, глазами вы их не вычитаете. Это иллюзия контроля. Но и просто «скинуть код в LLM и спросить, всё ли ок» - это не инженерия. Это лотерея с красивым интерфейсом.
Я для себя решил так: код не нужно читать. Его нужно просматривать. И не глазами, а через структуру, метрики и правила.
Что я сделал
Я написал собственный сканер. Он переводит код в code property graph. А дальше сверху уже висят разные алгоритмы для статического и структурного анализа плюс набор правил для проверок описывающих целевую архитектуру. По сути, я просто развил идеи таких проектов, как Joern и ArchUnit.
Это даёт мне то, чего не даст чтение глазами. Я вижу не «вот эта функция выглядит нормально», а конкретные свойства:
- какие зависимости появились;
- где нарушены архитектурные границы;
- есть ли запрещённые вызовы;
- как устроены циклы и связность;
- где дублирование;
- где сложность растёт быстрее, чем ценность;
- какие модули стали слишком связанными.
То есть я не читаю код. Я изучаю его граф. И уже по графу принимаю решения.
Что читать обязательно
А вот что реально нужно читать - это спеки, gherkin-тесты и отчёты анализаторов. Потому что если спека врёт или тест ничего не проверяет, никакая LLM вас не спасёт. Она просто скажет: «Всё выглядит хорошо». И вы пойдёте деплоить чёрный ящик.
Основное время я трачу не на чтение сгенерированных файлов, а на развитие навыков:
- структурный и статический анализ;
- поведенческое тестирование, BDD;
- мутационное тестирование;
- чтение отчётов и настройка правил.
Это то, что даёт уверенность. Не «я посмотрел на код и мне показалось нормально», а «код удовлетворяет вот этим свойствам, и я могу это доказать».
Метрики Холстеда внезапно вернулись
Забавно, но метрики Холстеда - те самые, над которыми много лет смеялись - вдруг стали актуальными. Причём и для людей, и для агентов.
Почему? Потому что когда кода становится слишком много, ты не можешь оценивать его «на вкус». Нужны измеримые величины: объём, словарь, сложность, энтропия. Для LLM это тоже работает. Мы же можем измерять, насколько сложный код она сгенерировала, насколько он предсказуемый, насколько плотный. Это уже не философия, а инженерная метрика.
Код как ассемблер
Я всё чаще думаю, что код сейчас - это что-то вроде ассемблера или байт-кода LLVM. Если есть желание, можно разобраться. Но незнание больше не мешает создавать сложные инженерные проекты.
Это не значит, что можно вообще ничего не понимать. Это значит, что набор навыков сместился. Раньше ключевым было умение писать и читать строки. Теперь ключевое - уметь задавать свойства, которым код должен удовлетворять, и проверять эти свойства автоматически.
И нет, это не про «делегируй все типы задач в ИИ». Это про то, что делегировать можно не всё. Спецификацию, архитектурные ограничения, тесты, правила анализа - это всё ещё работа инженера. Просто интерфейс изменился.
Так чем же читать сгенерированный код?
Мой ответ: не читать. Просматривать.
Глазами - спеки, тесты и отчёты анализатора. Код - через граф, метрики и правила. LLM - как помощник, но не как единственный рецензент. Если код нельзя проверить свойствами, это не код, а технический долг.
Вайбкодинг не отменяет инженерию. Он меняет её интерфейс. Раньше мы читали строки. Теперь читаем графы, правила и тесты. Кто не научится - будет деплоить чёрные ящики. Кто научится - сможет делать сложное быстрее и надежнее чем было прежде.
А чем читаете сгенерированный код вы?
Post #88
53