
На днях у Кирилла Мокевнина вышел пост про то, как он разлюбил динамическую типизацию. Мысль понятная: на больших кодовых базах отсутствие типов начинает дорого стоить.
Хочу дополнить аргументом, который в 2026 году уже стал прям must-have: статанализ и типы — это лучший self-check для AI-агента.
Современные агенты для разработки (Claude Code на Opus 4.5 и ChatGPT Codex 5.2 High) хорошо пишут код. Ошибок уровня «переменная не объявлена», «импорт забыл», «опечатка в имени метода» по сути уже почти нет.
Основные промахи чаще про другое:
недостаточный контекст
неверные предположения про интерфейсы/контракты
расхождения в понимании с тем, как устроен проект
И вот тут типы + статанализ дают хорошую первую обратную связь.
1. Быстрый фидбэк = быстрые итерации агента
Если у вас в правилах агента прописано «после любого изменения прогоняй линтер и статанализ», агент тут же видит, что нарушил контракт, и чинит это сразу, не таща ошибку дальше по треду.
В Go вообще идеально: проект просто не соберётся, и это мгновенный сигнал, что «что-то не так».
2. Типы — это огромный слой метаинформации для агента
Даже в Python, где аннотации типов не влияют на рантайм, они всё равно работают как контракт и карта проекта:
что за объект мы передаём
какие поля/методы у него есть
что возвращает функция
как объекты, методы и классы взаимодействуют между собой
Для агента это важно: по типам он быстрее «распаковывает» связи между слоями и точнее встраивает изменения в существующую архитектуру.
3. Это быстро и «дёшево»
Статанализ не отменяет написание тестов: тесты всё равно нужны, потому что они проверяют бизнес-логику, сценарии, граничные случаи, интеграции и поведение системы целиком, в общем то, что статикой не покрыть.
Но статанализ прогоняется быстро, стоит «дёшево» с точки зрения ресурсов и отлично подходит для постоянного применения, буквально после каждого небольшого изменения в рамках одной большой итерации. Агент может регулярно получать быстрый сигнал «всё ли окей по контрактам», а под конец уже прогонять тесты и закрывать задачу более уверенно.
Что я рекомендую, если вы разрабатываете в связке с AI-агентами
Если проект на динамическом языке, сразу настраивайте:
линтер / форматтер
статанализ / проверку типов
И самое важное, описывайте workflow одной итерации в файлах для агентов (AGENTS.md, CLAUDE.md) в виде:
внёс изменения
прогнал линтер
прогнал статанализ
починил всё до «зелёного»
в конце работы над задачей прогнал профильные тесты
Также обязательно указывайте агенту писать на максимально поддерживаемой вашим проектом версии языка и максимально типизировано. Работы агенту от этого не прибавляется, зато современный синтаксис, свежие возможности языка и явные типы резко снижают вероятность кейсов «не так понял контракт» и повышают качество результата.
У нас в RetailCRM это базовая гигиена:
PHP: PHP-CS-Fixer + PHPStan (стараемся на максимальных level'ах)
Python: ruff + ty
Go: строго типизированный «из коробки»
Если AI-агент умеет проверять себя, качество конечного результата ожидаемо выше. И это сейчас, кажется, одна из самых «дешёвых», но полезных инвестиций в инфраструктуру разработки.
Эту и другие статьи можно читать в моем канале @dev_salikhov.
