Вот спорная точка зрения, которая, вероятно, вызовет бурные обсуждения в комментариях: мы абсолютно точно должны позволить ИИ писать наш скучный код, даже если мы знаем, что он может быть немного хуже, чем тот, который мы написали бы вручную. И да, я осознаю иронию этого утверждения.
Прежде чем вы закроете эту вкладку и начнёте публиковать гневные твиты о потере навыков и уязвимостях в области безопасности, выслушайте меня. Я не предлагаю отказаться от всех стандартов и позволить GPT-4 бесконтрольно работать в продакшне. Я предлагаю нечто более тонкое: мы стали опасно хорошо притворяться, что наше время бесконечно, и нам нужно принимать стратегические решения о том, где это время действительно имеет значение.
Неудобная правда о нашем ремесле
Позвольте мне описать вам ситуацию. Понедельник, утро. У вас свежий спринт. Ваша доска Jira кровоточит красным. И там, ожидая вас, словно какой-то технологический ужас, находится тикет с надписью: «Создать CRUD-эндпоинты для таблицы UserPreferences».
Вы точно знаете, как это будет. Вы напишете тот же шаблонный код, который писали тысячу раз. Тот же шаблон валидации. Та же структура обработки ошибок. Тот же формат ответа. Вы, вероятно, скопируете-вставите из старого проекта, измените несколько имён переменных и назовёте это днём. Затем вы потратите 30 минут на исправление импортов.
Теперь вот реальный вопрос: является ли это продуктивной работой?
Спойлер: нет. Это просто работа.
Что мы имеем в виду под «скучным кодом»
Давайте определим наши термины, потому что это важно. Я говорю не обо всём коде. Я говорю о действительно повторяющемся, насыщенном шаблонами материале, который есть в каждом нетривиальном проекте:
- Шаблонные CRUD-операции
- Сcaffolding для валидации данных
- Стандартные цепочки обработки ошибок
- Файлы шаблонов конфигурации
- Базовая структура модульных тестов
- Настройка логирования и мониторинга
- Стандартные реализации middleware
- Шаблоны миграции базы данных
- Заглушки API-эндпоинтов
То, что заставляет вас хотеть кричать в клавиатуру, потому что вы пишете одно и то же охранное условие в сотый раз.
Такие инструменты ИИ, как GitHub Copilot, Claude и ChatGPT, действительно исключительны в этой конкретной категории работы. Они могут создавать шаблоны для широко используемых проектных шаблонов и фреймворков, позволяя вам настраивать и расширять, а не создавать с нуля.
Продуктивная математика, которая действительно работает
Вот что показывает исследование: разработчики, использующие генераторы кода на основе ИИ, могут создавать шаблонный код и автоматизировать повторяющиеся задачи значительно быстрее, освобождая умственную энергию для сложных и творческих аспектов разработки.
Давайте приведём цифры. Типичный CRUD-эндпоинт может занять у вас 20–30 минут, если вы пишете его с нуля, тщательно прорабатывая безопасность, валидацию, обработку ошибок, логирование и всё остальное. С помощью ИИ? Это 3–5 минут на составление запроса и доработку.
Теперь умножьте это на год. Умножьте на команду. Это не тривиальная экономия времени. Это разница между выпуском функции и выпуском функции плюс архитектурных улучшений плюс погашения технического долга.
Но здесь люди обычно перебивают меня: «А как насчёт уязвимостей в области безопасности? А как насчёт качества кода?»
Да, это реальные опасения. Давайте поговорим о них.
Слоон в комнате: качество и безопасность
Я буду полностью честен с вами: код, сгенерированный ИИ, сопряжён с задокументированными рисками. Исследования показали, что разработчики, использующие инструменты ИИ, иногда создавали менее безопасный код, чем те, кто этого не делал, при этом считая свой код более безопасным. Некоторые исследования обнаружили, что почти половина фрагментов кода, сгенерированных ИИ, содержала ошибки, которые могли быть использованы злоумышленниками.
Это серьёзно.
Однако — и это важно — это не аргумент против использования ИИ для скучного кода. Это аргумент против его бездумного использования.
Мы знаем следующее о качестве кода в производственных системах: большинство уязвимостей в области безопасности и ошибок не связаны с шаблонным кодом. Они связаны с логическими ошибками, архитектурными недочётами и крайними случаями в сложной бизнес-логике. С тем, что требует работы человеческого мозга на полную мощность, а не усталого разработчика, который копирует-вставляет в сотый раз за день.
Как ни странно, передавая скучный код ИИ, вы фактически улучшаете свою безопасность, потому что у вас и вашей команды появляется больше когнитивной энергии, чтобы сосредоточиться на коде, который действительно имеет значение.
Практическая основа для ответственного создания кода с помощью ИИ
Здесь мы подходим к сути дела. Вот как на самом деле можно реализовать это, не потеряв рассудок или допуск к безопасности вашей компании:
Шаг 1: Установить чёткие рамки
Создайте документированный список категорий кода, где в вашей кодовой базе допустимо использование ИИ:
ai_safe_categories:
definitely_allowed:
- CRUD operation scaffolding
- Boilerplate model definitions
- Standard validation patterns
- Test structure and fixtures
- Configuration templates
- Logging/monitoring setup
requires_review:
- API endpoint logic
- Business logic components
- Authentication/authorization
- Data transformation pipelines
absolutely_not:
- Security-critical cryptographic code
- Payment processing logic
- Core algorithm implementations
- Sensitive data handling without explicit human review
Шаг 2: Внедрить агрессивный обзор кода
Вот особенность кода, сгенерированного ИИ: он требует проверки, но не такого же рода, как код, написанный вручную. Вы проверяете его не на сообразительность или стиль. Вы проводите аудит. Это требует другого набора навыков.
Ваш контрольный список для проверки кода, сгенерированного ИИ, должен включать:
Аудит безопасности
- Хардкордные секреты или учётные данные (ИИ почему-то любит это)
- Ненадёжные зависимости или известные уязвимости
- Отсутствие проверки ввода
- Векторы SQL-инъекций (как-то всё ещё актуальны)
- Обход аутентификации/авторизации
Проверка качества
- Соответствует ли это вашим требованиям к производительности?
- Есть ли явно неэффективные шаблоны?
- Соответствует ли обработка ошибок вашей области?
- Соответствует ли это установленным конвенциям?
Проверка контекста
- Решает ли это проблему, которую мы указали?
- Есть ли крайние случаи, которые мы упускаем?
- Будет ли это масштабироваться с нашим объёмом данных?
Процесс проверки быстрее, чем написание с нуля, но он обязателен. Именно здесь ваш опыт становится незаменим.
Шаг 3: Создать рабочие процессы верификации
Позвольте мне показать вам, как это выглядит на практике. Вот рабочий процесс для безопасного включения кода, сгенерированного ИИ:
Шаг 4: Практический пример — CRUD-эндпоинт
Позвольте мне показать вам, как именно это работает. Допустим, вам нужен простой эндпоинт для пользовательских настроек. Вот ваш запрос:
Создайте POST-эндпоинт в [вашем фреймворке], который:
- Принимает JSON с этими полями: тема, язык, уведомления_включены
- Проверяет, что язык является одним из: en, es, fr, de
- Возвращает сохранённые настройки или соответствующую ошибку
- Включает базовое логирование
- Использует [вашу существующую библиотеку валидации]
- НЕ использует жёстко закодированные учётные данные для базы данных
- Включает комментарии JSDoc
Целевой фреймворк: [ваш фреймворк]
Существующие шаблоны: [укажите на соответствующий код в вашем репозитории]
То, что вы получите в ответ, обычно на 80–90% готово. Требуется доработка? Безусловно. Но вы не пишете это с нуля. Вы дорабатываете то, что уже работает.
Вот упрощённый пример того, что ИИ может сгенерировать для Node.js/Express:
/**
* Обновление пользовательских настроек
* @param {Object} req - Объект запроса Express
* @param {Object} res - Объект ответа Express
*/
app.post('/api/users/:userId/preferences', async (req, res) => {
try {
const { theme,
