Когда ученик сдал работающую программу, преподаватель ещё не знает, чему он научился. Программа могла быть написана самостоятельно, собрана из подсказок или целиком получена от модели. Для обучения нужно различать качество готового артефакта и способность решить следующую задачу.
AI-помощник полезно включать в занятие с заранее заданной ролью: уточнить условие, дать ограниченную подсказку, предложить проверку или разобрать ошибку. Контроль самостоятельного навыка должен оставаться отдельным этапом.
Вопрос влияния GPT на программирование и обучение рассматривался в работе 2023 года о влиянии GPT. Оценки конкретных моделей того периода не описывают автоматически современные инструменты. Ниже — учебный сценарий, который не зависит от рейтинга модели.
Начать с договора об использовании помощника
Объясните, на каком этапе допустимы подсказки и что ученик должен представить вместе с кодом. Для тренировочного задания это могут быть собственная идея, найденный контрпример и объяснение исправления. Для контрольной работы условия задаются отдельно.
Преподавателю стоит заранее подготовить решения, пограничные случаи и критерии проверки. Модель можно использовать как дополнительный источник вариантов, но созданный ею ответ не становится эталоном без проверки.
Не загружайте в внешний сервис персональные сведения учащихся и закрытые материалы курса вне согласованного порядка. Руководство UNESCO по генеративному AI в образовании рассматривает педагогическую уместность и защиту данных как самостоятельные вопросы внедрения.
Разобрать ошибку, которую легко пропустить
Учебная задача: найти максимальную сумму непустого непрерывного фрагмента последовательности целых чисел.
В условии важны слова «непустого» и «непрерывного». Для [-5, -2, -7] правильный ответ равен -2. Значение 0 означало бы, что решение разрешило пустой фрагмент, хотя условие это запрещает.
До получения готового кода попросите ученика сформулировать, что хранится после обработки очередного числа. Подсказка помощнику может выглядеть так:
Не пиши решение целиком. Задай один вопрос, который поможет проверить, допускает ли мой алгоритм пустой фрагмент. После моего ответа предложи один короткий контрпример.
Такой формат ограничивает объём помощи, но сам по себе не гарантирует соблюдения границ моделью. Преподаватель должен видеть, какая подсказка была выдана и что ученик сделал после неё.
Проверенное решение для разбора
Этот фрагмент рассчитан на последовательность целых чисел. Пустой вход считается ошибкой условия.
from collections.abc import Sequence
def max_subarray_sum(values: Sequence[int]) -> int:
"""Максимальная сумма непустого непрерывного фрагмента."""
if len(values) == 0:
raise ValueError("Последовательность не должна быть пустой")
ending_here = best = values[0]
for index in range(1, len(values)):
value = values[index]
ending_here = max(value, ending_here + value)
best = max(best, ending_here)
return best
После обработки позиции index переменная ending_here хранит лучшую сумму непустого фрагмента, заканчивающегося именно на этой позиции. Такой фрагмент либо начинается с текущего числа, либо продолжает лучший фрагмент, заканчивавшийся на предыдущем. Переменная best сохраняет лучший результат среди уже рассмотренных окончаний.
Для обычного списка обход занимает линейное время и использует постоянное дополнительное пространство. Утверждение о времени предполагает постоянную стоимость доступа к элементу и обычную для учебной оценки стоимость арифметики.
Минимальные проверки:
assert max_subarray_sum([-5, -2, -7]) == -2
assert max_subarray_sum([0, 0]) == 0
assert max_subarray_sum([4, -6, 3, 2]) == 5
assert max_subarray_sum([7]) == 7
try:
max_subarray_sum([])
except ValueError:
pass
else:
raise AssertionError("Пустой вход должен быть отклонён")
Эти тесты полезны для разбора конкретных границ, но не являются доказательством для всех входов. Для небольших случайных последовательностей можно дополнительно сравнить результат с полным перебором всех непустых фрагментов.
Что спросить после запуска программы
Попросите объяснить, почему инициализация нулём меняет смысл задачи. Затем предложите изменить контракт: разрешить пустой фрагмент либо вернуть ещё и его границы. При изменении контракта ученик должен заново определить ожидаемый результат и проверки.
Наконец, дайте близкую задачу без помощника. Важно проверить перенос идеи, а не воспроизведение недавно увиденного кода. Для последующей проверки можно изменить данные и формулировку, сохранив требование самостоятельно назвать состояние алгоритма.
Если ученик справился только при подсказках, это полезная информация для следующего занятия. Её не следует превращать в доказательство самостоятельного владения темой.
Как оценивать учебный результат
Разделяйте выполнение с помощью, самостоятельное объяснение и решение нового задания. Сохраняйте не только итоговый ответ, но и тип помощи: уточнение условия, наводящий вопрос, готовый контрпример, фрагмент кода.
Улучшение результата под AI не доказывает улучшение навыка без AI. Для оценки обучения нужны сопоставимые самостоятельные задания до и после занятий, а при возможности — отложенная проверка. Разницу интерпретируют с учётом подготовки учащихся и условий обучения.
Преподаватель получает больше пользы от точного понимания ошибки конкретного ученика, чем от статистики быстро сданных программ. Встроенный помощник стоит оценивать по тому, помогает ли он исправить эту ошибку и затем обходиться без той же подсказки.