У нас в ИТ-команде Сравни есть принцип: в любой непонятной ситуации вместо того, чтобы раз за разом решать похожие проблемы, лучше сделать инструмент, который поможет системно решать целый класс таких задач. Шаблонизация, автоматизация занимают важное место у нас в бэклогах. Поэтому эксперименты с Copilot от GitHub и OpenAI, наверное, были для нас неизбежны.

В этой статье хотим поделиться обратной связью от коллег с их впечатлениями от Copilot – сравнить с вашим опытом и, возможно, добавить аргументов, чтобы попробовать этот инструмент (или окончательно убедиться, что делать этого не нужно — тут уж каждый решает сам).

Copilot позиционируется как ИИ-ассистент разработчика, который превращает запросы на английском языке в строки кода на одном из десятков доступных языков программирования. Инструмент легко интегрируется с популярными средами разработки, такими как Visual Studio Code, Neovim или IDE от JetBrains. 

Создатели утверждают, что скорость разработки с Copilot увеличивается в среднем на 55%, а рекомендации ассистента соответствуют специфике проекта и принятому в компании (или на отдельном проекте) стилю написания кода. Так это или нет — мы решили проверить на собственном опыте.

Мы тестировали Copilot с разными языками, на разных платформах (Android, iOS, web) и на нескольких проектах.

Что понравилось

1. Ускорение процесса написания шаблонного кода – экономия времени и усилий

Судя по отзывам ребят из команды, Copilot хорошо справляется с автоматизацией написания кода для рутинных и повторяющихся задач, таких как создание тестов, маппингов, HTML-разметки. 

  • Ассистент очень хорош при создании шаблонных структур, с такими вещами как объявление и реализация ViewModel, создание каркаса экрана фичи, имплементации мапперов (Android-разработчик).

  • Очень помогает в ускорении рутинной работы — написание маппингов, тестов, комментариев к коду (ведущий разработчик .Net).

  • Хорошо дописывает повторяющиеся операции вроде тестов или логирования (ведущий разработчик .Net).

  • Хорошо справляется с генерацией каких-то повторяющихся, шаблонных кусков текста, например, с HTML-разметкой. (бэкенд-разработчик)

  • Повторяющийся код подсказывает хорошо (Android-разработчик).

2. Генерация идей, полезные предложения на основе существующего кода 

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

  • Довольно много всего может накидать, если совсем нет идей (Android-разработчик).

  • Помогает сдвинуть мысль (ведущий разработчик .Net).

  • Может предложить готовую функцию или большой кусок функции. Остаётся только проверить её. Чувствуется, что он старается придерживаться стиля, принятого в проекте. Хотя не всегда получается (бэкенд разработчик).

  • Copilot учится на коде, который уже есть в проекте, и во время написания кода иногда предлагает довольно большие куски, которые теперь не нужно писать вручную (Android-разработчик).

3. Написание Unit-тестов, документации и комментариев

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

  • Хорошо генерирует Unit-тесты, особенно удаются табличные тесты в Go (бэкенд-разработчик).

  • Понравилось писать с ним тесты и комментарии к коду (Android-разработчик).

  • Понравилась лёгкость написания комментариев (Android-разработчик).

  • Хорошо получается генерировать документацию. Немного хуже дело обстоит с комментариями: видно, что он старается придумать объяснение, исходя не из кода (бэкенд-разработчик).

Что не понравилось

1. Не всегда удовлетворительная точность при решении нестандартных задач

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

  • Работает не идеально, иногда предлагает неправильный код (Android-разработчик).

  • Бывают неактуальные подсказки по специфичной разработке. Некорректность подсказок в случае, когда пишешь код, не являющийся шаблонным, но который очень на него похож, с точки зрения Copilot. (Android-разработчик).

  • Угадывает он далеко не всегда и не хватает какого-то способа явно попросить его предложить другой вариант (бэкенд-разработчик).

  • В сложных кейсах с большой вероятностью это будет не совсем то, что нужно, следовательно, будет потрачено время на правки предлагаемого кода (Junior Android-разработчик). 

