31 мая 2012 г.

Немного о преподавательской практике

Думаю, читатели моего блога уже успели заметить, что я уже достаточно давно не писал ничего нового, а кто-то может быть даже решил, что блог "успешно" помер. Поспешу всех обнадежить, мой блог по-прежнему живее всех живых. Просто, у меня не было достаточно времени, чтобы в чем-то, достаточно интересном, досконально разобраться и написать об этом в блог - я был занят стажировкой, учебой и, в том числе, преподавательской практикой, о которой я и хочу немного поведать.
В этом семестре, мне довелось принимать лабораторные по предмету "Информационно-управляющие системы". Несмотря на столь заковыристое название предмета, на лекциях по нему рассказывают различные вводные для эмбеддеров вещи - что такое реальное время, зачем нужна RTOS, что такое watchdog, чем так хороши устройства сопряжения с объектом вообще и гальваническая развязка в частности. А на лабораторных счастливые студенты программируют драйвера для периферийных модулей стенда SDK1.1 на языке C.

Сразу опровергну истории о том, что студенты все ленивые, им нужны только деньги, а не знания и так далее и тому подобное, что можно слышать в избытке в профильных постах на Хабре. Студенты, с которыми мне доводилось заниматься, ходят на занятия и сдают лабораторные, сидят в аудиториях после конца пар, чтобы разобраться в новой лабораторной (особенно это заметно к концу сессии). Но увы, видоизмененный принцип Парето действует и здесь - 20% студентов проявляют неподдельный интерес к предмету, остальным же 80% он не сильно интересен, что впрочем и не удивительно, а скорее вполне естественно. В мою бытность на соответствующем курсе, данным предметом неподдельно интересовались вообще лишь 3.5 ВТшника.

Как заинтересовывать людей embedded-ом я слабо пока-что представляю, но думаю, что можно использовать наработки блога DIY c Хабра. Как видно по комментариям, многие из читающих его интересуются, как же можно научиться делать всякие штучки на ПЛИС и микроконтроллерах. Может быть, можно точно также заинтересовывать студентов каким-нибудь реально работающим проектом - какая-нибудь роботележка с сонаром или квадрокоптер - и в дальнейшем завлекать их в дебри встраиваемых систем, обещая, что по окончании обучения они смогут делать такие же штуковины.

Пара слов о посещаемости лекций. Естественно, аншлаг наблюдается лишь во время потоковых контрольных, а на обычных лекциях посещаемость увы падает. Мои друзья и знакомые говорят, что они в это время просто работают. Увы, но на мой взгляд, в наших реалиях совмещать работу и учебу, при сохранении максимальной занятости в учебном процессе невозможно - приходится чем-то жертвовать. Подобные выводы я подтвердил, будучи 3 месяца на стажировке в Motorola Mobility - хоть я и не ходил туда каждый день, но все же свое время эта деятельность отнимала - когда я приходил домой, мысль разобраться в лабораторной или поработать над дипломом была последней мыслью, что приходила мне в голову.
Что с этим делать я увы не знаю. Может быть можно конечно повысить стипендию студентам с 1200 рублей в месяц на что-нибудь более весомое, на что хоть как-нибудь можно прожить этот самый месяц. Естественно, не путем введения исключительно платного высшего образования и кабалы в виде договоров с фирмами, которые платят за обучение, а ты потом на них пять лет работаешь. При таком подходе много людей с мозгами, но из бедных семей просто не попадут в вузы - не всем будет охота пять лет работать "на дядю", без права смены места работы.

Вернемся к лекциям. Закономерный итог всего этого - студенты иногда плохо знают лекционный материал, что вскрывается на очередном опросе. Перлы попадаются различные, вот например (излишне пекущихся о чужой моральности просьба не беспокоиться - все примеры даются без указания авторства, группы и даже курса; если кому-то не нравится, что цитата из его работы попала на страницы моего блога - свяжитесь со мной, я ее удалю):
"Volatile - метод, который должен вызываться из пользовательской функции, которая вычисляет значение ячейки. Если он вызван и ему присвоено значение True, то данная ячейка становится чувствительной (volatile) и она будет пересчитываться при любом изменении значения"
"Таймер - средство обеспечения задержек и измерения времени средствами компьютера."
"Сторожевой таймер - аппаратно реализованная схема контроля за зависанием системы."
Что со всем этим делать - мне также неизвестно. Очевидно, что проблема в том, что студенты не заинтересованы как следует в постижении предмета. А с другой стороны, подобные незаинтересованные студенты будут всегда, вопрос в том - как увеличить или уменьшить их количество относительно общего числа студентов?

Перейдем к приему лабораторных. Это такая полезная штука, осуществление которой помогает вспомнить, а иногда и разобраться во множестве вещей, в которых в свое время не успел или не смог разобраться, а потом уже было недосуг.
Как оказалось, принимая лабораторные можно научиться быстро придумывать различные каверзные вопросы, направленные именно на понимание предмета, а не на банальное зазубривание. Эти же вопросы можно использовать и на контрольных - списывать становится бесполезно, ведь ответ, составленный без понимания сути предмета виден сразу. Конечно, подобный подход действует лишь в случае, если похожие вопросы не рассматривались на лекциях или на практических занятиях, иначе студент будет предупрежден и "вооружен".
Парочка примеров c подобными вопросами, чтобы не оставаться голословным:
  1. Имеет ли смысл использовать в написании простейших программ под микроконтроллеры (без ОС, ОС РВ или же различных переключателей процессов) функцию main() вида: int main (int argc, char * argv[]) вместо void main(void)?
  2. Какие различия будут между "абстрактным" процессом, запущенным под ОС РВ и точно таким же процессом, запущенным под обычной ОС?
  3. Почему в SDK1.1 есть еще и внешняя память (SRAM)? Почему мы не можем обойтись одной лишь внутренней, что есть внутри MCU ADuC812?
