GitHub Copilot

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

Назначение GitHub Copilot

GitHub Copilot — плагин к редактору, дописывающий код за разработчиком. Он был создан компанией GitHub совместно с OpenAI; первая версия, выпущенная в 2021 году, опередила ChatGPT на полтора года.

Проще говоря. Copilot работает как автодополнение, видящее контекст всего файла, а не только набираемую строку.

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

Польза для студентов

Попробовать его можно без подписок: бесплатный тариф предоставляется любому владельцу аккаунта GitHub и ограничен числом автодополнений и запросов в чат за месяц, а студенту, оформившему Student Developer Pack, предоставляется полный тариф без этих ограничений.

Польза от него на этапе обучения заключается в трёх вещах. Во-первых, не требуется каждый раз обращаться к документации за порядком аргументов: по контексту он предлагает правильный вызов, который запоминается после нескольких показов. Во-вторых, он помогает сдвинуться с мёртвой точки при работе с пустым файлом, когда неясно, с чего начать; даже небрежно набросанная заготовка даёт точку опоры. В-третьих, его предложения показывают, как принято писать на плохо знакомом языке. Для физика, раз в год правящего чужой код на C++, это заметное подспорье.

Всё сказанное работает только при условии, что предложенное читается. Принятое без чтения предложение представляет собой отложенную отладку.

Начало работы

Установка и настройка

  1. Требования:

    • Аккаунт на GitHub
    • Тариф Copilot: бесплатный включается на любом аккаунте, полный активируется студенческим пакетом
    • Поддерживаемая среда: VS Code, JetBrains, Visual Studio, Neovim и другие
  2. Установка (на примере VS Code):

    • установить расширение «GitHub Copilot» из встроенного магазина;
    • авторизоваться через GitHub по запросу расширения;
    • при желании активировать студенческий пакет в настройках аккаунта, чтобы снять ограничения бесплатного тарифа.

Активация студенческой подписки

  1. Перейти на education.github.com
  2. Подать заявку на Student Developer Pack
  3. Активировать Copilot в настройках аккаунта

Эффективное использование Copilot

Базовые приёмы работы

Единственным рычагом управления является контекст, поступающий модели на вход: открытый файл, соседние вкладки и комментарии разработчика.

  1. Комментирование намерений:

    # Напиши функцию для расчёта среднего значения списка
    # Copilot предложит:
    def calculate_average(numbers):
        return sum(numbers) / len(numbers) if numbers else 0
    
  2. Создание шаблонов функций:

    function calculateCircleArea(radius) {
      // Copilot предложит:
      return Math.PI * radius * radius;
    }
    
  3. Работа с библиотеками:

    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 является инструментом обучения, а не способом сдать задание, в котором студент не разобрался. Необходимо уточнить у преподавателя, что разрешено на его курсе, и разбирать сгенерированный код до того, как он попадёт в сдаваемую работу.

Лучшие практики для студентов

Пять рабочих привычек:

  1. Точная формулировка задачи. Чем конкретнее комментарий, тем ближе предложение к задуманному
  2. Чтение предложения целиком. Прежде всего рассматриваются граничные случаи: пустой список, деление на ноль, отсутствующий файл
  3. Проверка тестом, а не взглядом. Короткий тест на паре значений отвечает надёжнее самого внимательного чтения
  4. Передача шаблонной работы. Разбор аргументов командной строки, чтение форматов данных, однотипные графики
  5. Рассмотрение не только первого варианта. Copilot показывает одно решение из многих, и не всегда лучшее

Заключение

Copilot экономит время на том, что разработчик и так умеет: на шаблонном коде, на синтаксисе плохо знакомого языка, на первой заготовке в пустом файле. Понимания он не добавляет, оно остаётся работой самого разработчика.

Таким образом, Copilot следует использовать, чтобы углубить понимание, а не чтобы обойтись без него.