Назад в библиотеку

Направления использования генеративного искусственного интеллекта при начальном обучении программированию в университетах

Автор: М. С. Долинский
Источник: Долинский, М. С. Направления использования генеративного искусственного интеллекта при начальном обучении программированию в университетах / М. С. Долинский // Компьютерные инструменты в образовании. – 2024. – № 2. – С. 85-96. – DOI 10.32603/2071-2340-2024-2-85-96. – EDN DYKMYL.

Ключевые слова: генеративный искусственный интеллект, обучение программированию первокурсников, интеллектуальные обучающие системы.

1. ВВЕДЕНИЕ

Цель начального обучения программированию в университете — формирование навыков “Computational Thinking” [1], включающих следующие компоненты: абстракция, декомпозиция, распознавание паттернов, алгоритмизация, отладка. Существенное повышение эффективности обучения приносит использование онлайн платформ для обучения программированию, таких, например, как EduCoder [2, 3], HTProgramming [4], Code4brownies [5]. Новый этап повышения эффективности начального обучения программированию связан с внедрением генеративного искусственного интеллекта. Текстовые генеративные системы имеют чат-боты в качестве фронтенда, чтобы взаимодействовать с пользователем, и основываются на LLM — генеративных моделях, которые могут производить новый контент, основываясь на данных, на которых они натренированы. Наиболее известные LLM: GPT (OpenAI), Gemini (Google), Llama (Meta), Claude3 (Anthropic). Взаимодействие пользователя с чат-ботом реализуется запросами. В работе [6] сформулированы задачи для таких чат-ботов во время процесса начального обучения программированию: объяснение базовых знаний, конструирование кода, объяснение кода, рефакторинг кода, форматирование кода, проверка стиля кодирования, комментирование кода. Стандартные практики использования ГенИИ при обучении программированию представлены в работе [7]. Проектирование и формулирование запросов для того, чтобы получить оптимальный ответ, часто называется промпт-инжинирингом. Отличная иллюстрация, как с помощью промпт-инжиниринга получать фантастические результаты, представлена в работе [8], посвящённой контекстному дообучению ChatGPT в области биоинформатики. Представленный в данной работе GeneGPT использует NCBI Web API документацию и демонстрацию в запросе для обучения контексту, а затем отвечает на тесты GeneTuring и GeneHop с помощью NCBI Web API. Для полноты картины надо иметь в виду и мнение скептиков, считающих, что на начальном этапе обучения программированию необходим полный запрет использования студентами ГенИИ [9].

2 ИНСТРУМЕНТАЛЬНЫЕ СИСТЕМЫ, ИСПОЛЬЗУЮЩИЕ ГенИИ-КОДОГЕНЕРАТОРЫ ПРИ ОБУЧЕНИИ ПРОГРАММИРОВАНИЮ СТУДЕНТОВ

2.1 Первые шаги

В работе [10] представлен продукт, помогающий писать Python-программы, отформатированые по стандарту PEP-8. MMAPR [11] позволяет автоматически исправлять ошибки в программах, написанных студентами на Python. Codeboard [12] помогает студентам в диалоге находить и исправлять ошибки в предложенных JavaScript-программах. Работа [13] представляет продукт, обеспечивающий автоматический контроль соблюдения правил для java-програм, размещённых студентами на Github. В работе [14] описывается программа, которая помогает студентам в диалоге выполнять задания на SQL-запросы к PostgreSQL. В [15, 16] представлены разработки, которые помогают студентам в диалоге выполнять задания по программированию, отвечая на их вопросы и предлагая поясняющие примеры.

2.2 Платформы, позволяющие студентам прозрачно взаимодействовать с ChatGPT

Более эффективным представляется встраивание ГенИИ в онлайн-системы обучения и тестирования программ. Этот подход предлагают следующие системы.

TutorBot+ [17, 18] интегрирован в WEB-систему обучения и онлайн-платформу тестирования программ. TutorBot+ позволяет брать условия задач, получать решения в диалоге с ГенИИ, проверять решения.

KOGI [19] — система поддержки обучения, которая интегрирует ChatGPT и среду Jupyter. KOGI помогает студенту получить совет от ChatGPT в ответ на ошибки и вопросы. KOGI внедрена в два вводных курса: Алгоритмы, Data Science. Как результат — существенное уменьшение количества студенческих ошибок и получение преподавателями информации о вопросах и ошибках.

