GitHub Copilot
Для студента наиболее простым способом начала работы является плагин к редактору. Ниже рассматривается самый распространённый из таких плагинов, выбранный по двум причинам: он бесплатен без подписки (студенту предоставляется полная версия) и устанавливается в среду, уже используемую для работы.
Назначение GitHub Copilot
GitHub Copilot — плагин к редактору, дописывающий код за разработчиком. Он был создан компанией GitHub совместно с OpenAI; первая версия, выпущенная в 2021 году, опередила ChatGPT на полтора года.
Проще говоря. Copilot работает как автодополнение, видящее контекст всего файла, а не только набираемую строку.
Под тем же названием сегодня существуют чат по проекту, агентный режим, самостоятельно правящий файлы, отдельный агент для командной строки и автоматическое ревью пул-реквестов, то есть все три формы, рассмотренные в предыдущей главе. Начинать лучше с автодополнения: оно требует меньше всего доверия к модели, а к остальным формам можно перейти после того, как выработан навык чтения предложенного кода.
Польза для студентов
Попробовать его можно без подписок: бесплатный тариф предоставляется любому владельцу аккаунта GitHub и ограничен числом автодополнений и запросов в чат за месяц, а студенту, оформившему Student Developer Pack, предоставляется полный тариф без этих ограничений.
Польза от него на этапе обучения заключается в трёх вещах. Во-первых, не требуется каждый раз обращаться к документации за порядком аргументов: по контексту он предлагает правильный вызов, который запоминается после нескольких показов. Во-вторых, он помогает сдвинуться с мёртвой точки при работе с пустым файлом, когда неясно, с чего начать; даже небрежно набросанная заготовка даёт точку опоры. В-третьих, его предложения показывают, как принято писать на плохо знакомом языке. Для физика, раз в год правящего чужой код на C++, это заметное подспорье.
Всё сказанное работает только при условии, что предложенное читается. Принятое без чтения предложение представляет собой отложенную отладку.
Начало работы
Установка и настройка
-
Требования:
- Аккаунт на GitHub
- Тариф Copilot: бесплатный включается на любом аккаунте, полный активируется студенческим пакетом
- Поддерживаемая среда: VS Code, JetBrains, Visual Studio, Neovim и другие
-
Установка (на примере VS Code):
- установить расширение «GitHub Copilot» из встроенного магазина;
- авторизоваться через GitHub по запросу расширения;
- при желании активировать студенческий пакет в настройках аккаунта, чтобы снять ограничения бесплатного тарифа.
Активация студенческой подписки
- Перейти на education.github.com
- Подать заявку на Student Developer Pack
- Активировать Copilot в настройках аккаунта
Эффективное использование Copilot
Базовые приёмы работы
Единственным рычагом управления является контекст, поступающий модели на вход: открытый файл, соседние вкладки и комментарии разработчика.
-
Комментирование намерений:
# Напиши функцию для расчёта среднего значения списка # Copilot предложит: def calculate_average(numbers): return sum(numbers) / len(numbers) if numbers else 0 -
Создание шаблонов функций:
function calculateCircleArea(radius) { // Copilot предложит: return Math.PI * radius * radius; } -
Работа с библиотеками:
import numpy as np # Создать массив из 10 случайных чисел от 1 до 100 # Copilot предложит: arr = np.random.randint(1, 101, 10)
Продвинутые сценарии
Copilot справляется с однообразной работой вокруг уже написанного кода — тестами и переписыванием фрагментов, написанных наспех.
Генерация тестов:
# Функция сложения двух чисел
def add(a, b):
return a + b
# Напиши тесты для этой функции
# Copilot предложит:
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
assert add(0, 0) == 0
Рефакторинг кода:
// Старый код
function processData(data) {
let result = [];
for (let i = 0; i < data.length; i++) {
if (data[i].active) {
result.push(data[i].value * 2);
}
}
return result;
}
// Добавь комментарий: "Рефакторинг с использованием map и filter"
// Copilot предложит:
function processData(data) {
return data
.filter(item => item.active)
.map(item => item.value * 2);
}
Примеры для учебных задач
Ниже приведены два примера на заданиях второго курса. Комментарий разработчика задаёт задачу, Copilot дописывает остальное; предложенное полезно сравнить с тем, что было бы написано самостоятельно.
Для курса по алгоритмам
# Реализуй быструю сортировку на Python
# Copilot предложит:
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
Для курса по физике
# Рассчитать траекторию движения тела под углом к горизонту
# Copilot предложит:
def calculate_trajectory(initial_velocity, angle_degrees, times):
import math
g = 9.81
angle_rad = math.radians(angle_degrees)
vx = initial_velocity * math.cos(angle_rad)
vy = initial_velocity * math.sin(angle_rad)
trajectory = []
for t in times:
x = vx * t
y = vy * t - 0.5 * g * t**2
if y < 0:
break
trajectory.append((x, y))
return trajectory
Важные ограничения и предостережения
Типичные ошибки Copilot
Ошибки делятся на три вида, и все три обнаруживаются чтением.
Наиболее безобидной является неэффективность. Предложение решает задачу, но лишним проходом или лишней копией; на учебных объёмах это незаметно, на рабочих начинает мешать. Второй вид — устаревшие подходы. В обучающих данных старого кода больше, чем свежего, поэтому Copilot предлагает приёмы, от которых в библиотеке уже отказались, и сверяться приходится с документацией.
Наиболее опасным является выдумывание. Модель уверенно называет библиотеки, методы и аргументы, не существующие в природе, и выглядит это так же, как верный ответ. Помогает привычка запускать написанное. Метод, придуманный моделью, приводит к ошибке при первом же вызове, а неверная формула молча возвращает правдоподобное число.
Академическая честность
Правила на разных курсах различаются, и выяснять их необходимо заранее, а не на защите. Copilot является инструментом обучения, а не способом сдать задание, в котором студент не разобрался. Необходимо уточнить у преподавателя, что разрешено на его курсе, и разбирать сгенерированный код до того, как он попадёт в сдаваемую работу.
Лучшие практики для студентов
Пять рабочих привычек:
- Точная формулировка задачи. Чем конкретнее комментарий, тем ближе предложение к задуманному
- Чтение предложения целиком. Прежде всего рассматриваются граничные случаи: пустой список, деление на ноль, отсутствующий файл
- Проверка тестом, а не взглядом. Короткий тест на паре значений отвечает надёжнее самого внимательного чтения
- Передача шаблонной работы. Разбор аргументов командной строки, чтение форматов данных, однотипные графики
- Рассмотрение не только первого варианта. Copilot показывает одно решение из многих, и не всегда лучшее
Заключение
Copilot экономит время на том, что разработчик и так умеет: на шаблонном коде, на синтаксисе плохо знакомого языка, на первой заготовке в пустом файле. Понимания он не добавляет, оно остаётся работой самого разработчика.
Таким образом, Copilot следует использовать, чтобы углубить понимание, а не чтобы обойтись без него.