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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Инструменты автозавершения кода: помогают разработчикам, предлагая продолжение по мере набора кода. Примеры: 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 сегодня — основные тренды в области и перспективы развития. Подробнее

Комментарии (7)


  1. RolexStrider
    20.12.2024 13:07

    ЧЬИХ ожиданий? "говорили они" - кто говорил? "не совсем так, как мы ожидали" - кто это "мы?" Менеджеры среднего звена, которые возомнили что это такой себе "Silver Bullet" чтобы "срезать косты"?


  1. leon-mbs
    20.12.2024 13:07

    потому что ожидания строятся на основе хайпа а не здравого смысла.

    ИИ - это очередная "серебряная пуля"


  1. JBFW
    20.12.2024 13:07

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

    И проблема, если действительно не знает, понадеявшись на мощь ИИ...


    1. PATRI0T
      20.12.2024 13:07

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


  1. AYamangulov
    20.12.2024 13:07

    Искусственный интеллект должен заниматься рутинными и повторяющимися задачами

    Вот с этим полностью согласен, хотя, возможно, мне просто пока не попадались подходящие кейсы. Мне приходилось пользоваться только двумя - Яндекс поиск с нейро и Perplexity. В общем-то я ставил очень ограниченные задачи - просто найти образцы применения каких-то API каких-то конкретных методов или найти сами методы по словесному описанию требуемых действий. Вот тут получил приятный сюрприз - такой поиск минимум в разы быстрее и точнее, чем если искать самому в документации. Но!!! Нужно уже владеть предметной областью задачи самому и уметь правильно сформулировать вопрос для ИИ, иначе он не поймет, чего ты хочешь. Perplexity еще и хорошо дает развернутое объяснение, если просто добавить к вопросу "объясни подробно, почему" в конце. На более сложных задачах уже начал ловить ошибки. Например, мне нужно было посчитать не сложную, но занудно долгую задачу по теории вероятности. Perplexity посчитал все строго по формулам как будто правильно, но ответ показался мне сомнительным (просто из опыта, я приблизительно знал, в каких диапазонах должны были бы лежать результаты). Я перепроверил результаты вручную и обнаружил у него элементарную ошибку - в сумме ряда элементов почему-то был пропущен последний элемент ряда. Притом, что логически все было абсолютно правильно в его расчете. Тут же пишу ему: "Дорогой, ты обсчитался". А он мне: "Прошу прощения, действительно, вот вам исправленное решение". Меня это очень удивило. Странно, но более подобной ошибки Perplexity мне уже не выдавал ни разу. Вот я и думаю, что это было - то ли он пока еще недообученный в достаточной степени, то ли это сознательно заложенная в алгоритм проверка с его стороны для меня самого - что-то вроде "капчи", а действительно ли человек спрашивает задачу у него, или что-то еще?

    Позже я пробовал у разных ИИ просить писать вот прямо код. Но в основном получал шаблонный без учета инфраструктурных особенностей (я пишу в основном ETL на Apache Spark), код получался неоптимальный никак. Поэтому такие попытки пока забросил, решил сделать паузу на полгода-год, возможно, за это время ИИ сильно разовьются и продвинутся в этом. Но оставил для себя возможность пользоваться им, как улучшенным поиском по документации - тут он вне конкуренции и превосходит, как правило, собственный ручной поиск, ибо не хуже, но быстрее. И уже помогает в работе очень сильно, ускоряет рутину очень заметно.

    Однако, не будем закоснелыми ретроградами. Если инструмент недостаточно продвинут сегодня, это не значит, что через год-другой он не выйдет совсем на другой уровень развития. Во всяком случае, я надеюсь.


    1. SanyaZ7
      20.12.2024 13:07

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


  1. cupraer
    20.12.2024 13:07

    Машина затем находит закономерности и генерирует свою собственную логику, вдохновлённую тем, как работают человеческие и животные мозги.

    Жалко, конечно, что мы не знаем доподлинно, как работает человеческий мозг, а потому ни подтвердить, ни опровергнуть этот тезис невозможно.

    Взять вот загадку Эйнштейна, например. На бумаге (в экселе) — её легко решит за десять минут каждый второй пятиклассник. В уме — фактически никто (мне потребовалось больше часа времени, нечеловеческое упорство и я чувствовал себя потом так, словно разружал вагоны сутки напролет). LLM ее решит, конечно, без проблем, рано, или поздно (если еще нет).

    Если бы мы действительно ориентировались на работу человеческого мозга, важнейшим тестом для LLM была бы неспособность решить эту задачу. Опросите умных коллег и убедитесь сами: это — более чем часто — не под силу очень одаренным людям.

    Нейронные модели в том виде, в котором мы их имеем сегодня, — тупиковая ветвь развития ИИ. Пора признать, что хороший поиск и Т9 в одном флаконе — это не то, как работает мозг. Память отвечает за эрудицию, но никак не за интеллект: есть гениальные математики, не способные запомнить имя племяника.

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