Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
У нас в ИТ-команде Сравни есть принцип: в любой непонятной ситуации вместо того, чтобы раз за разом решать похожие проблемы, лучше сделать инструмент, который поможет системно решать целый класс таких задач. Шаблонизация, автоматизация занимают важное место у нас в бэклогах. Поэтому эксперименты с Copilot от GitHub и OpenAI, наверное, были для нас неизбежны.
В этой статье хотим поделиться обратной связью от коллег с их впечатлениями от Copilot – сравнить с вашим опытом и, возможно, добавить аргументов, чтобы попробовать этот инструмент (или окончательно убедиться, что делать этого не нужно — тут уж каждый решает сам).
Copilot позиционируется как ИИ-ассистент разработчика, который превращает запросы на английском языке в строки кода на одном из десятков доступных языков программирования. Инструмент легко интегрируется с популярными средами разработки, такими как Visual Studio Code, Neovim или IDE от JetBrains.
Создатели утверждают, что скорость разработки с Copilot увеличивается в среднем на 55%, а рекомендации ассистента соответствуют специфике проекта и принятому в компании (или на отдельном проекте) стилю написания кода. Так это или нет — мы решили проверить на собственном опыте.
Мы тестировали Copilot с разными языками, на разных платформах (Android, iOS, web) и на нескольких проектах.
Что понравилось
Ускорение процесса написания шаблонного кода – экономия времени и усилий
Судя по отзывам ребят из команды, Copilot хорошо справляется с автоматизацией написания кода для рутинных и повторяющихся задач, таких как создание тестов, маппингов, HTML-разметки.
Ассистент очень хорош при создании шаблонных структур, с такими вещами как объявление и реализация ViewModel, создание каркаса экрана фичи, имплементации мапперов (Android-разработчик).
Очень помогает в ускорении рутинной работы — написание маппингов, тестов, комментариев к коду (ведущий разработчик .Net).
Хорошо дописывает повторяющиеся операции вроде тестов или логирования (ведущий разработчик .Net).
Хорошо справляется с генерацией каких-то повторяющихся, шаблонных кусков текста, например, с HTML-разметкой. (бэкенд-разработчик)
Повторяющийся код подсказывает хорошо (Android-разработчик).
Генерация идей, полезные предложения на основе существующего кода
Copilot использует методы машинного обучения для анализа существующего кода и на основе этого может генерировать предложения и завершать фрагменты кода с сохранением стилистики. Это также повышает скорость разработки.
Довольно много всего может накидать, если совсем нет идей (Android-разработчик).
Помогает сдвинуть мысль (ведущий разработчик .Net).
Может предложить готовую функцию или большой кусок функции. Остаётся только проверить её. Чувствуется, что он старается придерживаться стиля, принятого в проекте. Хотя не всегда получается (бэкенд разработчик).
Copilot учится на коде, который уже есть в проекте, и во время написания кода иногда предлагает довольно большие куски, которые теперь не нужно писать вручную (Android-разработчик).
Написание 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, можно выделить следующие особенности:
Скорость написания кода значительно увеличилась (по субъективным ощущениям, примерно на 30%).
Подкидывает полезные идеи реализаций.
Скорость работы не всегда соответствует ожиданиям.
Иногда выдает нерелевантные подсказки в случае специфических или нестандартных задач.
Что касается дальнейшего применения Copilot на проектах, большинство опрошенных коллег поддержали эту идею:
В конечном итоге принимавшие участие в эксперименте люди из ИТ-команды Сравни сошлись во мнении: ИИ-ассистенты для написания кода становятся неотъемлемой частью рабочего инструментария, причем не в близком будущем, а уже сейчас. Заменить разработчиков они пока что не могут, а вот помочь – вполне. Так что остаётся проходить через все сопутствующие стадии принятия, и это ок.
На этот счёт здорово высказался Руслан, наш Android-разработчик:
В общем и целом, впечатления скорее положительные. Copilot по задумке создателей должен был стать неким "ассистентом" в разработке и написании кода. И немного поработав с этим ассистентом, я могу выделить несколько этапов наших отношений.
Первый этап – это вау-эффект, когда ты видишь, как Copilot начинает предлагать тебе свой код, дополняет тебя в каждой строчке, кажется, что вот оно, теперь я буду разрабатывать гораздо быстрее и начну меньше стучать по клавиатуре. Но это только на первый взгляд, дальше наступает другой этап – недоумение.
Здесь начинает казаться, что свою роль он хоть и выполняет, но, мягко говоря, со скрипом и, возможно, даже больше мешает, чем помогает. Ты тратишь время на то, чтобы проанализировать предлагаемый им блок кода, который в большинстве случаев представляет собой не совсем то, что тебе нужно. Ещё нужно запоминать новые хоткеи; есть ещё ряд минусов при работе с новым инструментом.
Однако со временем ты всё больше понимаешь, как лучше всего с ним работать и наступает этап гармонии.
Самый большой профит от Copilot можно получить при написании так называемого boiler plate (шаблонного) кода, тут экономится немало времени. Также можно быстро реализовывать какую-то несложную логику (можно описать комментарием), с этим Copilot справится неплохо.
В сложных же кейсах с большой вероятностью это будет не совсем то, что нужно; следовательно, будет потрачено время на правки предлагаемого кода. Но при этом с другой стороны у вас уже будет “скелет” (каркас), что можно рассматривать как плюс.
В итоге имеем хороший инструмент – "подсказчик", но всё ещё не полноценного "ассистента". Думаю, буду продолжать его использовать и наблюдать, как он будет развиваться дальше.