[Перевод] Почему ИИ-инструменты для разработчиков не оправдывают ожиданий

«Искусственный интеллект сделает разработчиков ненужными», — говорили они. И вот мы в 2 часа ночи занимаемся отладкой кода, сгенерированного искусственным интеллектом. Что пошло не так?

Искусственный интеллект должен был писать идеальный код, выполнять всю рутинную работу и в целом делать нашу жизнь проще. Но вот мы пришли к текущей реальности, и… всё не совсем так, как мы ожидали.

Итак, в чём же эти ИИ-инструменты для разработчиков оказываются неэффективными? Почему написание кода с использованием искусственного интеллекта оказалось не тем, чем мы все ожидали? И, что важнее всего: как мы можем его использовать, чтобы на самом деле облегчить свою работу?  

Как искусственный интеллект меняет разработку программного обеспечения

Удивительно, как развивалась сфера разработки программного обеспечения в последние несколько десятилетий.

Раньше разработчики должны были тщательно прописывать каждую операцию, которую выполнял компьютер. Это означало написание детерминированных пошаговых инструкций для каждой задачи, от перемещения битов через процессор до выполнения последовательности вызовов API.

Искусственный интеллект переворачивает эту модель с ног на голову. Вместо того, чтобы писать последовательную логику, мы даём обучающие данные — то есть огромное количество примеров входных и выходных данных. Машина затем находит закономерности и генерирует свою собственную логику, вдохновлённую тем, как работают человеческие и животные мозги. Такой подход позволяет искусственному интеллекту решать задачи, которые невозможно было бы решить с помощью традиционных методов программирования.

Возьмём, к примеру, задачу распознавания изображений. С использованием традиционных методов программирования написать программу для определения того, является ли объект на фото кошкой, было бы невероятно сложно, если не невозможно. Огромное разнообразие фотографий кошек и сложность анализа каждого пикселя делают эту задачу непреодолимой. Однако нейронные сети, вдохновлённые тем, как функционирует наш мозг, и обученные на больших датасетах, теперь могут с удивительной точностью распознавать объекты на изображениях.

Большие языковые модели (LLM) ушли ещё дальше. Обучаясь на гигантских объёмах текстовых данных — огромных частях интернета и опубликованных работах — LLM могут вести беседы на естественном языке и даже генерировать текст и код, похожий на человеческий. Это открывает новые способы взаимодействия с компьютерами и автоматизации сложных задач, что позволяет решать проблемы, ранее нерешаемые.

Обещания vs. реальность

Учитывая эти возможности, неудивительно, что вокруг ИИ-инструментов для разработчиков такой ажиотаж. Обещания заманчивы: помощники по программированию на базе искусственного интеллекта, которые могут писать идеальный код за вас; инструменты для превращения дизайна в код, которые мгновенно превращают макеты в готовые интерфейсы для продакшена; и чат-боты, способные точно ответить на любой вопрос по программированию. В конечном итоге, цель — найти способы сделать больше с меньшими затратами.

GitHub Copilot, ChatGPT и различные конвертеры дизайна в код созданы для того, чтобы выполнить эти обещания. И их демонстрации могут быть весьма впечатляющими. Однако реальность повседневного использования этих инструментов зачастую не оправдывает ожиданий.

Инструменты, генерирующие код, часто выдают результат, который оказывается некорректным или который не соответствует лучшим практикам. ИИ-помощники могут уверенно давать неправильные ответы, не говоря о своей неуверенности в них. Конвертация дизайна порой приводит к созданию жёсткого кода, который не использует вашу реальную библиотеку компонентов. На выходе часто получается код на выброс, так как он порождает больше работы, чем экономит времени.

Как разработчик, я зачастую предпочитаю написать код сам, чем отлаживать сгенерированный искусственным интеллектом код, который выглядит правильным, но содержит скрытые изъяны. Особенно это касается более крупных и сложных задач. Хотя такие инструменты могут быть полезны для маленьких, изолированных фрагментов, они испытывают значительные трудности с генерацией полноценного кода, готового к продакшену.

431a6a6c820fa645b3c7185b6b3adeb3.jpeg

Типы ИИ-инструментов для разработчиков 

Рынок ИИ-инструментов для разработчиков разнообразен и быстро развивается. Вот краткий обзор основных типов:

  • Инструменты автозавершения кода: помогают разработчикам, предлагая продолжение по мере набора кода. Примеры: GitHub Copilot и Amazon CodeWhisperer.

  • Инструменты генерации кода: создают целые фрагменты кода или функции на основе описаний на естественном языке. Популярные примеры: Claude и ChatGPT.

  • Инструменты преобразования дизайна в код: стремятся превращать визуальные макеты (например, из Figma) в функциональный код. Яркий пример в этой категории — Visual Copilot.

  • Инструменты для обеспечения качества кода и безопасности: помогают выявлять и устранять потенциальные уязвимости и проблемы с качеством кода. Пример — Snyk.

  • IDE с ИИ-поддержкой: среды разработки с встроенными возможностями искусственного интеллекта, такие как Cursor или Visual Studio Code с ИИ-расширениями.

  • Инструменты для совместного написания кода: направлены на то, чтобы включить всю команду в рабочий процесс, например, с помощью визуальных платформ для разработки.

  • ИИ-агенты: более перспективные проекты, такие как Micro Agent, которые стремятся выполнять более сложную работу по созданию кода, чем просто его генерация или его автозавершение.

