Именно эта цитата Стива Джобса встречает посетителей сайта cs.betlabs.ru, можно считать это попыткой мотивировать студентов работать усерднее над своими домашними и лабораторными заданиями. К сожалению, метрики для количественной оценки влияния мотивации от преподавателя на успеваемость студента у меня пока нет. Более того, я считаю, что конкурентная среда в учебной группе является куда более важным фактором в общем показателе успеваемости. Сейчас это всего лишь гипотеза, а ее проверка не лежит в области моих научных интересов.
Предыстория
Мне, как и любому аспиранту, положено 100 часов из учебного плана потратить на преподавание в ВУЗе. Конкретно передо мной стояла задача проведения лабораторных занятий по курсам “Информатика и основы алгоритмизации” и “Объектно-ориентированное программирование” на языке C# для студентов первого курса бизнес-информатики. Важно отметить тот факт, что абсолютное большинство студентов считало, возможно до сих пор считает, что программирование им в их текущей и будущей деятельности абсолютно не понадобится.
Первый год
В первый год и первый семестр преподавания у меня были две учебные группы общей численностью 58 человек. Задачи: проводить контрольные работы, проверять индивидуальные домашние задания и выставить отметку по 5 балльной шкале о семестровой работе. Поставленная мною отметка не является окончательной, а финальная отметка определяется на экзамене лектора.
Нагрузка была большая, делать нужно было много, поэтому очень часто я слышал от студентов комментарии по поводу того, что этот предмет им “в жизни не понадобится”. Я довольно часто проводил разъяснительные беседы о том, что свои когнитивные способности необходимо тренировать и программирование отличный инструмент для того, чтобы подготовить мозг к системному и в тоже время творческому мышлению. Не думаю, что мои слова нашли отклик в большинстве умов, но мне кажется некоторое количество студентов задумались и нашли для себя программирование полезным.
Софт и сервисы
- Google Sheets для ведения учета сдачи ДЗ и результатов контрольных работ
- Google Forms для записи на пересдачу контрольных и сбора обратной связи
- BitLy.com сервис сокращения ссылок
Как проходили контрольные и сдача ДЗ
Я только знакомился с процессом проведения лабораторных занятий, по этому делал так, как рекомендовала лектор. Контрольные писали на бумажных листах. Все время лабораторных занятий уходило на проверку домашних заданий. Я “на глаз” проверял работу программ.
Итоги
Статистика посещения страницы со списком задач для выполнения домашних заданий. В осенний семестр студенты активно начинают учиться в середине ноября.
По окончанию семестра я провел анонимный опрос по классическим вопросам о курсе и пользе предмета. Полезность предмета в среднем оценили в 3.76, увлекательность предмета — 3.95, по пятибалльной шкале.
Результаты на экзаменах и отметки предсказанные мною в большинстве случаев совпадали (precision 90%). Одной из групп удалось показать наилучший результат среди других учебных групп всего внешнего потока. По моему мнению, одним из факторов могла служить конкурентная среда, образовавшаяся в группе. Я сравнил результаты ЕГЭ студентов обоих групп, средние и медианы примерно совпадают соответственно, а успеваемость на экзамене заметно отличается по пятеркам.
Второй год
Пришло время продуктивности и автоматизации!
Задачи стояли те же, студенты — вновь первокурсники, но в этот раз я решил повысить KPI по увлекательности, понятности и полезности, а не по итоговой отметке на экзамене. Мои студенты — это еще вчерашние школьники, большинство из них не сдавали ЕГЭ по информатике, в общем были абсолютными нулями в программировании. Немного вдохновившись курсом Harvard CS50, я решил, что рутину нужно автоматизировать, освобождая при этом время на вопросы студентов и детального разъяснения материала курса.
Софт и сервисы
- Dropbox Paper для заметок и “выжимок” из лабораторных занятий
- HackerRank для автоматической проверки контрольных и домашних работ
- Google Sheets для ведения учета сдачи ДЗ и результатов контрольных работ
- Google Forms для записи на пересдачу контрольных и сбора обратной связи
- Trello письма студентов на мою почту с вопросами
автоматически становятся карточками в моем ToDo борде
Как проходили контрольные и сдача ДЗ
Желание автоматизировать проверку задач приводило меня к мысли о том, что придется учить пользоваться git’ом студентов. Мне принципиально нужно было готовое, почти идеальное коробочное решение. Этим решением стал сервис HackerRank. Данный сервис +aaa (доп. функционал написанный мной используя официальный API) позволил мне автоматически проверять задачи и видеть списанные работы (детектор плагиата). На подготовку задач и написание тестов уходит больше времени, но сделать это нужно всего лишь раз. Кажется кто-то списал и не стесняется :(
Выставление семестровых отметок
На этой части хотелось бы остановиться поподробнее. Обещаю сложными терминами не пользоваться и объяснить все на пальцах.
Первое, я хотел убрать субъективность преподавателя в оценке успеваемости студента. Второе, не думать о том, какие у кого отметки, как считать финальную, какая должна быть шкала, 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)
Использование простейших методов Машинного Обучения не требует сложной подготовки
Вот как выглядят отметки и кластеры в трехмерном пространстве признаков. Определенно кому-то нужно ставить два и автомат :)
Кластеризация студентов по успеваемости (KMeans)
На первый взгляд, получившиеся отметки совпадают с моим представлением об успеваемости конкретных студентов. Если такой подход применить повсеместно и собирать данные обучающей выборки, можно будет по успеваемости на первом месяце (гипотеза) обучения предсказать отметку в конце семестра. Таким образом, это позволит вовремя определить “проблемных” студентов и предложить им помощь в дополнительном разъяснении материал.
Вместо заключения
Лабораторные занятия теперь полностью посвящены объяснению материала и решению задач. Покажет ли это увеличение установленных KPI, остается пока открытым вопросом.
Сервис HackerRank для образовательных целей, описанных выше, является не совсем удобным инструментом с отсутствием очень важных и удобных фич. По этому по классике Исследование Рынка → Customer Development → MVP → pre-seed → seed
… ну вы знаете.