Спроба навчити студентів програмувати і про те, де цей процес можна і потрібно автоматизувати


Саме ця цитата Стіва Джобса зустрічає відвідувачів сайту 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)

Використання найпростіших методів Машинного Навчання не вимагає складної підготовки
Ось як виглядають позначки і кластери в тривимірному просторі ознак. Безумовно комусь потрібно ставити два і автомат :)
image
Кластеризація студентів за успішністю (KMeans)
На перший погляд, отримані позначки збігаються з моїм поданням про успішність конкретних студентів. Якщо такий підхід застосувати повсюдно і збирати дані навчальної вибірки, можна буде по успішності на першому місяці (гіпотеза) навчання передбачити оцінку в кінці семестру. Таким чином, це дозволить вчасно визначити «проблемних» студентів і запропонувати їм допомогу в додатковому роз'ясненні матеріал.


Замість висновку

Лабораторні заняття тепер повністю присвячені поясненню матеріалу і розв'язування задач. Покаже чи це збільшення встановлених KPI, залишається поки що відкритим питанням.
Сервіс HackerRank для освітніх цілей, описаних вище, є не зовсім зручним інструментом з відсутністю дуже важливих і зручних функцій. З цього по класиці Дослідження Ринку → Customer Development → MVP → pre-seed → seed
...
ну ви знаєте.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.