Написать пост

Гайд по работе с GitHub Copilot

ИИ от Microsoft и GitHub под названием GitHub Copilot пишет код за программистов. Разбираемся, как это работает и где можно применить.

21 июня вышел GitHub Copilot — инструмент, который помогает разработчикам писать код. Сервис доступен по подписке от $10 в месяц.

Дмитрий Дзюба, руководитель Центра практик «Архитектура» МТС, тестирует его уже полгода, и за это время собрал много интересных кейсов. Как писать, чтобы не запутать GitHub Copilot. Где его можно использовать? И заменит ли он разработчиков? Расскажем в этой статье.

Что такое GitHub Copilot

GitHub Copilot — искусственный интеллект, который интегрируется в среду разработки — IntelliJ, PyCharm, Microsoft Visual Studio Code и другие. Инструмент поддерживает множество языков программирования, в том числе Java, C, C++ и C#, Python, JavaScript, TypeScript, Ruby и Go.

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

Основные функции GitHub Copilot:

  • проанализировать комментарии и написать код;
  • дописать комментарии к готовому коду;
  • определить типовые алгоритмы и дописать их за разработчика.

Как это выглядит

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

Задание — сделать функцию, которая будет складывать два числа, которые могут быть условно бесконечными. С GitHub Copilot оно решается так:

  • пишем комментарии — то есть ТЗ, на которое интеллект будет смотреть;
  • начинаем писать функцию;
  • система выдаёт её продолжение (выделено серым) — на основе описания задачи и первых строк кода;
  • жмём tab — и задача решена.

Другой пример написать тесты для функции, которая переводит из римской системы счисления в арабскую, и обратно — пока само́й функции нет.

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

Инструмент знает несколько языков, так что можно спокойно писать комментарии по-русски. Он поймёт, что ей делать.

Здесь у нас домашка по Python. Нужно создать словарь с континентами, добавить списки стран, расположенных на них, и написать программу, которая будет выдавать ответ в стиле «На этом материке находятся такие государства».

Я добавил комментарий с описанием программы и начал писать код. И Copilot сам добавил все контенты и разбил по ним страны (с географией у него, конечно, проблемы, но в нашем случае это не так важно). По сути, он написал весь цикл, разобравшись в задаче, — мне оставалось только проверить код.

Как работать с GitHub Copilot

По моему опыту система выдаёт весьма неплохой код. Но при определённых условиях.

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

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

Во-вторых, называть функции по тому, что они делают. И добавлять адекватные переменные — названия a1, a2, a3, a4, a5 точно не помогут.

В-третьих, писать просто. Я долго старался подобрать код, который запутает систему.

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

Отдельная тема — проверка кода. Иногда инструмент косячит или ведёт себя странно. Например, может выдать несколько ответов на одну и ту же задачу (почему так — загадка) или неверный — но очень похожий на правильный — код. Будто изначально Copilot написал правильную программу, но потом вставил 2–3 ошибки.

Такое случается нечасто, но перестраховаться стоит.

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

Другой случай — GitHub Copilot сгенерировал достаточно большой код для разбора выражения. Но он половину if’ов сделал правильно, а половину — нет, например, вложил в условие одну операцию вместо двух.

Где инструмент можно использовать

Инструмент берёт на себя рутинную работу. Если есть типовой фрагмент кода, который писать лень или очень скучно — это к нему. При этом времени на комментарии и проверку уходит не так много (и делать их надо в любом случае).

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

Таким же образом можно учить новые языки (в задаче с континентом мы именно этим и занимались).

Но программистов он всё равно не заменит — потому что не может работать без человека . Всегда нужно либо чёткое описание алгоритма в комментариях, либо заготовка кода — чтобы понять что нужно дописывать.

К тому же он неспособен написать что-то уникальное, а только подставляет блоки, которые уже где-то видел, в определённое места (растить их в произвольном порядке, чтобы создать что-то новое, ему тоже пока не по силам).

Наконец, код, который пишет Copilot, всё равно нужно тестировать. Инструмент может предложить огромный фрагмент, который вытащил из никому неизвестных недр GitHub. И Приходится его исследовать: «Что же мне предложили? Правильный это алгоритм или нет? Эффективный или нет? Заработает или нет?».

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

На этом всё! Делитесь впечатлениями о GitHub Copilot. Что вам нравится в инструменте и чего не хватает? Смогли ли его протестировать? Успели ли заметить какие-то странности и собрать необычные кейсы?

Следите за новыми постами
Следите за новыми постами по любимым темам
19К открытий20К показов