Попытка научить студентов программировать и о том, где этот процесс можно и нужно автоматизировать

в 14:00, , рубрики: машинное обучение, мотивация, образование, Программирование, Учебный процесс в IT

Попытка научить студентов программировать и о том, где этот процесс можно и нужно автоматизировать - 1

Именно эта цитата Стива Джобса встречает посетителей сайта cs.betlabs.ru, можно считать это попыткой мотивировать студентов работать усерднее над своими домашними и лабораторными заданиями. К сожалению, метрики для количественной оценки влияния мотивации от преподавателя на успеваемость студента у меня пока нет. Более того, я считаю, что конкурентная среда в учебной группе является куда более важным фактором в общем показателе успеваемости. Сейчас это всего лишь гипотеза, а ее проверка не лежит в области моих научных интересов.


Предыстория

Мне, как и любому аспиранту, положено 100 часов из учебного плана потратить на преподавание в ВУЗе. Конкретно передо мной стояла задача проведения лабораторных занятий по курсам “Информатика и основы алгоритмизации” и “Объектно-ориентированное программирование” на языке C# для студентов первого курса бизнес-информатики. Важно отметить тот факт, что абсолютное большинство студентов считало, возможно до сих пор считает, что программирование им в их текущей и будущей деятельности абсолютно не понадобится.

Первый год

В первый год и первый семестр преподавания у меня были две учебные группы общей численностью 58 человек. Задачи: проводить контрольные работы, проверять индивидуальные домашние задания и выставить отметку по 5 балльной шкале о семестровой работе. Поставленная мною отметка не является окончательной, а финальная отметка определяется на экзамене лектора.

Нагрузка была большая, делать нужно было много, поэтому очень часто я слышал от студентов комментарии по поводу того, что этот предмет им “в жизни не понадобится”. Я довольно часто проводил разъяснительные беседы о том, что свои когнитивные способности необходимо тренировать и программирование отличный инструмент для того, чтобы подготовить мозг к системному и в тоже время творческому мышлению. Не думаю, что мои слова нашли отклик в большинстве умов, но мне кажется некоторое количество студентов задумались и нашли для себя программирование полезным.

Софт и сервисы

  • Google Sheets для ведения учета сдачи ДЗ и результатов контрольных работ
  • Google Forms для записи на пересдачу контрольных и сбора обратной связи
  • BitLy.com сервис сокращения ссылок

Как проходили контрольные и сдача ДЗ

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

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

По окончанию семестра я провел анонимный опрос по классическим вопросам о курсе и пользе предмета. Полезность предмета в среднем оценили в 3.76, увлекательность предмета — 3.95, по пятибалльной шкале.

Результаты на экзаменах и отметки предсказанные мною в большинстве случаев совпадали (precision 90%). Одной из групп удалось показать наилучший результат среди других учебных групп всего внешнего потока. По моему мнению, одним из факторов могла служить конкурентная среда, образовавшаяся в группе. Я сравнил результаты ЕГЭ студентов обоих групп, средние и медианы примерно совпадают соответственно, а успеваемость на экзамене заметно отличается по пятеркам.

Второй год

Пришло время продуктивности и автоматизации!

Задачи стояли те же, студенты — вновь первокурсники, но в этот раз я решил повысить KPI по увлекательности, понятности и полезности, а не по итоговой отметке на экзамене. Мои студенты — это еще вчерашние школьники, большинство из них не сдавали ЕГЭ по информатике, в общем были абсолютными нулями в программировании. Немного вдохновившись курсом Harvard CS50, я решил, что рутину нужно автоматизировать, освобождая при этом время на вопросы студентов и детального разъяснения материала курса.

Софт и сервисы

  • Dropbox Paper для заметок и “выжимок” из лабораторных занятий
  • HackerRank для автоматической проверки контрольных и домашних работ
  • Google Sheets для ведения учета сдачи ДЗ и результатов контрольных работ
  • Google Forms для записи на пересдачу контрольных и сбора обратной связи
  • Trello письма студентов на мою почту с вопросами
    автоматически становятся карточками в моем ToDo борде

Как проходили контрольные и сдача ДЗ

Желание автоматизировать проверку задач приводило меня к мысли о том, что придется учить пользоваться git’ом студентов. Мне принципиально нужно было готовое, почти идеальное коробочное решение. Этим решением стал сервис HackerRank. Данный сервис +aaa (доп. функционал написанный мной используя официальный API) позволил мне автоматически проверять задачи и видеть списанные работы (детектор плагиата). На подготовку задач и написание тестов уходит больше времени, но сделать это нужно всего лишь раз. Попытка научить студентов программировать и о том, где этот процесс можно и нужно автоматизировать - 3 Кажется кто-то списал и не стесняется :(

Выставление семестровых отметок

На этой части хотелось бы остановиться поподробнее. Обещаю сложными терминами не пользоваться и объяснить все на пальцах.

Первое, я хотел убрать субъективность преподавателя в оценке успеваемости студента. Второе, не думать о том, какие у кого отметки, как считать финальную, какая должна быть шкала, etc. Третье, учитывать практически любой “чих” (посещаемость, активность на занятии, etc) студента, как фактор в выставлении семестровой отметки.

Какие данные я собирал?

  • Посещаемость: был / не был в определенный день — бинарный признак
  • Работа на занятиях: за решение определенной задачи, определенный балл — числовой
    признак
  • Результаты контрольных работ — числовой признак
  • Результаты выполнения домашних заданий — числовой признак

Все это сливается в одну таблицу, масштабируется и подается на вход алгоритму K-Means, результатом выполнения которого, будет маппинг между студентом и кластером, к которому он принадлежит (отметки 2, 3, 4, 5).

Мы просим компьютер разделить множество на 4 подмножества так, как ему “кажется” объективней.

import pandas as pd
import numpy as np

from sklearn.cluster import KMeans
from sklearn import preprocessing
from sklearn.decomposition import PCA

# Learn
clu = KMeans(n_clusters=4, random_state=240)
clu.fit(processed_data)

# Clusters
labels = pd.DataFrame(clu.labels_)

# Reduce space dimension
pca = PCA(n_components=3)
pca.fit(processed_data)

pca_processed_data = pca.transform(processed_data)

Использование простейших методов Машинного Обучения не требует сложной подготовки

Вот как выглядят отметки и кластеры в трехмерном пространстве признаков. Определенно кому-то нужно ставить два и автомат :)

image
Кластеризация студентов по успеваемости (KMeans)

На первый взгляд, получившиеся отметки совпадают с моим представлением об успеваемости конкретных студентов. Если такой подход применить повсеместно и собирать данные обучающей выборки, можно будет по успеваемости на первом месяце (гипотеза) обучения предсказать отметку в конце семестра. Таким образом, это позволит вовремя определить “проблемных” студентов и предложить им помощь в дополнительном разъяснении материал.


Вместо заключения

Лабораторные занятия теперь полностью посвящены объяснению материала и решению задач. Покажет ли это увеличение установленных KPI, остается пока открытым вопросом.

Сервис HackerRank для образовательных целей, описанных выше, является не совсем удобным инструментом с отсутствием очень важных и удобных фич. По этому по классике Исследование Рынка → Customer Development → MVP → pre-seed → seed
ну вы знаете.

Автор: hose314

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js