AI-плагины для разработки: зачем нужны и как использовать

12 декабря 2023
1410
image
image
Илья Воропаев backend-разработчик
AI-плагины для разработки: зачем нужны и как использовать
Привет! Меня зовут Илья, я ― тимлид в команде разработки Uplab. Наша команда занимается разработкой и поддержкой сайтов на Bitrix. В последний год стало популярным использовать разнообразные плагины на основе искусственного интеллекта в разработке. Некоторые даже считают, что совсем скоро ИИ заменит разработчиков.

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

Может ли искусственный интеллект заменить разработчиков?

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

Все потому, что в 2022 году появился ChatGPT, а также полноценно вышел проект Copilot от GitHub, который автоматизирует написание кода на Python, JavaScript и других популярных языках.

На конференции GitHub в 2023 году сообщили, что:
ИИ ускоряет разработку на 55%
ИИ-ассистенты повышают производительность разработчиков на 30%
генеративные инструменты способны добавить в мировую экономику мощность, эквивалентную 15 млн разработчиков.
Ожидается, что разработчики будут использовать ИИ-плагины для решения рутинных задач ― заодно это поможет избежать выгорания. А в будущем возможно искусственный интеллект сможет заменить нас полностью.

В реальности такое возможно, но есть нюансы:
02
Непосредственное написание кода занимает меньшую часть рабочего времени программиста. И чем он опытнее, тем меньше надо просто писать код, ― основное время уходит на продумывание решений или поиск ошибок.
Если ИИ ускоряет программистов вдвое, возможно проблема в архитектуре проекта: там очень много шаблонного кода, от которого надо избавиться;
01
Нейросети быстро развиваются и при правильном промте могут писать неплохой код, который можно использовать в разработке. Но также часто они пишут чушь или не работающий код.
Если вы пробовали использовать нейросети для работы с текстом, то наверняка сталкивались с тем, что они могут отвечать совсем не о том, о чем их спрашивают, или давать формально правильный ответ, при этом совершенно бесполезный и бессмысленный. С кодом так же.

Несмотря на то, что эти решения называют «искусственным интеллектом», никакого интеллекта там нет. Генеративные нейронные сети пытаются предсказать наиболее вероятную последовательность символов или слов.
Как в строке Google-поиска, так и при использовании плагинов, ИИ угадывает, что должно быть дальше, но не понимает подходит ли оно по смыслу. Потому что на самом деле не разбирается ни в какой конкретной сфере и не понимает контекст запроса.

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

Основные способы применения нейросетей в разработке

Поговорим о том, как применять нейросети в работе, чтобы повысить эффективность и качество разработки.

Автодополнение кода

Раньше разработчики писали код в простых и легких редакторах как notepad++. Потом стали появляться специализированные IDE для разработки ― тяжелые требовательные приложения, которые содержали много дополнительного функционала разной степени полезности.

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

В использовании нейросетей тот же этап ― кто-то пользуется, кто-то отмахивается от них, но скоро мы придем к тому, что это станет новым стандартом. И, независимо от скорости разработки, будет странным не использовать удобный инструмент.

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

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

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

Поиск решений

Типичная ситуация в работе программиста:
02
написал их в поиск;
03
попал на форум или stackowerflow;
столкнулся с ошибкой или возник вопрос;
01
почитал;
04
если повезло, нашел ответ, если нет, пошел искать дальше.
05
Сейчас можно закинуть свой вопрос в чат с искусственным интеллектом, не выходя из IDE, и получить ответ на свой вопрос. При этом не обязательно подбирать слова для правильного запроса, бывает достаточно простого человеческого «напиши на php функцию, которая берет из папки /report/ отчеты в формате dmY. csv парсит их в json и отправляет на внешний api запрос с количеством обработанных записей».

Поиск ошибок

Обычно много времени уходит на то, чтобы найти ошибку в коде. Системные сообщения об ошибке не всегда информативны, а бывает, что указывают вообще не на то, что надо.

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

Рефакторинг

Важная часть работы разработчика ― рефакторинг кода, то есть переработка кода, чтобы решить какие-то проблемы с ним: упростить, оптимизировать, найти ошибки после обновления.

Это сложная работа, которая требует от разработчика опыта и внимательности: надо исправить выявленные проблемы, не наплодить новых и не сломать совместимость кода на проекте.

С относительно простым кодом ИИ хорошо справляется, но за ним все равно надо перепроверять.

Например, вот исходный код:

function getUserNameByID($id)
{
   if (empty($GLOBALS[getUserNameByID'][$id]) && ($arUser = CUser::GetByID($id)->Fetch()))
      $GLOBALS[getUserNameByID'][$id] = trim(implode(' ', [$arUser['LAST_NAME'], $arUser['NAME']]));
   return $GLOBALS[getUserNameByID'][$id];
}

Просим отрефакторить.

function getUserNameByID($id)
{
   if (empty($GLOBALS['getUserNameByID'][$id])) {
      $arUser = CUser::GetByID($id)->Fetch();
      $GLOBALS['getUserNameByID'][$id] = trim(implode(' ', [$arUser['LAST_NAME'], $arUser['NAME']]));
   }

   return $GLOBALS['getUserNameByID'][$id];
}

И получаем почти тот же код с комментарием:

Конечно! Вот отрефакторенный код:
В исправленном коде я добавил фигурные скобки {} вокруг оператора if, чтобы улучшить читаемость и сопровождаемость. Я также сделал отступы внутри оператора if для лучшей организации кода.

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

Решение сложных задач

Использование ИИ может дать хороший профит по скорости, когда надо писать на незнакомом стеке, например, помогает писать bash-скрипты, lua-конфигурации, настройки для Dockerfile.

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

Вывод

При правильном применении искусственный интеллект может быть полезным в работе программиста, но не стоит ждать от него чудес. Это не волшебная палочка и работает немного сложнее, чем «окей гугл, вот ТЗ, сделай мне сайт». ИИ-плагины ― это рабочий инструмент, которым важно уметь пользоваться. Скоро он станет повсеместным и разработчики, которые не используют его, будут проигрывать тем, кто использует.

Но, как MidJourney не искоренила дизайнеров, а помогает им в работе, так и ИИ-кодогенераторы не заменят программистов, а станут хорошим рабочим инструментом для них.

Расскажите
о вашем проекте