IPSSC [20] (Intelligent programming scaffolding system using ChatGPT). Вместо того чтобы студент взаимодействовал непосредственно с ChatGPT, авторы разработали три модуля:

Solution Assessment (SA) — оценивание решений, Code Assessment (CA) — оценивание кода, Free Interaction (FI) — свободное взаимодействие. В модуле SA студенты декомпозируют сложную задачу на несколько простых и абстрагируют их, чтобы решение подходило для похожих задач (таким образом, этот модуль фокусируется на декомпозиции и абстракции). В модуле CA студенты разрабатывают алгоритмы, пишут и непрерывно отлаживают код, используя модуль для идентификации ошибок в коде, затем их исправляют. ChatGPT помогает улучшить алгоритмы и код. В модуле FI студенты могут непосредственно взаимодействовать с ChatGPT, обсуждая темы, которые не покрыты в модулях SA и CA.

Coding Step [11, 21] — это web-приложение, предназначенное для обучения основам программирования на Python. Это дружественная к начинающему программисту среда программирования с серией задач, вводящих новые концепции. Ученик может двигаться по этим задачам независимо, имея доступ к ГенИИ-кодогенератору от OpenAI Codex. Пользователи вводят текст описания поведения программы на естественном языке и по клику на кнопку «Сгенерировать код» получают программу, сгенерированную OpenAI Codex. Каждое обращение к API-вызову Codex кастомизируется добавлением предопределённых примеров, имеющегося кода в редакторе и затребованного пользователем поведения. Это обеспечивает то, что ГенИИ-кодогенератор сгенерирует код на Python для начинающего программиста, который соответствует контексту пользователя. Студенты работают со сгенерированным кодом. При таком подходе уменьшается количество ошибок и сокращается время на выполнение задания.

LearningProgrammingWithGPT [22] — среда, которая используется студентами в курсе CS1 при изучении Python. Курс интегрирует ChatGPT как средство поддержки студентов и инструкторов в учебном классе. Платформа действует как посредник между студентами и их ГенИИ-инструктором, выдаёт персонализированный обучающий материал, основанный на препромптах, встроенных в студенческие запросы. Собственно программа обучения состоит из трёх частей:

  1. Введение — Переменные — Операторы — Ввод и Вывод.
  2. Комментарии — Условия — Массивы (Списки) — Ошибки и отладка.
  3. Циклы — Функции — Библиотека.

GPTutor [23] — это расширение для VS Code, поддерживает более 50 языков программирования, включая C, C++, Java, Python, C#. GPTutor позволяет пользователям настраивать подсказки для различных языков программирования и сценариев. Он предоставляет объяснение кода, рецензии и настраиваемые подсказки. В курс по Python (8 недель) входят задания на неделю по теме недели (можно использовать ChatGPT); домашняя работа (можно обсудить c ChatGPT сложные моменты); индивидуальный мини-проект в последнюю неделю — уникальная программа менее 1000 строк кода на любую тему от игр до чат-ботов, можно использовать ChatGPT, но включить в отчёт диалог ChatGPT. ChatGPT можно использовать не только для отладки, объяснения и оптимизации, но также для мозгового штурма идей, уточнения требований проекта, более глубокого понимания технических аспектов проекта.

Copilot [24] — это ГенИИ-помощник, который использует LLM, натренированную на миллиардах строк кода. Copilot доступен как бесплатный IDE плагин для студентов. Copilot может сгенерировать корректный и читабельный код на общих языках программирования.

В работе [25] дополнительно обеспечивается проверка на плагиат.

2.3 Помощь без представления решений

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

Разработчики CodeHelp [26, 27] утверждают, что преподаватели программирования имеют огромные проблемы с возможностью уделить достаточно времени каждому студенту. LLM-модели помогают студентам решать их проблемы, но есть опасности двух видов: решение задач вместо студентов, неправильное решение задач. CodeHelp обеспечивает студентам помощь по требованию, не предлагая непосредственных решений, являясь примером «сократического» наставника, избегающего раскрытия решений непосредственно пользователю. CodeHelp поддерживает любой язык программирования, поскольку обращается к ГенИИ. В то же время авторы подчёркивают, что CodeHelp является не заменой учителя-человека, а дополнением к нему. Студент в любой момент времени может попросить помощь и немедленно получает ответ — советы без предоставления полного решения, которые получаются запросами к ИИ на основе студенческого ввода. Кроме того, преподаватель имеет возможность отслеживать работу студентов. CodeHelp спроектирован так, чтобы отвечать на любые вопросы студентов, не генерируя кода решения вне зависимости от формулировки запроса. Это достигается серией различных запросов, которые включают инструкции не генерировать код и отдельно верифицируют, что код отсутствует в ответе от LLM. Цель — обеспечить получение студентами пошаговой помощи как смеси естественного языка и псевдокода, после чего студенты должны самостоятельно написать корректный код. CodeHelp также использует промпты, чтобы сгенерировать ответы «положительные и одобряющие», как это делает учитель-человек. Разработчики CodeHelp подчёркивают три основные характеристики своего цифрового помощника учителя: обучать, а не давать готовые решения, вести эффективный диалог, учитывать уровень подготовки студента.

