Большинство сценариев использования генеративного ИИ (GenAI) разработчиками сосредоточено на генерировании кода. Натен Харви, специалист Google по работе с разработчиками, рассказал порталу The New Stack о том, как ваша команда разработчиков ПО может повысить продуктивность с помощью GenAI прямо сейчас, а с чем, возможно, вам стоит немного повременить.

Недавний опрос Atlassian «State of Developer Experience Report 2024» показал, что руководители считают ИИ наиболее эффективным способом повышения производительности и удовлетворенности разработчиков. В то же время две трети разработчиков не отмечают значительного повышения производительности с помощью ИИ.

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

Почему GenAI ведет себя так угодливо

В своем нынешнем состоянии GenAI слишком стремится угодить.

«Я склонен думать об инструментах GenAI как о стажере или новичке, только что окончившем колледж, который очень хочет ответить на все вопросы, которые вы задаете, — говорит Харви, — и хочет ответить на них быстро — именно это стремление очень, очень важно».

Когда вы общаетесь с GenAI на естественном языке, его задача номер один — сказать вам то, что, по его мнению, вы хотите услышать. Он дает ответ, основываясь не на точности, а на вероятности того, что его ответ будет принят.

Академическое исследование, проведенное в прошлом году в Корнельском университете, показало, что 52% ответов ChatGPT в области программной инженерии оказались неверными — и эти галлюцинации были убедительными.

Конечно, отмечает Харви, со временем стажеры становятся младшими, а затем старшими инженерами, поэтому вполне разумно, что благодаря стремительному развитию инноваций в области ИИ эти боты тоже вскоре станут более точными. Он приводит пример того, как Gemini от Google теперь позволяет пользователям «обосновывать» ответ, что на жаргоне GenAI означает приводить ссылки — это очень важно для раскрытия «черного ящика» ИИ.

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

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

Основные риски кода, генерируемого ИИ

В настоящее время GenAI также не заточен на безопасность, особенно если вы явно не просите его предоставить безопасный код.

Соня Мойсет, штатный специалист по безопасности компании Snyk, дала семи самым популярным ИИ-генераторам — GitHub Copilot, Amazon CodeWhisperer, Perplexity AI, Claude 2.0, Mistral AI, ChatGPT 3.5 и Google Gemini — одно и то же задание: «Создайте базовое приложение Express, которое принимает имя в параметрах запроса и возвращает HTML-страницу, показывающую пользователю его имя».

Все семь инструментов GenAI, рассказывает она, ответили пригодным для использования кодом, но каждый из них был уязвим для межсайтового скриптинга (XSS). Мойсет ответила GenAI: «Вы знаете, что этот код небезопасен?» Каждый инструмент согласился и затем предоставил нужный пакет для устранения проблемы.

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

GenAI также лишен контекста того, кто его использует. Младший разработчик, скорее всего, сочтет код, сгенерированный для Мойсет, достаточным и готовым к использованию. Для того чтобы заметить XSS-уязвимость, нужен более опытный разработчик — возможно, даже специалист по безопасности.

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

Было бы естественно относиться к GenAI как к StackOverflow. По крайней мере, все члены команды должны получить рекомендации о том, как вести разговор с этими чат-ботами, чтобы убедиться, что они учитывают ваши требования к качеству и безопасности и всегда обосновывают подсказки в контексте.

Подумайте о том, чтобы пойти еще дальше и использовать GenAI в качестве третьего в тройке — вместо парного программирования — в ситуации, когда вы ставите младшего разработчика и ваш GenAI в тройку с более опытным разработчиком, чтобы усилить не только обучение, но и тщательный контроль качества кода с самого начала.

«Это действительно означает, что вы рассматриваете GenAI как еще один инструмент в своем арсенале, еще одну вещь, которую можно взять с собой, — говорит Харви. — Сегодня самое время экспериментировать с ИИ и учиться тому, как лучше с ним взаимодействовать и какую пользу он может принести вам и вашей команде».

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

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

Сейчас создается как никогда много низкокачественного кода. Тем самым увеличивается технический долг.

Успех зависит от контекста

«Если бы ваш работодатель перестал платить за ассистента по кодированию, продолжили ли вы платить за него самостоятельно ради повышения производительности?», — этот вопрос Харви задает аудитории на каждой конференции, на которой выступает, и почти все поднимают руку, чтобы ответить: «Безусловно».

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

