Когда Uncle Bob встретил AI: почему автор "Чистого кода" не смог отказаться
Роберт Мартин, тот самый Uncle Bob, который 20 лет учил нас писать чистый код, в 2025 году признался: "Я трачу на отладку в 3 раза меньше времени. И виноваты в этом не мои 50 лет опыта, а два AI-ассистента на моем Mac".
Это не про "еще один инструмент". Это про фундаментальное изменение того, как опытные разработчики ищут баги. Мартин не использует AI для написания кода с нуля - он слишком хорошо знает, чем это заканчивается. Вместо этого он создал систему, где Claude 3.7 и Grok 3 работают как два разных типа напарников: один для глубокого анализа, другой для быстрых проверок.
Важно: на февраль 2026 года Claude 3.7 Sonnet - это последняя стабильная версия от Anthropic, а Grok 3 от xAI получила серьезные улучшения в понимании контекста больших кодовых баз. Обе модели обновляются ежеквартально.
Проблема, которую решает AI: почему опытные разработчики тратят часы на то, что можно сделать за минуты
Мартин описывает классическую ситуацию: вы видите падение производительности в микросервисе на Go. Логи чистые, метрики показывают узкое место, но где именно? Традиционный путь: ставить брейкпоинты, добавлять логи, анализировать flame graphs. На это уходит 2-3 часа минимум.
"Проблема не в том, что мы не умеем дебажить," - говорит он. "Проблема в том, что человеческий мозг плохо справляется с параллельным анализом 15 возможных причин одновременно. AI - да."
1 Как Мартин разделил задачи между Claude и Grok
Первое правило: разные модели для разных фаз отладки. Не пытайтесь заставить одну модель делать все - это как использовать отвертку вместо шуруповерта.
| Задача | Инструмент | Почему | Время экономии |
|---|---|---|---|
| Первичный анализ проблемы | Grok 3 | Быстрее генерирует гипотезы, работает с неполным контекстом | 40-60 минут |
| Глубокий анализ конкретного участка | Claude 3.7 | Точнее понимает сложные взаимосвязи, дает развернутые объяснения | 1.5-2 часа |
| Поиск аналогичных проблем в кодовой базе | Оба, параллельно | Разные модели находят разные паттерны | 30-45 минут |
Реальный пример: отладка memory leak в Go-сервисе
Вот как это работает на практике. У Мартина был сервис обработки платежей, который начинал жрать память после 8 часов работы. Классическая ситуация: все тесты проходят, в продакшене - проблема.
2 Шаг 1: Быстрая диагностика с Grok
Промпт для Grok 3 (актуальный на февраль 2026):
# Контекст: Go сервис, обработка платежей, растет потребление памяти
# Есть: pprof дампы за разные часы работы, метрики Prometheus
# Нет: явных утечек в стандартных местах
Задача: сгенерируй 5 наиболее вероятных причин утечки памяти,
основываясь на типичных паттернах для Go микросервисов.
Приоритет: неочевидные причины, которые часто пропускают.
Формат: каждая гипотеза + как проверить за 5 минут.
Grok за 30 секунд выдает:
- Глобальный кэш без TTL (проверь: поиск sync.Map или map без очистки)
- Неправильное использование context.WithTimeout (утечка горутин)
- Сборщик мусора не справляется с большими объектами (проверь: размер аллокаций)
- Утечка через стороннюю библиотеку (особенно HTTP клиенты)
- Проблема с finalizer (редко, но бывает)
3 Шаг 2: Глубокий анализ с Claude 3.7
Когда Grok указал на возможную проблему с context, Мартин перешел к Claude с конкретным кодом:
// Проблемный участок кода (упрощенно)
func ProcessPayment(ctx context.Context, payment Payment) error {
// Создаем подконтекст с таймаутом
timeoutCtx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
// Запускаем 3 параллельные операции
errChan := make(chan error, 3)
go validatePayment(timeoutCtx, payment, errChan)
go checkFraud(timeoutCtx, payment, errChan)
go reserveFunds(timeoutCtx, payment, errChan)
// Ждем результаты
for i := 0; i < 3; i++ {
select {
case err := <-errChan:
if err != nil {
return err
}
case <-timeoutCtx.Done():
return timeoutCtx.Err()
}
}
return nil
}
Промпт для Claude:
Проанализируй этот код на предмет потенциальных утечек памяти.
Особое внимание:
1. Использование context и горутин
2. Канал errChan - возможна ли блокировка?
3. Что происходит с горутинами, если контекст отменяется раньше?
4. Есть ли здесь классическая ошибка с утечкой горутин в Go?
Дай развернутый ответ с объяснением механизма утечки,
если она есть. Предложи конкретную фиксацию.
Claude 3.7 находит проблему, которую пропустили 3 code review:
"Проблема: если контекст отменяется (timeoutCtx.Done()), функция возвращает ошибку, но запущенные горутины продолжают работать. Они пытаются записать в errChan, который никто не читает - происходит блокировка. Эти горутины никогда не завершатся, утечка на каждую обработку платежа."
Стоимость vs эффективность: почему Мартин платит за обе модели
На февраль 2026 года цены такие:
- Claude 3.7 Sonnet: $0.003 за 1K токенов ввода, $0.015 за вывод
- Grok 3 (через API): $0.002 за 1K токенов, плоский тариф
- Средняя сессия отладки: 50-70 центов
"Это дешевле, чем час моей работы," - говорит Мартин. "Но важнее другое: я нашел баг, который мог бы искать неделю. В денежном выражении - экономия $2000-3000 на одном инциденте."
Ошибка 90% разработчиков: "средний по больнице" подход
Самая большая проблема, которую видит Мартин: разработчики используют AI-ассистентов как универсальный инструмент. Это не работает.
"Вы не стали бы использовать тот же набор тестов для unit и integration тестов. Почему вы используете одну модель для исследования проблемы и для написания фикса?"
Вот конкретные ошибки:
Ошибка 1: Слишком общие промпты
Как НЕ надо делать:
Найди баги в этом коде
Как делает Мартин:
Проанализируй этот обработчик HTTP запросов на:
1. Race conditions при параллельном доступе к shared map
2. Неправильную обработку ошибок в defer
3. Возможные deadlock в каналах
4. Утечки ресурсов (connections, files)
Контекст: это high-load сервис, 10k RPS, Go 1.24
Ошибка 2: Игнорирование false positives
"AI часто генерирует ложные срабатывания. Новички пытаются фиксить все. Опытные - фильтруют. Мое правило: если модель не может объяснить механизм бага в трех предложениях - это, скорее всего, false positive."
Ошибка 3: Отсутствие метрик
Мартин ведет простой журнал:
{
"date": "2026-01-15",
"problem": "memory leak in payment service",
"tool_used": "Claude 3.7",
"time_saved": "2.5 hours",
"correct_diagnosis": true,
"false_positives": 3,
"cost": "$0.68"
}
Через месяц таких записей становится ясно, какие задачи лучше решать каким инструментом.
Интеграция в рабочий процесс: не вместо мозга, а как его расширение
Мартин не заменяет thinking debugging AI-ассистентами. Он создает pipeline:
- Человек: формулирует проблему, собирает контекст (логи, метрики, дампы)
- Grok: быстрый мозговой штурм, генерация гипотез
- Человек: фильтрация гипотез, выбор наиболее вероятных
- Claude: глубокий анализ конкретных участков кода
- Человек: проверка анализа, написание фикса
- Оба инструмента: review фикса, поиск edge cases
"Это похоже на pair programming, где у вас два напарника с разными сильными сторонами. Один - быстрый, генерирующий идеи. Другой - методичный, внимательный к деталям."
Что изменилось к 2026 году: новые возможности и старые проблемы
По сравнению с 2024-2025 годами:
| Аспект | 2024-2025 | 2026 (текущее состояние) |
|---|---|---|
| Понимание контекста | 1-2 файла, часто терял нить | До 10 файлов, сохраняет связи между ними |
| Анализ производительности | Поверхностный, общие советы | Конкретные рекомендации с цифрами |
| False positives rate | 30-40% | 15-20% (у лучших моделей) |
| Стоимость анализа | $2-5 за сложный кейс | $0.5-1.5 за тот же кейс |
Но старые проблемы остались:
- Модели все еще плохо понимают бизнес-контекст
- Сложные race conditions часто пропускаются
- Работа с legacy кодом (особенно на Perl, COBOL) - слабое место
Практический совет: с чего начать завтра
Если вы хотите повторить подход Мартина:
- Выберите один текущий баг в вашем проекте (не самый сложный, но и не тривиальный)
- Соберите весь контекст: код, логи, метрики, steps to reproduce
- Купите $10 кредита на OpenAI (для GPT-5) и Anthropic (для Claude 3.7)
- Попробуйте решить проблему сначала с одной моделью, потом с другой
- Замерьте время и качество решения
- Запишите результаты в простую таблицу
Через 5 таких экспериментов вы поймете, какие задачи лучше давать каким моделям. И, возможно, как и Мартин, обнаружите, что тратите на отладку в 3 раза меньше времени.
Для тех, кто хочет глубже изучить работу с AI-ассистентами, рекомендую наш гайд по выбору и использованию AI-ассистентов. Там есть сравнение 12 инструментов и конкретные кейсы.
Последняя мысль от Мартина: "AI не заменит опытных разработчиков. Но разработчики, которые используют AI, заменят тех, кто не использует. Это не про написание кода. Это про скорость нахождения проблем в коде, который уже написан."
И да, он до сих пор не доверяет AI написание production кода. Но для отладки? "Это как иметь рентгеновское зрение для вашей кодовой базы. Глупо отказываться."