2. Не всегда предлагаемый код соответствует контексту

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

  • Не всегда всё хорошо с контекстом подсказок, иногда бывают очень релевантны, а иногда вообще не к месту (Android-разработчик).

  • Иногда реализация устаревшая, приходится переписывать (Android- разработчик).

3. Медленная скорость работы

  • Ассистент не всегда отвечает быстро и порой ожидание составляет слишком много времени и проще написать всё руками (Android-разработчик).

  • Регулярно отваливается синхронизация (Junior Android-разработчик).

4. Отсутствие коробочной интеграции с XCode

Идея замечательная, но из-за необходимости прибегать к стороннему софту и костылям для интеграции Copilot в Xcode не было возможности как следует с ним поиграться. В какой-то момент этот сторонний костыль сломался, в разумные сроки починить его не удалось, и я просто забил и продолжил работать, как работал раньше, потому что были куда более приоритетные вещи (iOS-разработчик).

Выводы

В целом, подавляющее большинство опрошенных сотрудников оценило свои впечатления от работы с Copilot как положительные.

Диаграмма ответов в Формах. Вопрос: Как вы оцениваете свой опыт работы с Copilot?. Количество ответов: 8 ответов.
Как вы оцениваете свой опыт работы с Copilot?

Суммируя опыт взаимодействия с Copilot, можно выделить следующие особенности:

  • Скорость написания кода значительно увеличилась (по субъективным ощущениям, примерно на 30%).

  • Подкидывает полезные идеи реализаций.

  • Скорость работы не всегда соответствует ожиданиям. 

  • Иногда выдает нерелевантные подсказки в случае специфических или нестандартных задач.

Что касается дальнейшего применения Copilot на проектах, большинство опрошенных коллег поддержали эту идею: 

Диаграмма ответов в Формах. Вопрос: Готовы ли продолжать использовать Copilot?. Количество ответов: 8 ответов.
Готовы ли продолжать использовать Copilot?

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

На этот счёт здорово высказался Руслан, наш Android-разработчик:

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

Первый этап – это вау-эффект, когда ты видишь, как Copilot начинает предлагать тебе свой код, дополняет тебя в каждой строчке, кажется, что вот оно, теперь я буду разрабатывать гораздо быстрее и начну меньше стучать по клавиатуре. Но это только на первый взгляд, дальше наступает другой этап – недоумение. 

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

Однако со временем ты всё больше понимаешь, как лучше всего с ним работать и наступает этап гармонии. 

Самый большой профит от Copilot можно получить при написании так называемого boiler plate (шаблонного) кода, тут экономится немало времени. Также можно быстро реализовывать какую-то несложную логику (можно описать комментарием), с этим Copilot справится неплохо. 

В сложных же кейсах с большой вероятностью это будет не совсем то, что нужно; следовательно, будет потрачено время на правки предлагаемого кода. Но при этом с другой стороны у вас уже будет “скелет” (каркас), что можно рассматривать как плюс. 

В итоге имеем хороший инструмент – "подсказчик", но всё ещё не полноценного "ассистента". Думаю, буду продолжать его использовать и наблюдать, как он будет развиваться дальше.

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


  1. ivankudryavtsev
    12.09.2023 16:03

    Для Rust работает весьма неплохо.

    Видели бесконечную рекурсию для Python. В статье все по делу, в общем-то. Скорость существенно прирастает.


  1. Kuch
    12.09.2023 16:03
    +1

    не хватает какого-то способа явно попросить его предложить другой вариант

    В копайлоте если что есть шорткат для генерации другого ответа или сгенерировать 10 предложенний кода (Правда часто их меньше, но все равно). Посмотрите в настройке шорткатов в вс коде


  1. zartdinov
    12.09.2023 16:03
    +4

    Не знаю, мне кажется, больше похоже на код-ревью, а не программирование, примерно так же утомляет.


  1. Anocean
    12.09.2023 16:03
    +1

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


    1. Firsto
      12.09.2023 16:03

      Как на лайвкодинге в блокноте иногда впадаешь в ступор без автокомплита при оформлении стандартных конструкций типа цикла.)


  1. AirLight
    12.09.2023 16:03

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


  1. Suor
    12.09.2023 16:03

    Будут писать ещё больше бойлерплейта, вместо того, чтобы абстрагировать его как-то. А потом эти портянки поддерживать.