Я пишу на C# уже десять лет. Помню времена, когда я знал каждый метод в своем проекте, каждый класс, каждую зависимость. Теперь я просто набираю // Создай класс для работы с базой данных, и Copilot выдает мне три варианта. Удобно? Да. Страшно? Еще бы.
Код, который никто не понимает
В прошлом месяце я получил задачу пофиксить баг в микросервисе, который сам же и написал полгода назад. Открываю файл. Смотрю на 200 строк кода. И понимаю, что не понимаю ни черта.
Это был мой код. В смысле, я его написал. Вернее, не совсем. Я написал промпт, а Copilot написал код. Я его проглядел, проверил, что работает, и закоммитил. Теперь я сижу и пытаюсь разобраться в логике, которую придумала нейросеть.
Самый страшный момент для разработчика — когда ты не понимаешь собственный код. С Copilot это случается все чаще.
Идеальные промпты рождают уродливый код
Кажется логичным: чем точнее промпт, тем лучше код. На практике получается иначе. Я даю Copilot идеально сформулированную задачу:
// Создай асинхронный метод для загрузки пользователей из базы с пагинацией, фильтрацией по статусу и сортировкой по дате регистрации. Используй Entity Framework Core 8, паттерн репозиторий и cancellation token.
Copilot выдает красивый, работающий код. Прямо как в учебнике. Проблема в том, что этот код идеален в вакууме. Он не учитывает:
- Нашу специфичную архитектуру с CQRS
- То, что мы отказались от чистых репозиториев год назад
- Медленные запросы в продовой базе
- То, что метод будет вызываться из трех разных мест с разными требованиями
Код работает. Проходит код-ревью. Потом оказывается, что он создает N+1 проблему при загрузке связанных сущностей. Мы фиксим. Добавляем инклюды. Теперь метод возвращает слишком много данных. Оптимизируем. И так по кругу.
ChatGPT как источник легаси на стадии зародыша
Пока Copilot работает в реальном времени, ChatGPT — это фабрика по производству технического долга. Я обращаюсь к GPT-4.5 (самой новой версии на февраль 2026) с вопросом про реализацию кэширования в Redis.
Нейросеть выдает мне решение с использованием устаревшего пакета StackExchange.Redis 2.6, хотя у нас в проекте уже 3.0. Она предлагает паттерн, который мы отказались использовать после того, как он сломался при нагрузке в 10к RPS.
Но код выглядит профессионально. В нем есть обработка ошибок, логирование, даже тесты. Я копирую его, немного адаптирую под наш стиль. И вуаля — в проекте появляется новый слой легаси, которому еще нет и дня.
Рутинные задачи, которые перестали быть рутинными
Раньше написать DTO-класс было делом пяти минут. Теперь это квест:
- Начинаешь писать класс
- Copilot предлагает десять свойств, половина из которых не нужна
- Поправляешь
- Copilot добавляет методы ToString(), Equals(), GetHashCode() с неправильной реализацией
- Удаляешь лишнее
- Copilot предлагает добавить валидацию через атрибуты, которые мы не используем
Время на задачу увеличилось втрое. Вместо автоматизации получили ручное управление полуавтоматической системой, которая постоянно пытается увести в сторону.
Кодревью превращается в детектив
Раньше на кодревью я смотрел на логику, архитектуру, ошибки. Теперь я играю в "найди откуда этот код".
Вижу странный паттерн — спрашиваю: "Откуда это?" Ответ: "Copilot предложил". Вижу избыточную абстракцию — "Зачем этот интерфейс?" — "ChatGPT сказал, что так правильно".
Коллега из команды фронтенда недавно признался: он больше не может отличить свой код от сгенерированного. Прошлой неделей он три часа искал баг, который оказался в методе, написанном Copilot месяц назад. Метод работал, но делал что-то странное с датами. Странное, но работающее.
Это напоминает историю про фанатские галлюцинации Copilot, где нейросеть начала придумывать несуществующих людей. Только в нашем случае она придумывает несуществующие требования к коду.
Иллюзия продуктивности
Метрики говорят, что я пишу в два раза больше кода. Коммитов стало больше. Строк кода в день — заоблачные цифры. Но количество багов в проде не уменьшилось. Время на фиксы увеличилось.
Потому что раньше баг возникал из-за моей ошибки. Я ее понимал, знал, где искать. Теперь баг возникает из-за того, что Copilot неправильно понял контекст. Или ChatGPT предложил решение, которое не работает в нашем случае. Или я сам не до конца проверил сгенерированный код.
| Показатель | До Copilot | С Copilot |
|---|---|---|
| Строк кода в день | 150-200 | 400-500 |
| Время на кодревью (минут) | 15-20 | 30-40 |
| Багфиксы в неделю | 2-3 | 4-6 |
| "Чей это код?" вопросов | 0 | 5-7 |
Когда ИИ полезен (и не очень)
После года экспериментов я выработал свои правила. Copilot отлично справляется с:
- Генерацией шаблонного кода (геттеры, сеттеры, простые конструкторы)
- Написанием юнит-тестов для тривиальных методов
- Подсказками по синтаксису (особенно когда работаешь с новым фреймворком)
- Рефакторингом простых конструкций (переименование переменных, извлечение методов)
Абсолютно бесполезен (и даже вреден) в:
- Архитектурных решениях
- Работе с бизнес-логикой
- Оптимизации сложных запросов
- Выборе паттернов проектирования
- Безопасности (никогда не доверяй ИИ код с авторизацией или валидацией!)
Кстати, о безопасности. Помните историю про Copilot-фишинг? Это был лишь один из многих случаев, когда слепое доверие к ИИ приводило к проблемам.
Что будет дальше?
Я не противник технологий. GPT-5.2 Codex и другие модели становятся умнее с каждым месяцем. Но я заметил парадокс: чем умнее становится ИИ, тем глупее чувствую себя я.
Раньше, чтобы разобраться в новой технологии, я читал документацию, смотрел примеры, экспериментировал. Теперь я спрашиваю у ChatGPT. Получаю ответ. Копирую код. Он работает. Я не понимаю, как. Но работает же.
Через полгода появляется баг. Я возвращаюсь к этому коду. Не понимаю его. Снова спрашиваю у ChatGPT. Получаю патч. Применяю. Цикл замыкается.
ИИ-ассистенты не заменят разработчиков. Но они могут превратить разработчиков в операторов ИИ, которые не понимают, что происходит под капотом.
Мой совет после года работы с Copilot и ChatGPT: используй их как продвинутый автодополнение, а не как соавтора. Если код слишком сложный для того, чтобы написать его самому, он точно слишком сложный для того, чтобы доверить его нейросети.
И да, перед тем как скопировать сгенерированный код, спроси себя: "А смогу ли я объяснить этот код через полгода на кодревью?" Если ответ "нет" — пиши сам. Это больно, медленно, зато потом не придется разбираться в том, что придумала машина.
P.S. Эту статью я писал сам. Без помощи ИИ. Потому что не хочу, чтобы через полгода я перечитывал ее и думал: "И кто это написал такой бред?"