Секция 2: «Содержание и методика преподавания отдельных дисциплин» 24 октября 11:50 – 12:30

 

Доклад «Kotoed: как мы обучали программированию онлайн, еще до того, как это стало мейнстримом»

Докладчик:

Марат Халимович Ахин
исследователь JetBrains Research, старший преподаватель СПбПУ

Аннотация: 

Дистанционное проведение практических занятий по программированию, на первый взгляд, не сильно отличается от проведения соревнования по программированию, дополненного элементами code review. Однако такой взгляд не учитывает ряд аспектов, важных с точки зрения образовательного процесса, как для студентов, так и для преподавателей. В докладе мы обсудим наш опыт преподавания программированию в Политехе, его воплощение в виде системы Kotoed, что получилось вполне удачно, и какие проблемы ещё предстоит решить в будущем.

Запись доклада

Презентация доклада

Резюме: 

В Санкт-Петербургском политехническом университете в 2016 году на первом курсе возникла проблема при обучении программированию. Число поступивших студентов составило 94 человека, а преподавателей было 4 человека. В таких условиях каждому студенту на практических занятиях могло быть отведено около 4 минут в неделю. За это время невозможно ни оценить код студента, ни ответить на вопросы. Было решено частично уйти в дистанционное обучение, попытаться автоматизировать процесс работы со студентами. Есть базовый репозиторий с задачами, которые студенты должны решать в ходе прохождения курса по Kotlin на первом году обучения. Они делают форк, решают задачи. В какой-то момент, когда считают, что решили достаточно задач, чтобы пройти промежуточную аттестацию или получить отзыв от преподавателя, они заводят пул-реквест в базовый репозиторий. Далее Jenkins CI запускается по пул-реквесту, использует тесты и особую версию JUnit. Статистика собирается в удобной форме, которую потом можно автоматически проанализировать. После этого студент может увидеть результаты с комментариями к задачам. 

Чтобы использовать самую важную компоненту подобного подхода, а именно, общение по коду студента, мы использовали встроенный компонент GitHub Code Review. Такой подход помог решить немедленную проблему нехватки времени работы со студентами. Ты не менее возникли некоторые проблемы – катастрофическое замедление работы при большом количестве комментариев у пул-реквеста, исчезновение комментариев при изменении кода, нестабильная работа пул-реквест плагина для Jenkins и невозможность добавления новой функциональности.

Был проведён анализ альтернативных решений. При дистанционном обучении программированию есть два основных компонента, которые друг друга взаимно усиливают. Первый – это Code Review, чтобы дать студенту обратную связь по неписанному коду. Второй – это автоматические тесты. Можно взять систему для Code Review и дополнить ее тестами. Рассматривались две системы – Gerrit и Phabricator. Но это идея не сработала, потому что в рассмотренных системах при изменении фрагмента кода, ранее добавленный комментарий к нему, пропадал. Сейчас в подобных системах перенос комментариев работает хорошо, но в 2016 году с этим были проблемы. Второй путь – взять систему для тестирования, например, DOMjudge или CATS и дополнить ее Code Review. Тогда решение выглядит задом-наперед. Компонент Code Review намного более важен, чем компонент для тестирования. 

Оба решения не подошли, оставалось всё реализовать самостоятельно с нуля. Так и родился Kotoed (KOTlin Online EDucation). Это Система помощи преподавателю при проведении практических занятий по программированию. Это легковесная система для Code Review, учитывающая отличия уровня студентов от разработчиков. Облегчает проверку заданий и сбор статистики, общение преподавателя и студента, отслеживание истории работы над проектом, осуществляет поиск плагиата.             Kotoed позволяет в асинхронном стиле как преподавателю, так и студенту реагировать на действия друг друга. Происходит “виртуализация” времени преподавателя, он тратит на разбор работы студента столько времени, сколько необходимо, без привязки к длительности учебного занятия.

Эта схема взаимодействия со студентами решала насущные проблемы достаточно неплохо. Проект постепенно развивался в период с 2017 по 2020 годы. В него были добавлены новые курсы – Алгоритмы и структуры данных (Java/Kotlin), Функциональное программирование (Haskell), Программирование на C++. Была добавлена новая функциональность: отображение результатов инспекций в ревью, поиск клонов в разных языках, более стабильный перенос комментариев. 

            По состоянию на 2020 год через Kotoed прошли 1158 уникальных пользователей, создавших 1810 проектов. Всего было 28932 сабмита, создано 55270 комментариев. Есть студенты, которые вообще не хотят понимать и разбираться с тем, что такое самостоятельно проверить код. Они все материалы загружают в Kotoed и, если возникает какая-то проблема, они что-то меняют в коде и пробуют загружать много разных версий кода, не пытаясь внимательно разобраться с проблемой. По статистике 40% студентов завершают курс в Kotoed досрочно. Они успешно и с опережением решают предлагаемые задачи. Около 30% студентов не успевают выполнить задания и уходят на пересдачу. Ещё 30% студентов более-менее успешно справляются. 

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