CodeAid [28] также избегает прямого ответа с кодом, стараясь направлять студента к решению задачи. CodeAid позволяет студентам задать общий вопрос по программированию, задать вопрос о представленном коде, попросить объяснить представленный код, помочь исправить ошибку в представленном коде, помочь написать код. За семестр тестового использования были собраны следующие данные, которые позволили улучшить CodeAid: более 8000 взаимодействий студентов с CodeAid с их оценкой сгенерированного ответа, 10 еженедельных отчётов студентов об использовании CodeAid и других ресурсов, 22 интервью студентов о CodeAid, финальный анонимный обзор сравнения CodeAid c ChatGPT.

Разработчики NotebookGPT [29] считают, что прямое использование ChatGPT может помешать обучению студента, поэтому NotebookGPT даёт доступ к GPT, но не возвращает полных решений, обеспечивая обратную связь на стиль программирования, пояснения, как работают куски кода, помощь с отладкой кода, возможность увидеть альтернативные решения задач.

AI TA [30] помогает студентам выполнять декомпозицию, то есть разбиение задач на подзадачи. По мнению разработчиков AI TA, такие модели как ChatGPT, LLaMA, Gemini в контексте обучения программированию показывают замечательные способности понимать, генерировать и объяснять код, делая их сильными кандидатами на Teacher Assistants (помощники учителя) в курсах обучения программированию. Они могут исправлять ошибки в коде, объяснять, почему ошибки случились, и обсуждать возможные подходы к решению различных программистских задач. Однако есть и проблемы — они могут генерировать ошибочный код и даже различные ответы на один и тот же вопрос. Поэтому AI TA поддерживает “Subgoal learning” — эффективную стратегию обучения, помогающую студентам разбивать сложные задачи на подзадачи.

StAP-tutor [31] обеспечивает рекомендацию следующего шага решения задачи. Эксперименты показали, что в большинстве случаев StAP-tutor рекомендует правильный шаг, и он персонализирован к студенческому коду и подходу. Однако бывают и случаи ошибочных советов.

TeachYou+AlgoBo [32, 33] предлагает подход LBT (Learning By Teaching — обучение себя обучением кого-то). Здесь TeachYou — LBT-среда для обучения алгоритмам, а AlgoBo — чатбот, обучающийся решению задач. Вместо того чтобы конструировать обучаемых агентов «с нуля», авторы предлагают методологию «сверху вниз», в которой они используют разные LLM, чтобы симулировать учеников. В своём формирующем исследовании авторы попросили 15 новичков в программировании выполнить LBT с ChatGPT, который попросили промптом выполнять роль ученика.

Авторы пришли к следующим выводам о необходимости:

  1. Ограничивать уровень знаний LLM-агента, то есть программы, которая выступает в роли ученика, для того чтобы процесс был как можно ближе к реальности, чтобы его учить было не легче, чем среднестатистического студента.
  2. Предписать LLM-агенту задавать вопросы «почему» и «как», как это и должен делать хороший ученик.
  3. Диалоги LLM-агента и студентов должны сохраняться для последующего анализа с целью получения обратной связи на применённые методы преподавания и обучения.

Как результат, авторский подход предполагает, что в TeachYou ученик решает задачу по программированию алгоритмов (например, двоичный поиск) и затем рефлексирует эту работу обучением AlgoBo. Слово «рефлексирует» здесь означает, что студент должен снова вспомнить и гораздо лучше понять изученное, поскольку он вынужден объяснять эту тему LLM-агенту, возможно, не один раз и разными способами, чтобы в конце концов LLM-агент смог научиться сам решать подобные задачи.

