silent_hussar (silent_hussar) wrote,
silent_hussar
silent_hussar

Categories:

Как я преподаю программирование 1/3

Возможно, кому-то из соотечественников это будет интересно. Среди прочих вещей, я преподаю первый и второй курсы программирования на базе технологии Java. До этого мои студенты должны взять вводный курс, в котором их знакомят с компьютерами и с игрушечной системой программирования Alice, а также с некоторыми базовыми понятиями программирования. То есть мой первый курс студенты берут не ранее второго семестра, а второй курс - не ранее третьего.

Кстати, я сознательно не пишу, что я учу студентов "языку программирования Java". Потому что язык программирования - это примерно 30 ключевых слов и полтора десятка синтаксических правил. И это весь язык. Но ещё есть технология, построенная на основе этого языка программирования талантливыми инженерами. Эта технология включает примерно 5500 стандартных классов и интерфейсов (Java API) и ряд методов их применения при разработке программ. Я обучаю студентов по возможности общим, концептуальным вопросам программирования, используя эту технологию.

Написать это в своём ЖЖ меня подвиг просмотр видеоурока, выставленного тут: https://ryecast.ryerson.ca/62/watch/2516.aspx
Это Ryerson University, вуз средней паршивости (категории II-A), находящийся в Торонто. Тема лекции: "Массивы в языке программирования Java".

Сначала дам краткий разбор этой лекции, так как я сам преподаю этот же материал в своём ещё более паршивом (II-B) университете.

Видеозапись длится 1:40, т.е. два урока по американским меркам.

Преподаватель - женщина. Судя по сильному акценту, явно из числа иммигрантов и вполне возможно, русскоязычная. О чём это говорит? Скорее всего она занимает низкооплачиваемую должность простого преподавателя, а не профессора.

Общее впечатление - ниже плинтуса. Программирование так преподавать нельзя. Без работы с кодом руками во время такого занятия студент мало чему научится. Видеоурок вообще бесполезен, так как то, что показывает экран, прочитать невозможно. А вид преподавателя, размахивающего руками и произносящего заклинания, программировать научить не может совсем.

Другие серьёзные упущения:

1. Преподаватель не объявил темы занятия и учебных целей. Это то, с чего надо было начинать. И лишь на 3:47-3:55 было сказано довольно невнятно, что тема - это Array или Arrays (что есть вещи разные). Учебная цель занятия так и не была объявлена. Why bother? That is the question! Но нет ответа...
2. Я не нашёл заключительных замечаний преподавателя в конце занятия, где он, как положено, должен в сжатой форме напомнить студентам основные положения учебного материала, изученного на данном уроке.
3. Занятие закончилось в 1:34; предположительно на 6 минут раньше положенного времени.

(Позже я понял, что на правой стороне экрана должно было отображаться то, что лектор показывал на большом экране, но техника подвела. И даже при наличии этого изображения, я считаю, что студент мало чему мог бы научиться на такой лекции. Если изменить последние цифры в адресе по ссылке вверху, то вы увидите другие видеоуроки, где правая часть экрана работает нормально. И попробуйте оценить, много ли студент поймёт, глядя на код, но не трогая его руками.)


В 2006 году я преподавал примерно в такой же форме (исключая что с 1,2,3 у меня было ОК). Тогда был вынужден делать это перед видеокамерой и, кроме моих местных студентов, сидевших передо мной, мою лекцию говорящую голову слушали студенты на двух удалённых кампусах (время от времени я переключал камеру на вид компьютерного экрана с кодом или на белую классную доску, на которой кое-что иногда рисовал цветными маркерами). Я мог наблюдать скучающих студентов на удалённых кампусах - они часто зевали; некоторые даже дремали. Местные студенты тоже не были особенно счастливы видеть преподавателя, который не может сделать больше чем полшага влево или вправо - иначе говорящая голова оказывалась бы вне кадра. Так можно преподавать, скажем, историю, но не программирование.

Это был не мой выбор, а выполнение указания президента университета, который всем кафедрам велел использовать видеотрансляцию. Мне стоило много усилий убедить руководство прекратить эту порочную практику. Её прекратили, но не по моим требованиям, а немедленно после ухода президента университета на пенсию. В общем, трусливые бюрократы мои начальники. Гнилой народец. Не то что были настоящие коммунисты. Коммунист мог бы на партсобрании объяснить декану, в чём последний неправ. И дело можно было поправить оперативно. Но то было в тогдашнем СССР, а не в сегодняшней Америке.

Сейчас свои занятия по курсу программирования я обычно провожу следующим образом.