GenAI-инструментарий очень хорошо объясняет вещи. Но только в том случае, если вы четко представляете, что вам нужно. Харви приводит пример: «Когда вы заходите в систему и хотите устранить неполадки, не просите GenAI просто объяснить вам запись в журнале. Вот как звучит профессиональный запрос: „Вы — инженер по надежности объекта, который является экспертом в том, как все работает в этом приложении. Вот журнал. Расскажите мне, что именно здесь происходит“».

Ответы будут более качественными и подходящими для разных типов персон, если вы уделите время контексту.

«Если бы вы попросили меня: „Объясните мне этот код так, как будто я никогда раньше не видел этого языка или как будто я старший инженер по этому конкретному фреймворку“, — продолжает Харви, — то получили бы совершенно разные ответы. И если мы предоставим этот контекст ИИ, мы также получим совершенно разные ответы».

Призывайте всех не просто спрашивать в контексте, но и просить ИИ-ботов объяснять свои решения.

«„Расскажите мне, почему вы сделали такой выбор. Какими еще соображениями вы руководствовались, когда писали эту строку кода или эту конкретную функцию?“ Мы должны начать думать об этих ИИ-ботах не только как о стажерах, но и, в некоторой степени, как о наставниках. А когда мы задаем правильные вопросы наставнику или ментору, мы получаем лучшие ответы», — говорит Харви.

Такой подход включает в себя допрос генератора кода ИИ по поводу его ответов, выяснение крайних случаев и любых рисков.

Как программировать в паре с GenAI

Генеративный ИИ также может помочь вам задавать лучшие вопросы.

Харви приводит пример коллеги, который входил в курс дела с новой кодовой базой: «Он задал боту много-много вопросов, причем таких, которые ему было бы неудобно задать другому инженеру в команде. Благодаря этому взаимодействию он стал гораздо увереннее в вопросах, которые мог бы задать другому инженеру. Это действительно придало ему уверенности».

По словам коллеги Харви, разговоры с коллегами-инженерами в итоге стали гораздо более продуктивными после подготовки с ботом.

Аналогичным образом, GenAI отлично справляется с распутыванием и объяснением сложностей. Если позволить чат-боту безопасно обучиться на вашей старой кодовой базе, то GenAI сможет проводить беседы с инженерами, приступающими к работе.

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

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

«Понимание кода — это одно, но документирование его таким образом, чтобы кто-то другой, кто придет после нас, смог его понять, — это еще более мощная задача», — отмечает Харви, имея в виду в том числе различные заинтересованные стороны с разной технической подготовкой.

«Последние четыре года мы изучаем возможности внутренней документации в плане помощи командам в создании, эксплуатации, запуске и обновлении программных приложений практически любого типа, — говорит Харви о ежегодном отчете исследовательской программы DORA (DevOps Research and Assessment), в которой принимает активное участие. — Внутренняя документация — это одна из тех суперсил, которые усиливают все, что мы делаем с технической точки зрения, а также с точки зрения культуры и процессов. Она действительно позволяет добиться гораздо более высокой производительности, удовлетворенности работой и меньшего выгорания».

Отвлечение или польза?

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

Пожалуйста, избегайте ИИ ради ИИ.

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

GenAI не только помогает переводить иностранные языки, но и может облегчить общение между заинтересованными сторонами. Харви приводит пример команды, которая постоянно обсуждала одну функцию, но она так и не была исключена из бэклога. В конце концов технический руководитель этой команды сказал: «Знаете что? Это постоянно всплывает. Я пойду и попрошу ИИ-бота помочь мне с этим». Он описал ИИ некоторые из разговоров, которые они вели между собой. А затем попросил бота написать дюжину пользовательских историй. «Как инженеры, мы умеем разбивать большие проблемы на более мелкие. ИИ тоже становится хорош в этом», — отметил техлид. Потом он передал сгенерированные ИИ двенадцать пользовательских историй владельцу продукта, который одобрил восемь из них, а затем добавил еще три своих, прежде чем расставить приоритеты.

«Эта команда сразу же в следующем спринте или итерации смогла поработать над новой функцией, которую они обсуждали уже несколько месяцев, но никак не могли начать, — говорит Харви, — пока GenAI не помог им».

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

Не только технологии, но и люди и процессы могут выиграть от обновления GenAI. Харви приводит в пример «бота-толкателя», служащего для ускорения проверки кода.

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