おきしみみ (oxij) wrote,
おきしみみ
oxij

Лабораторный тотализм как версия метода контроля над мозгами студентов

Вам никогда не казалось, что традиционный способ подготовки и сдачи лабораторных работ — это ад какой-то?

Начнём с того, что отчёты по лабораторным работам — это бред. Ради двух определяющих утверждений о том как, собственно, решали задачу, городить целый никому не нужный документ.

Во-вторых, принимать лабораторные в интерактивном режиме (когда студент сидит под боком) — стресс для обеих сторон. Если что-то не работает, то начинаются всякие fastfixы. Это раздражает. Время оборачиваемости fastfixов не даёт параллельно с принятием лабораторной заниматься чем-то полезным.

Наконец, студентов нужно заставлять приходить в какое-то определённое время и самому тоже заставляться. Обычно я веду себя добросовестнее студентов и прихожу раньше положенного, а когда все опаздывают, очень печалюсь, ибо 40 впустую потраченных минут я всегда мог бы потратить с пользой.
И вообще, тяжело заставить себя делать что-то, если знаешь, что через 30 минут нужно будет начать делать что-то совсем другое, и это совсем другое будет длиться очень долго. Как бы незачем загружать в оперативную память то, что всё равно будет из неё выгружено по мере делания совсем другого.

Барабанная дробь.

Самым большим своим ноу-хау в обучении студентов считаю насильственное насаживание им системы контроля версий под названием Mercurial.

Вообще, чиста философски, я люблю Git (потому что формат хранения данных очень ня), но Меркуриал выруливает по нескольким причинам:
* его команды cli понятны даже детям;
* можно pushать в удалённые репозитории без головной боли;
* на всяких странных операционных системах не приходится ставить Cygwin.

Кроме того, что несчастные студенты узнают, что бывает не только svn (некоторые, правда, и этого не знают, но с каждым годом таких всё меньше), а для создания своего репозитория вовсе не нужно поднимать где-то сервер (для многих это оказывается божественным откровением), так ещё и задача проверки лабораторных сильно упрощается.

Можно пялиться на историю изменений. Плагиатить код, делая разумную историю, очень тяжело. Читерить, имея за спиной персистентную историю — тоже.

Можно править ошибки в студенческом коде, коммитить изменения в локальную копию, а потом пытаться мержить их в каждую новую апстримную версию. Смержилось — баги не поправлены, можно не перепроверять.

Можно править код и делиться патчами с выполняющим лабораторную (доброта mode on).

Можно собирать статистику, рисовать графики, смотреть где у людей возникают проблемы.

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

Можно не до конца специфицировать задание, а потом делать тесты, направленные на выявление неспецифицированного поведения. Два решения ведут себя одинаково на всех неспецифицированных тестах? Не плагиат ли?

Можно писать генераторы тестов и тестить решения, вручную пропатченные для работы с этим генератором. И мержить эти патчи в каждый новый апстрим.

Короче, я не понимаю как люди без этого обходятся. Нет, конечно, в описываемом подходе процесс проверки становится почти бесконечным, но, я надеюсь, и конечный результат этого стоит.

И последнее. Я несколько лет назад делал чудесный конспект по своему предмету, но в процессе меня осенило, что писать очередной невнятный учебник мне не хочется. Предмет в достаточной степени устоялся, чтобы в базовой его части можно было найти приличное количество приличной литературы. Поэтому я написал ровно две лекции:
* про юридические ужасы и лицензии (чтобы попытаться разобраться в этом самому);
* про ABI и линковку (потому что, объективно, про это на русском языке нигде нормально не написано; правда у меня тоже очень хорошо не получилось).
Ещё я хотел было написать про файловые системы и всякие интересные смежные вещи связанные с RAIDами и durability, но интерес как-то поугас.

Поэтому несколько недель назад я решил не прятать от мира своё творение. Желающие могут проследовать на страницу конспекта на github. Там есть все исходники в ТеХе и уже скомпилированные pdfки.

Если у вас есть желание посмеяться над моим пониманием четвёртой части гражданского кодекса или немного просветиться (или снова посмеяться) по поводу Application Binary Interface, различных видов линковок (статическая, динамическая, динамическая линковка статических объектов, etc), релокации кода (PIC, GOT, etc), то милости прошу.
Tags: ifmo, teaching
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments