Гайд по работе с GitHub Copilot
ИИ от Microsoft и GitHub под названием GitHub Copilot пишет код за программистов. Разбираемся, как это работает и где можно применить.
19К открытий22К показов
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К открытий22К показов