Следует ли разработчикам использовать искусственный интеллект для создания кода? Независимый эксперт Кристофер Тоцци обсуждает на портале ITPro Today плюсы и минусы кодирования с помощью ИИ.

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

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

Что такое кодирование с помощью ИИ

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

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

Насколько нова автоматическая генерация кода

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

Отличие генерации кода с помощью ИИ, однако, заключается в том, что она не полагается, как средства low-code/no-code, на готовые модули кода, позволяющие разработчикам создавать приложения без написания большого количества кода (или вообще без кодирования). Вместо этого инструменты кодирования с помощью ИИ генерируют пользовательский код полностью с нуля.

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

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

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

В настоящее время инструменты или услуги по кодированию с помощью ИИ предлагают множество поставщиков. Вероятно, самыми известными являются GitHub Copilot (который основан на OpenAI Codex) и Microsoft Intellicode. Более мелкие компании, включая Kite и Tabnine, также предлагают готовые к производству инструменты для генерации кода с помощью ИИ.

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

Плюсы и минусы кодирования с помощью ИИ

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

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

С другой стороны, у кодирования с помощью ИИ есть явные недостатки:

  • Низкая точность. Даже продвинутые решения для кодирования с помощью ИИ, такие как OpenAI Codex, по словам их разработчиков, генерируют точный код только в 37% случаев. Это явно не соответствует производительности, необходимой программистам для того, чтобы позволить ИИ полностью встать за штурвал (что, честно говоря, не является тем, что эти решения обещают в настоящее время — не зря же Copilot не называется Autopilot).
  • Обширная проверка кода. Разработчикам приходится принимать (или отклонять) автоматически сгенерированный код в процессе работы. Такая необходимость постоянно просматривать код может отвлекать некоторых разработчиков. Возможно, они смогут работать более эффективно, если будут писать весь код вручную.
  • Юридические и этические вопросы. Один из самых сложных вопросов, связанных с инструментами кодирования с помощью ИИ, заключается в том, что, поскольку они обучаются на основе открытого исходного кода, то, по сути, воспроизводят код, который был написан в рамках другого проекта. Это поднимает юридические и этические вопросы, которые еще не нашли решения. Если ваш инструмент кодирования с помощью ИИ создает код, который очень похож на код в другом репозитории GitHub, делает ли это вас плагиатором или нарушителем лицензии? Пока мы этого не знаем, но, возможно, узнаем, когда люди начнут судиться друг с другом по этим вопросам.

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

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