Каждая из этих категорий охватывает различные аспекты процесса разработки: от начального дизайна до написания кода, обеспечения качества и командного взаимодействия. Несмотря на значительный потенциал этих инструментов для оптимизации рабочих процессов и повышения продуктивности, у них есть ограничения, которые мы рассмотрим в следующем разделе.

Почему ИИ-инструменты оказываются недостаточно эффективными

Текущие инструменты на базе искусственного интеллекта не оправдывают своих обещаний по нескольким причинам:

Отсутствие осведомлённости о контексте

ИИ-модели имеют ограниченное понимание конкретно вашей кодовой базы, системы дизайна и практик разработки. Они не могут по-настоящему понять, как в вашей команде пишется код или как интегрируются ваши системы. Это отсутствие контекста означает, что, хотя искусственный интеллект и может генерировать функциональный код, он часто не соответствует стандартам, принятым в вашей команде, или не использует существующие компоненты и API, что делает его бесполезным.

Здорово, когда Claude может сгенерировать рабочий пользовательский интерфейс, но если он не использует ваш код и компоненты, то в чём смысл? Это просто крутая демо-версия и одноразовый код.

Проблемы надёжности и согласованности

Чтобы быть полезным, код должен быть на 100% правильным — даже небольшие ошибки могут привести к сбоям в системе. Текущие ИИ-инструменты недостаточно надёжны для многих реальных сценариев использования. Они могут генерировать код, который на первый взгляд кажется правильным, но содержит неочевидные ошибки или неэффективности, которые сложно обнаружить и исправить.

Проблемы с интеграцией

Многие ИИ-инструменты существуют как отдельные продукты, а не как полноценно интегрированные решения в существующие рабочие процессы. Это создаёт трение при их использовании на практике — разработчики часто вынуждены переключаться между своей обычной средой разработки и этими инструментами, что может нарушить рабочий процесс и снизить продуктивность.

Ограниченность фокуса

Инструменты часто сосредоточены на решении отдельных задач (например, автозавершение кода), а не на улучшении всего процесса разработки от начала до конца. Хотя такие точечные решения могут быть полезны, они не решают более широкие проблемы разработки программного обеспечения — от идей до деплоя.

Переосмысляя подход к ИИ-инструментам для разработчиков

Чтобы по-настоящему раскрыть потенциал искусственного интеллекта в разработке программного обеспечения, нам нужно переосмыслить подход. Вместо того, чтобы рассматривать искусственный интеллект как волшебное решение, способное заменить разработчиков, мы должны рассматривать его как мощный инструмент, способный расширить человеческие возможности и упростить рабочие процессы на всех этапах жизненного цикла разработки ПО.

Сделать результаты работы искусственного интеллекта действительно полезными

Сгенерированный код должен бесшовно интегрироваться с существующими кодовыми базами и соответствовать принятым в команде стандартам. Результаты должны быть готовыми к использованию в продакшене, а не просто отправной точкой. На практике это означает, что ИИ-инструменты должны понимать и учитывать ваши дизайн-системы, библиотеки компонентов и стандарты кодирования. Они должны генерировать код, который выглядит и работает так, как если бы его написал член вашей команды.

Упрощение рабочих процессов от начала до конца

Вместо изолированных инструментов нам нужны ИИ-помощники, которые понимают весь жизненный цикл разработки — от идеи до деплоя. Эти помощники должны быть в состоянии взять общую концепцию или дизайн-макет и провести его через весь процесс разработки, справляясь с рутинными задачами, позволяя людям сосредоточиться на креативном решении проблем.

Сохранение человеческой креативности в процессе

Искусственный интеллект должен заниматься рутинными и повторяющимися задачами, освобождая ресурсы команды на креативную работу и решение сложных интересных задач. Это вспомогательный инструмент, а не замена разработчиков.

Оснащение ИИ-инструментами всей команды

Искусственный интеллект должен не только повышать продуктивность разработчиков, но и давать новые возможности всем, кто участвует в создании программного обеспечения. Представьте: дизайнеры могут напрямую вносить изменения в код для UI, маркетологи обновляют посадочные страницы без тасков разработке, а менеджеры продукта сами прототипируют новые фичи. Демократизируя процесс разработки, мы можем разрушить барьеры между ролями и ускорить путь от идеи до работающего программного обеспечения.

Все лучшие практики управления разработкой можно освоить в рамках онлайн-курсов от практикующих экспертов отрасли — подробности в каталоге. Также приглашаем на бесплатные открытые уроки:

  • 23 декабря: «Деливери-менеджеры не нужны» и другие мифы IT-сообщества. Получим четкое представление об этой роли, задачах и перспективах. Подробнее

  • 25 декабря: Технологии NLP сегодня — основные тренды в области и перспективы развития. Подробнее

© Habrahabr.ru