Естественно, я не стеснялся задавать вопросы и про Си и типовые вопросы из разряда "что такое watchdog" и так далее.
Отмечу, что особую важность имеет однозначность толкования вопроса. Я долгое время задавал вопросы вида "чем отличается static void foo() {} от void foo() {}" и постоянно, даже после моих объяснений, получал ответы из области ООП. Мне же было очевидно, что эти вопросы относятся к языку Си - ЯП с процедурной парадигмой, а не к чему-то еще - ведь в рамках лабораторных мы программируем SDK именно на Си!
Как показала практика, это далеко не так и то, что очевидно мне, совершенно не очевидно для множества студентов.

Теперь, пара слов об общении со студентами. Мне повезло и я был знаком, хотя бы "шапочно", с большей частью группы, у которой я вел лабораторные. Как следствие, сами лабораторные протекали в достаточно дружественной атмосфере, где, как я надеюсь, не чувствовалось непреодолимого разделения на вышестоящего преподавателя и нижестоящих студентов. И это мне совершенно не мешало задавать каверзные вопросы, отправлять переделывать неверно работающую программу или ставить четверки-тройки за негодные ответы при защите лабы (к счастью, таких негодных ответов было не так уж и много, по сравнению с остальными ответами от остальных защищающихся).
Конечно, ближе к концу семестра кое-кто пытался выносить мне мозг (и вообще давить на жалость и совесть) в instant-messenger'ах ввиду большой занятости на работе/другими делами в универе и ввиду необходимости сдать мне последнюю рубежную контрольную и стать после этого свободным для новых свершений. Но увы, пытаться проделывать все вышеперечисленное с человеком, увлекающимся ницшеанской философией, было несколько опрометчиво =). И рубежную контрольную сдавать таки пришлось...


А еще, мне довелось вести практику у студентов со второго курса, под руководством одного из преподавателей нашей кафедры.
Досужие слухи о том, что каждое новое поколение молодых людей еще хуже и ленивее, чем предыдущее потерпели свое сокрушительное поражение. Еще бы - на практику, связанную со встраиваемыми системами записалось аж 20 человек! В прошлые несколько лет о таком можно было лишь мечтать.
И что самое хорошее, все эти люди не ходили на занятия для галочки, а по-настоящему и с интересом всем этим занимались. Я считаю, это небывалый успех для embedded-направления и нужно всех этих студентов всячески зазывать на соответствующие магистерские направления.
Отмечу, что эти 20 человек не сплошь  волосато-бородатые гики, как это сейчас может многим представиться. Нет - вполне обычные студенты, чуть больше трети из которых - девушки, которые больше не падают в обморок от слов "UART на FPGA ПЛИС SDK6.1".
И вообще, за этот семестр ко мне подошло как минимум три девушки с вопросами "Жень, мне хочется научиться разводить/паять печатные платы, не подскажешь где всему этому можно научиться? Как ты всему этому учился?". Я считаю это тоже успех (и не только для embedded-направления :-P).

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

Эпилог


Под конец, я дам несколько советов таким же начинающим "преподавателям" как и я:
  • Ведите занятия по тем предметам, которые для вас самих были и остаются интересными. Нет ничего хуже, чем принудительно заниматься неинтересными вещами;
  • Придумывая вопросы для защиты лабораторных или для контрольной старайтесь мыслить нестандартно, а не просто брать и перерабатывать темы из методички в новые вопросы. Последнее убивает всякий интерес и превращает подготовку к контрольной в рутину. Попробуйте думать как студент, не слишком сильно интересующийся предметом - на чем его можно подловить, как его можно весело и непринужденно запутать и так далее;
  • Не повторяйте одни и те же вопросы для разных студентов - поверьте, правильные варианты ответов расходятся достаточно быстро;
  • Если вам предстоит выступать перед аудиторией или даже вообще вести лекцию - обязательно заготовьте хотя бы тезисы своего выступления. И обязательно сами повторите весь необходимый материал. Это очень важно! В противном случае вас ожидает epic fail =(;
  • Если на выступлении вы будете использовать слайды - их содержание должно отскакивать от зубов, чтобы потом задумчиво не смотреть на новый слайд и не вспоминать, что же вы к нему хотели такого рассказать и вообще зачем он здесь;
  • Самое важное - учитесь делить личную жизнь и преподавание. Это не так сложно, как обычно представляется в слезливых мелодрамах. Друзья друзьями, но если вы будете по дружбе и нахаляву ставить оценки - то скорее всего вам быстро сядут на шею;
  • Не беспокойтесь слишком сильно если студент совсем забил на предмет и ничего не сдает - в конце концов отчислят ведь его, а не вас. Этот совет действенен, если вся остальная группа прилежно все сдает. Иначе - доставайте всю группу, проводите столько дополнительных занятий, сколько сочтете нужным, пока студенты не возьмутся за ум и не сдадут все, что надо. Если же они все равно продолжают упорствовать - сходите в деканат, возможно их уже отчислили;
  • Если опаздываете на занятие, например потому что вы проспали будильник - позвоните хотя бы старосте и предупредите его об этом, сказав, на сколько вы задержитесь. Вам минутная работа - а студенты не будут так сильно волноваться и вообще, смогут куда-нибудь отойти на соответствующее время;
  • Если вы не можете провести занятие в определенный день и не удается найти никого, кто смог бы заменить вас - оповестите студентов об отмене занятия хотя бы за день (но не в этот же день!). Поверьте, они будут рады поспать подольше или же вовсе не пойти в универ.