О чтении дистанционных курсов
Опубликована статья о методике дистанционного преподавания дисциплины «алгоритмы и алгоритмические языки» на основе Python3.
Завершились лекции и практические занятия по курсу «Алгоритмы и алгоритмические языки», который был прочитан дистанционно в Севастопольском филиале ВМК МГУ. О том, как были организованы занятия, рассказывает Георгий Курячий.
«АиАЯ?» — сказала говорящая голова
Это уже второй мой первый семестр по курсу «Алгоритмы и алгоритмические языки» (сокращённо АиАЯ), который я читаю дистанционно для Севастопольского филиала МГУ. Курс базируется на Python3. Сочетание новизны программы, специфики языка и особенностей севастопольской аудитории породило целый букет спецэффектов, но о них после. Возможно, в виде доклада на конференции «Свободное программное обеспечение в высшей школе». В прошлом году я слишком занят был самой программой, а вот сейчас есть время рассказать о том, как проходят лекции (одну из которых я здесь выкладывал уже) и практика, что в них хорошего и что не очень.
Структура курса
- Интерактивная лекционная программа (в режиме говорящая голова+слайды/живая демонстрация)
- Важно заметить, что это «полноценный» цикл 4 часа в неделю в течение всего семестра. Основной задачей было избежать обучения «наскоком» (две недели каждый день, а весь семестр практика).
- Интерактивные семинарские занятия по теме лекций, на которых студенты под руководством преподавателя решают простые примеры по теме лекций (о режиме работы см. далее)
- Более сложные самостоятельные домашние задания по теме лекций (часть заданий дополнительно проверяется системой проверки домашних заданий, извините за тавтологию)
- Трижды за семестр вместо практических занятий проводятся контрольные: решение задач-«гнератов» (т. е. параметризированно различных у всех студентов) за фиксированное время
- На время зачётной сессии даётся т. н. «семестровый проект» — сравнительно большое задание запрограммировать что-нибудь осмысленное
- Устный экзамен
Оценка по курсу выставляется на основании
- Прохождения (в Moodle) лекций с вопросами
- Решения домашних заданий (в Moodle)
- Решения контрольных (в Moodle)
- Ответов на экзамене (устно)
Формально считается, что все четыре параметра равноценны, но фактически решения домашних заданий и контрольных, а также работа студентов на семинарах вполне определённо свидетельствуют уровень знаний.
Параллельно (и независимо от лекций) проходит т. н. «практикум на ЭВМ», который проводит преподаватель филиала на месте. По практикуму полагается зачёт.
Как всё происходит
Лекции
Для дистанционного чтения лекций на факультете оборудовано специальное помещение для лектора, и два помещения для слушателей — в филиале. Дистанционные лекции, по моему мнению, практически не хуже обычных, если оборудование позволяет.
В лекционном классе есть небольшая маркерная доска, очень качественные камера и аудиторный микрофон и здоровенный телевизор для передачи картинки и звука. В студенческом — несколько рядов парт (человек на 30) и опять-таки здоровенный телевизор и качественные камера и аудиторный микрофон, так что голоса с мест слышны вполне отчётливо.
Аппаратура позволяет передавать картинку не только с камеры, но и с преподавательского компьютера, а также смешивать их в разных пропорциях (экран побольше, камера поменьше, если главное — на слайдах и наоборот, если на доске).
Что не работает в этих условиях? Некоторые лекторские приёмы — использование «длинной» доски (чтобы было куда смотреть/ссылаться позже); энергичная беготня с танцами вдоль доски и вглубь аудитории (переключение внимания, а ещё слушатели вертят головами и разгоняют кровь в шеях и, соответственно, мозгу).
В лекциях я активно использую содержимое «лекций» Moodle в качестве слайдов, и ещё активнее — живую демонстрацию (интерпретатор командной строки Python делает этот процесс простым и понятным). Так что всё равно приходится перед камерой сидеть и изображать говорящую голову. Которая, кстати сказать, в камере выглядит куда более осмысленно, чем лектор в живой аудитории, который сгорбился над своим ноутбуком и что-то покрикивает в экран, не глядя на слушателей.
Совет: камера, телевизор и экран ноутбука должны быть размещены так, чтобы когда вы разглядываете основные свои объекты — экран компьютера и слушателей в телевизоре, им казалось, что вы глядите на них (особенно для телевизора это верно). По опыту, оптимальное положение такое:
[........................] [........................] [.......Телевизор........] [........................] [........................] [.........камера.........] [_____________] [___Монитор___] [_____________] [_____________]
Кстати, лично мне (я близорук, и очками это исправляется не до конца) оказалось даже удобнее налаживать обратную связь со слушателями именно так, чем вживую в большой аудитории. Потому что в большой аудитории не слишком хорошо различаю лица и в первом ряду, а тут я вижу всех.
Практические занятия
Это самая сложная и стихийно сложившаяся часть, которая, тем не менее, оказалась довольно эффективной.
Занятия проходят в компьютерном классе. После различных экспериментов стало понятно, что звук в аудитории нужен, как минимум, голос преподавателя. Так что один компьютер в классе — т. н. преподавательский — занимается трансляцией голоса на колонки (при необходимости в его микрофон можно задать вопрос).
В текущем варианте нет возможности оставлять преподавательскую машину круглосуточно включённой с загруженной на ней нужной рабочей средой, так что в процессе участвует ещё один компьютер — т. н. демо, или «доска». Изначально предполагалось, что «доска» и преподавательский компьютер — это одно и то же, причём к преподавательскому подключён ещё и проектор, демонстрирующий происходящее на его экране. Но проектора нет (или его хлопотно подключать).
Семинар начинается с того, что студенты и преподаватели регистрируются в чате Moodle. Там преподаватель объявляет задания, мы задаём друг другу вопросы и отвечаем на них, а время от времени и просто легкомысленно болтаем. Все сообщения чата Moodle хранит, так что в конце семестра можно посмотреть, кто как себя вёл на семинарах, хотя я уже и так помню :).
Следующее действие: все подключаются к рабочему столу демо-машины в режиме «только просмотр», а преподаватель — в режиме дистанционного управления. Рабочий стол «доски» специально сделан небольшим, чтобы это окон не занимало много места, и студент мог самостоятельно работать, поглядывая на демонстрационный экран, где я что-нибудь объясняю и показываю. В такой форме это работает заменой проектора, причём лучшей заменой: во-первых, всё видно, независимо от расстояния и положения, а во-вторых в случае чего можно сделать Copy+Paste прямо с демо-экрана.
Когда несколько студентов решили предложенное им упражнение (о чём они сообщают в чате), кто-то из них «идёт к доске», т е получает доступ к рабочему столу демо-машины в режиме управления и пишет/отлаживает/запускает там свою программу, а мы ему помогаем. Опять-таки, Copy+Paste работает, и вполне можно быстро продемонстрировать готовое.
Контрольные
Контрольные проводятся в том же компьютерном классе, с тем же открытым чатом, в котором я официально даю ссылку на соответствующий модуль типа «Тест», ограниченный по времени одной парой (иногда чуть побольше). В модуле — три небольших задачки. Я стараюсь, чтобы эти задачки были разные для всех студентов. Для этого я пишу (на Python3, конечно!) программы-генераторы условий. Студент запускает такой генератор, тот ему выводит случайное число — «номер варианта», а затем — условие задачи. Условие в общем виде — параметрическое, а конкретный вариант содержит комбинацию значений параметров на основании датчика псевдослучайных чисел, запущенного как раз с «номера варианта». Таким образом, сгенерированное условие задачи (которое студент должен скопировать в ответ), можно получить и просто повторно запустив генератор с параметром-номером варианта.
Экзамен
Устный экзамен — далеко не единственное мероприятие, влияющее на оценку в семестре. Фактически, экзамен — это возможность повысить или понизить уже сформированную оценку на балл, остальное выставляется «автоматом». Задача экзамена сужается до определения «кто что понял из прошедшего курса». Для того, чтобы это выяснить, студенты (желающие повысить или понизить оценку) объединяются в небольшие группы (7 ±2 человека), и разговаривают с преподавателем по всем темам курса (часа два с небольшим). При этом пользоваться можно чем угодно, всё равно разговор происходит в реальном времени, и всегда становится понятно, насколько уверенно студент чувствует себя в том или ином разделе курса.
Я провожу так экзамены аж с 2001 года, и особых сбоев не наблюдал. За исключением ситуации, когда студент является на экзамен настолько неготовым, что
- садится с самого краю, причём норовит во второй ряд (это из семи-то человек)
- практически не отвечает на вопросы, и как следствие, не получает никакой оценки
Когда человек таким образом не сдаёт спецкурс — беда невелика, поищет себе другой, более халявный. А вот экзамен в первую сессию ему всё-таки лучше как-то сдать. В нашем случае это «как-то» превращается в -1 балл к общей оценке, что чувствительно, но не смертельно. Правда, состояние общей оценки у таких скромников обычно тоже оставляет желать лучшего.
Дистанционные инструменты и их применение
Отдельно останавливаюсь на том, с какими техническими средствами мы работаем. Хочу обратить внимание на то, что в качестве программной платформы практически везде используется линейка дистрибутивов «Альт образование». Весьма показательно оценить процедуру развёртывания о объём доработок на месте (они были, и приличные): это будет план по выпуску следующей версии дистрибутива.
Аудио-видео
Лекции читаются с использованием специализированного видеооборудования, которое:
- передаёт изображение и с камеры, и с экрана компьютера
- умеет сводить эти картинки, а так же изображение второго абонента в различных пропорциях
- умеет вычитать звук колонок из звука микрофона (это важно, если вы хотите использовать чувствительный аудиторный микрофон)
- обеспечивает достаточно небольшое время задержки при передаче картинки приличного качества
- главное: камера, микрофон и экран — весьма приличные (и недешёвые)
Программная замена этой железяке существует, но когда я её проверял, аппаратура была рангом пониже, и мне показалось всё вместе неудобным. Впрочем, вполне допускаю, что на хорошей аппаратуре разницы бы не ощутил, если бы разницы в функциях не было.
Практические занятия — совсем другая статья. Студенты работают на компьютерах, и скорее нуждаются в комментариях и демонстрациях, чем в голосе лектора. Правда, оказалось, что Moodle-овского чата и «доски» для практики недостаточно, т. к. довольно регулярно надо что-то объяснять. Так что пришлось организовать «на скорую руку» аудиосвязь посредством Google Hangout. Причём в хенгаут этот я сам захожу с обеих сторон — и со своего компьютера, и в преподавательского в Севастополе, с помощью удалённого доступа к рабочему столу — под разными входными именами. А потом болтаю сам с собой! На крайний случай есть микрофон и в компьютерном классе, но пользоваться им на практике, когда у каждого есть вопросы, нельзя. Лучше чат.
Moodle
Базовый ресурс для курса — факультетский Moodle. Каюсь, я не использую и десятой доли возможностей этой платформы, главным образом потому, что любая подготовка материалов — очень ресурсоёмкое занятие.
Из Moodle используются четыре типа модулей:
«Лекция». Фактически, в режиме слайдов: между разделами всегда только один переход. Сами разделы служат в основном для группировки по темам и для того, чтобы избежать эффекта tl;dr. «Лекции» служат одновременно и демонстрационным материалом, и конспектом при подготовке к экзамену.
Несколько начальных тем (нормальные алгорифмы Маркова, машина Тьюринга, синтаксические диаграммы) сопровождаются соответствующими эмуляторами, которые написаны на JavaScript и запускаются прямо в браузере. Поскольку страницы Moodle можно редактировать непосредственно в виде HTML, встроить эмуляторы в них технически несложно. И я даже так и сделал, превозмогая трудности. В эмуляторах же можно решать и домашние задания по этим темам.
Для двух других тем (общерекурсивные функции и БНФ) тоже хочется иметь такие эмуляторы.
- Формат лекции подразумевает вопросы для самоконтроля, а прохождение этих вопросов сопровождается оценкой. Однако все вопросы скрыты до сессии: лекции посмотреть можно, оценку получить нельзя
- «Задание». Задание в Moodle предполагает написание некоторого «эссе», в насем случае — программы. Оценивание происходит вручную. Программы-решения прикладываются к ответу. Если задача проходит через систему тестирования заданий, ответом является ссылка на успешное выполнение всех тестов в этой системе.
- «Тест» используется для контрольных. Включает в себя несколько «вопросов» из общего «банка вопросов» Moodle, однако так вышло, что задачи все тоже типа «эссе», т. е. на написание непосредственно программ: опросники и иные типы вопросов отчего-то использовать не удалось
- «Чат». Используется для проведения практических занятий. Представляет собой типичный чат, через который я дублирую наиболее важные вопросы и утверждения, сделанные устно. Были попытки использовать для семинара другие разработанные для этой цели инструменты (например, форум специального вида), но дело упёрлось опять-таки в подготовку большого объёма материала.
Moodle входит в состав серверной части «Альт Образование», так что технологически нам есть чем подпереть методику с этой стороны. В Севастополе мы, конечно, пользуемся факультетским Moodle, во-первых, для отчётности, а во-вторых так и проще, потому что у факультетского Moodle есть свои администраторы, которых можно попросить вместо того, чтобы всё делать самому.
EJudge
Больше половины домашних заданий оформлено в виде задач для EJudge с тестами. EJudge — система проведения олимпиад, но для формальной проверки домашних заданий вполне подходит.
Кстати, оказалось, что EJudge можно управлять не только через перегруженный всякими возможностями WEB-интерфейс, но и из командной строки. Как минимум, из командной строки можно раскладывать задачи и тесты к ним, решения задач, генерировать файлы ответов, и хранить это всё в GIT-е.
EJudge используется в первую очередь как фильтр: как это ни странно, студенты время от времени пытаются сдать заведомо не работающее или работающее только на одном примере решение. Множество тестовых примеров, на которых должно работать решение в EJudge, исключает такую возможность.
Каждое решение всё равно просматривается на предмет плагиата и разумности кода, причём субъективные требования к разумности для студентов с разным уровнем успеваемости могут быть разные.
EJudge также входит в состав серверной части «Альт Образование», но мы, опять-таки пользуемся факультетским, по тем же причинам.
Компьютьерный класс
В компьютерном классе организована стандартная для «мобильных классов» площадка бездисковых клиентов, с последующей доработкой.
- Все пользовательские компьютеры загружаются по сети, установленная на них ОС не имеет значения
- Сервер площадки обеспечивает сетевую загрузку Live-образов подключение модификаций к ним
После загрузки Linux-система (используется ALT Linux starterkit MATE) работает в штатном режиме, с учётом того, что жёсткий диск не используется, а необходимое для работы доступное на запись файловое пространство располагается в оперативной памяти
- Это означает, что после выключения / перезагрузки вся информация теряется
- Что скорее хорошо, чем плохо: свои файлы студенты всегда могут скопировать на флешки/по сети, но зато любая ошибка настройки лечится перезагрузкой.
Кроме того, организован идентичный студенческим выделенный компьютер (в действительности — виртуальная машина, но это не имеет значения), экран которого транслируется на все студенческие компьютеры. Размер этого экрана существенно меньше размера монитора, так что студент всегда может поглядывать на пример, и параллельно делать что-то самостоятельно. Машина эта называется «Доска».
Для трансляции/просмотра используется сервер и клиенты http://tigervnc.org/. Преподаватель запускает клиент в режиме полного доступа к доске, а студенты — в режиме только просмотра. По договорённости через чат «к доске выходит» тот или иной студент, получая полный доступ, и показывает товарищам решение задачи (товарищи могут ему помогать, если что).
Полученная схема уже второй год успешно работает с преподавательским компьютером (на котором запускается только vncviewer) в Москве и остальными компьютерами — в Севастополе. Если и были какие-то сбои в работе сети, пользователи их не видели :), только я.
Методические приёмы
Некоторые хитрости/подробности, которые, как мне кажется, помогли нам в этом семестре — вперемежку с симметричными недостатками .
- JS-эмуляторы. Машина Тьюринга, нормальный алгорифм Маркова, металингвистическая диаграмма — не отвлечённые абстракции, задачи для которых решаются «на бумажке», а вполне реальные программы. Они обрабатывают вполне реальные данные, и делают это не так, как надо, если данные плохие. Плохие программы не работают, плохие схемы не рисуются.
- Поскольку сами эмуляторы просто встроены в страницы Moodle и работают, отвертеться от них нельзя (не сказалось, не заработало и т. п.).
В следующем году очень хочется все остальные мелкие темы (рекурсивные функции и БНФ) тоже перевести в разряд эмуляторов. Хочется, но кто бы их написал?
- Одна из составляющих оценки в семестре — «прощёлкивание» лекционных материалов. Moodle позволяет вставлять в лекции т. н. «вопросы для самоконтроля», а по их результатам делать какие-то замеры. Вопросы в лекциях есть, но в течение семестра скрыты от студентов, так что материалами можно пользоваться только как слайдами, а оценка за лекцию как была 0, таки остаётся. Когда наступает пора готовиться к экзамену, надо эти вопросы открыть. Само прохождение лекций и ответы на вопросы почти гарантируют высокий балл. Мне кажется, человек, который перед экзаменом наощупь подбирает ответы, а лекции не перечитывает, вряд ли нужен факультету в будущих семестрах.
Много споров вызывало то, что в схеме класса не предусмотрены учётные записи пользователей, персональные ресурсы (например, домашний каталог по сети на сервере), настройку рабочих столов и прочее. Моё мнение: на первом курсе всё это только вносит ненужную неразбериху. Особенно в ситуации, когда преподаватель тут, в студенты — там. А так я чётко знаю, что именно находится на рабочем столе каждого после включения системы. Более того, если в течение семестра возникает необходимость изменить операционную систему в классе — поставить ещё пакетов, подправить конфигурацию, да просто вынести на рабочий стол что-нибудь, я просто подкладываю на сервер другой образ (точнее, другую «заплатку» к стандартному образу), это не занимает и 15 минут.
- Суммарная оценка выставляется по принципу -1/0/+1 за каждый элемент семестрового контроля. Это неявно означает «облажался»/«вытянул»/«получилось хорошо». По моей мысли, такая градация поможет отказаться от установки «мне бы хоть троечку» или «я хорошист, а не отличник». К тому же, почти всегда есть возможность задним числом немного приблизиться к очередному рубежу (дописать Д/З или даже контрольную с некоторым штрафом). Впрочем, это может оказаться только фантазиями.
Практика показывает, что темы начала семестра — всё те же МТ. НАМ и в особенности БНФ (ну что такого заумного в БНФ-то?) во-первых, к концу семестра забываются, а во-вторых вообще не очень-то хорошо ложатся в неокрепшие детские мозги (именно по причине их неокреплости). Для устранения этого пробела в качестве финального семестрового проекта все студенты пишут эмуляторы нормальных алоргифмов Маркова и машины Тьюринга, и программу, сопоставляющую строку произвольной БНФ. Реализация на Python3 оказивает до смешного простой — 19 строк для НАМ, 34 — для МТ и 28 — для БНФ (тут, правда, всё достаточно упрощено: БНФ нужны только базовые, без повторителей и пустых альтернатив, и с применением неэффективного рекурсивного алгоритма)
Главный недостаток любой удалённой схемы — отсутствие самодисциплины «с той стороны». Например, на практических занятиях чётко выделялись три-пять активно действующих человек, вся остальная группа просто отмалчивалась. Причём — предполагаю — что не только из лени, но и от природной неспособности что-либо новое делать быстро и сразу, помноженной на ложную скромность. В таких случаях нужен активно действующий ассистент в классе, который сам выявляет остановившихся и либо сам же помогает, либо привлекает преподавателя.
Пара слов о плагиате. Я прекрасно представляю себе, что при современной информационной связности игра в «списал-не списал» — это вариант игры в полицейские и воры, гонка наступательных и оборонительных вооружений. И исход этой гонки очевиден: техника списывания достигает бессмысленного для дальнейших расследований качества. Мне кажется (хотя я и делаю кое-что против прямого списывания, например, параметрически задачи), надо сам процесс поменять так, чтобы тупо списывать стало невыгодно (неинтересно; некруто, наконец). Только не знаю, как
Чего не хватает
Итак, что же хотелось бы ещё иметь в будущем учебном году? Описываю идеал, конечно.
Отказаться от hangouts для голосовой связи. На самом деле большинство возможностей hangouts не нужно. Минимум — трансляция голоса в одну сторону, максимум — аудиоконференция на небольшое число абонентов (чаще два — преподаватель и зал, но может присутствовать и третий — ассистент). Для решения этой задачи есть приличные свободные инструментарии, например Jitsi, и в принципе WebRTC.
- Попробовать внедрить систему общей работы с рабочими столами (например, iTalvc), которая как раз позволяет наблюдать за всем, что происходит на компьютерах в классе, подключаться к экрану конкретного пользователя и помогать ему и т. п. Подозреваю, что «просто так» всё не заработает, надо подумать о том, как выдержать принцип «демо-экран маленький, пользователь его видит, и параллельно работает».
- Попробовать (на/до)писать соответствующие эмуляторы, чтобы любая значащая тема не оставалась без практики.
Это, кстати сказать, относится и к Python3! Сейчас лекции сопровождаются живыми демонстрациями в командной строке Python3 (реже — в редакторе), однако такие демонстрации довольно тяжело встраивать в Moodle. Можно, наверное, заснять видео с экрана, нарезать на части, и давать ссылки, но объём работ выходит заоблачный. Более перспективное, я считаю, направление — встроенные интерпретаторы Python3, наподобие brython или Skulpt, в которых будут выполняться примеры из лекций (и не только они).
- Наконец, все эти инструменты хотелось бы (вместе с образовательным контентом) свести воедино, и сформировать образовательный дистрибутив, который
- Позволит в быстрые сроки (за день) развёртывать образовательную площадку со всем необходимым
- Формировать и читать с его помощью другие курсы (не только Python, и не только программирование!)
- Создать какое-никакое сообщество.
А то я, признаться, порядком уже устал в одиночку за всем этим присматривать.
Впрочем, я совсем не один, нет.
Спасибо:
- Анатолию Викторовичу Гуляеву за организационную и административную поддержку
- Антону Соболю и Сергею Алимбекову за инженерные усилия в филиале
- Александру Чернову за помощь с EJudge
- Михаилу Рудаченко за идеи и работу с материалами (особенно во втором семестре)
- Констатнтину Жукову, который в этом году взял на себя львиную долю низовой работы (например, проверку домашних заданий)
- Владимиру Лютову за написание эмуляторов учебных ЭВМ ко второму семестру
- Павлу Сутырину за начальные усилия, без которых ничего бы не заверте…