В работе [9] предлагается разработка продукта, спрашивающего у ГенИИ: «Спроси у меня, что тебе нужно знать, чтобы решить задачу».

2.4. Платформы для разработки интеллектуальных обучающих систем

Дальнейшее повышение эффективности связывается с разработкой платформ создания ГенИИ-тьюторов [34].

VoLL-KI [35] — это исследовательский проект, цель которого создать набор инструментов на различных уровнях абстракции для улучшения с помощью искусственного интеллекта процесса обучения в университетах. Имеются ввиду такие инструменты как планирование обучения, рекомендательные системы для служб ответов на вопросы студентов и выбора учебных материалов, обучение с помощью виртуальной реальности, образовательные чат боты, адаптивная обучающая среда.

Практическая реализация платформы Apprentice Tutor Builder (ATB) для создания интеллектуальных обучающих систем (ИОС) описывается в работе [36]. ИОС — это образовательная технология, которая обеспечивает студентов содержанием курса, индивидуально-предлагаемыми практическими заданиями и эффективной обратной связью. По мнению авторов ATB, ИОС очень эффективны, однако их разработка сложна, времязатратна, требует специальных программистских и преподавательских знаний, что сдерживает их широкое распространение. Поэтому авторы и разрабатывают ATB — платформу, которая упрощает создание и персонализацию ИОС-тьюторов. Преподаватель может, используя технологию “drag-and-drop”, создать интерфейс тьютора, а затем интерактивно обучить ГенИИ-агента решать задачи. Обучение достигается многократным интерактивным взаимодействием, включая демонстрации, обратную связь и пользовательские метки. Как результат — требуется потратить 200–300 часов на один час обучения. 14 инструкторов оценили эффективность использования ATB, но указали на желаемые возможности для сокращения времени на разработку. В результате анализа этой тестовой работы авторы создали множество рекомендаций для использования платформы ATB и ГенИИ-агента.

2.5 Помощь преподавателю

Отдельное направление применения генеративного ИИ — помощь преподавателям. Здесь можно отметить такие продукты как Robosourcing [11] для генерации практических заданий в масштабируемой манере, VizGroup [37], обеспечивающий контроль за деятельностью студентов в больших классах (100+ студентов), проверка решений студентов с помощью ChatGPT [38], PAIGE [39] — система обнаружения обманов, опознающая тексты, написанные генеративным ИИ, а не человеком.

2.6. Рефлексирующие работы

В работе [40] предлагаются способы использования ChatGPT для самообучения. Работы [41–43] описывают достоинства и недостатки использования ГенИИ для обучения программированию. В работе [44] излагаются результаты опроса студентов о пользе и проблемах использования ГенИИ для обучения программированию. Сбор и анализ протоколов чатов студентов во вводном курсе программирования предлагается в работе [45]. Технология тестирования способностей ChatGPT отвечать на вопросы по программированию предложена в работе [46]. Работа [47] предлагает опыт «Как учить решать задачи по примерам». Работа [48] предлагает решать проблемы прогресса исккусственного интеллекта в начальном обучении программированию, используя подходы, предложенные в обучении математике после изобретения калькуляторов и компьютеров.

3. ЗАКЛЮЧЕНИЕ

Резюмируя описанные в статье возможности ГенИИ, можно разделить функционально на две группы:

  1. Как можно использовать ГенИИ студентам: автоматическая коррекция синтаксиса, выполнение заданий, получение нескольких решений одной задачи, получение пояснений к решениям и сообщения об ошибках, в перспективе получить виртуального учителя.
  2. Как можно использовать ГенИИ преподавателям: генерация заданий по программированию, генерация новых упражнений по имеющимся, контекстуализация условий задач, оценка студенческих работ.

Варианты будущего обучения программированию с ГенИИ-кодогенерацией:

В идеале — изменить задания так, чтобы можно было пользоваться кодогенерацией и при этом получать собственные навыки решения задач.

Радикалы предлагают сделать сдвиг фокуса в программистских курсах. ГенИИ-кодогенераторы могут решать низкоуровневые задачи реализации, а студенты будут разрабатывать высокоуровневые алгоритмы, поскольку в будущем разработчики программного обеспечения будут более нацелены на проектно-ориентированные роли, поэтому фокус курсов должен измениться на разработку запросов к AI-кодогенераторам, оценку кода и отладку.

Рационалисты предлагают начинающих учить традиционными подходами, а ИИ-кодогенерации учить на последующих курсах.

Список литературы