Описанное далее в равной мере касается традиционного преподавания в режиме face-to-face и в онлайне. То есть такие вещи, как ведение онлайновых дискуссий или взаимное рецензирование домашних работ, я задаю своим студентам в обоих режимах одинаково. В традиционных курсах во время учебных занятий в классе студенты имеют доступ ко всем материалам онлайновой версии моего курса. Для этого они с приносят с собой лэптопы или пользуются компьютерами, установленными в классе. Студенты просматривают материалы синхронно с тем, что на большом экране демонстрирует преподаватель. При этом студенты могут независимо от преподавателя пролистывать материалы взад и вперёд, если это им необходимо для лучшего понимания. (На данном снимке мои студенты сдают экзамен по курсу матстатистики, который я тоже иногда преподаю по аналогичной методике.)


getImage


В неделе по курсу программирования у меня три 50-минутных урока. На первом уроке объясняю новый материал примерно 30 минут. Затем студенты делают упражнение с кодом своими руками. На двух оставшихся уроках на объяснение уходит по 15-20 минут и остальное время - на упражнение.

Основной визуальный материал - слайды PPT с немногими анимациями. На некоторых слайдах имеются примеры кода и quick start code для упражнений. Всё, что я демонстрирую на большом экране, студенты могут наблюдать на своих компах - в начале занятия каждый студент загружает на свой комп РРТ файл с курсового веб-сайта. Также, как правило, он может загрузить код с решением задачи, заданной в качестве упражнения.

Тратить время на набор кода на компьютере во время учебного занятия - расточительство. Поэтому мой Quick start code часто содержит почти полное решение задачи, но в него я преднамеренно вношу небольшие ошибки (см. скриншот). Поэтому студенты, делая упражнение, вынуждены внимательно этот код изучать и заодно они осваивают очередной приём программирования, например, Arrays.

Loops

А я тем временем хожу по классу и заглядываю через плечи студентов и делаю им подсказки по мере необходимости. Начиная с середины семестра подсказывать не приходится совсем, потому что студенты уже научились учиться по моей методике. Тем не менее во время упражнения, чтобы помочь тем, кто запутался, я на большом экране с некоторым отставанием демонстрирую, как надо правильно делать или показываю окончательное решение задачи и его объясняю. Если какой-то студент запутался, то имея доступ к решению задачи, он всегда может подсмотреть, что сделал не так. На дом я задаю два упражнения, похожих на то, что были сделаны в классе, и третье упражнение посложнее, за которое студент может заработать дополнительные баллы сверх 100%.

Ну, и каждый раз я повторяю как мантру, что обучение программированию подобно обучению плаванию. Ты, студент, сам должен войти в воду и плыть!

К этой методике преподавания я шёл несколько лет. Мой курс имеет онлайновый вариант. В нём нет никаких видеолекций - лишь ссылки на разделы книги и на онлайновые ресурсы с объяснением, как надо работать с учебными материалами. Эти материалы включают PPT файлы, quick start code и решения упражнений. То есть всё, что студенты получают и в обычном face-to-face классе. Онлайновый студент лишь должен учиться плавать сам, а не ждать, когда преподаватель начнёт его пинками загонять в воду. Это нормально работает со студентами, которым уже за 30. Традиционныех студентов в возрасте до 22-24 лет лучше обучать в классе.

При выполнении домашнего задания студенты должны сделать три вещи:

1) написать рецензию на домашнюю работу двух студентов, заданную на предыдущей неделе (заполнить нечто вроде анкеты с критериями оценивания и сделать вывод о качестве работы),
2) в онлайновой дискуссии обсудить ключевые теоретические вопросы; и
3) выполнить домашнее задание по программированию; в том числе студент может, используя результаты рецензирования, заново переделать предыдущее домашнее задание, чтобы получить более высокую (до 80%) оценку.

По моему опыту, рецензирование оказалось ключевым моментом, потому что раньше, оценивая домашнюю работу, я оказывался перед трудным выбором Pass or Fail, так как программа либо может быть правильной, либо неправильной. А серой области посередине почти нет. И преподавателю надо сильно напрягаться и в своём отзыве подробно объяснять студенту, в чём он ошибся.

При наличии у студента второй попытки, я спокойно использую Pass or Fail подход, а дальше студент учится на своих ошибках сам. А я расслабляюсь, сидя перед компом, пью пиво и пишу свой блог.


Описанное выше касается первого курса программирования; аналогично я преподаю и второй курс. В принципе материал первого курса можно перевести в формат видео, дополненного файлами с кодом для упражнений и решениями задач. На рынке уже полно учебников с такими видеолекциями. Однако сделать второй курс программирования намного труднее. Я не встречал ни одной видеолекции с таким материалом. Слишком дорого их разрабатывать.
Tags: вуз, преподаватель, программирование, профессор, университет
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.
  • 0 comments