Обучение программированию

Это пока перечень мыслей вокруг одной темы. Как мне справится с преподаванием начального курса программирования студентам. Я много раз вёл разные курсы по программированию и коммерческие, и университетские, и  начальные, и продвинутые. Только вчера закончилась летняя вычислительная практика  где я за 10 дней попытался показать основы программирования на Java. Но каждый раз возникает момент выбора,  связанный со специфическим форматом, требованиями и новыми возможностями. Вот и возникает вопрос как лучше (технически, а не содержательно!) в современных условиях организовать базовый начальный курс программирования на базе С/С++ в классическом университете для большого потока студентов. Так чтобы была польза студентам, чтобы изменить их способ мышления на деятельностный алгоритмический, чтобы сделать для них эту деятельность естественной функцией организма… И чтобы самому при этом не сдохнуть.

Начнем с проблем:

  1. Студенты в массе своей не умеют делать то, чему их учат. В том числе и программировать. Побороть это можно только большим количеством (больше десяти за семестр) индивидуальных задач-программ, которые необходимо написать. Они могут быть крохотными, но должны быть самостоятельно изготовлены.
  2. Студенты в массе своей не читают то, что им предлагается прочесть. В том числе и специально подготовленные фрагменты кода или готовые программы. Побороть это можно сериями мелких тестов (quize), которые необходимо пройти после ознакомления с небольшой порцией информации. Желательно, чтобы тесты были разнообразны и требовали написания фрагментов кода
  3.  Студенту приходится тратить много времени на ожидание «внимания» со стороны преподавателя. «Внимание» это в начальный момент в основном состоит в том, что преподаватель расставляет студенту в коде правильную лесенку (indent) и исправляет ошибки. Студент при этом, как правило, думает о чём-то своём. Сократить время ожидания и привлечь студента к написанию его собственной программы можно автоматическим тестированием. Т.е. TDD или любые техники юнит тестов тут вполне вполне уместны. Что-то аналогичное и с бьютефулайзингом кода.
  4. Преподаватель не может качественно проверить по 5-10 раз за пару программы у 10-12 студентов. Не может, но регулярно это делает. В результате он начинает работать в режиме пастушьей собаки — уделять внимание отставшим овцам (т.е. студентам). Их работы и проверять легче. Успевающие студенты предоставлены в большую часть времени сами себе. Они либо перестают работать, либо в них развивается неадекватно высокая оценка своих возможностей. Обычно такие «успевающие» студенты пишут грязный, кривой, безграмотный, но как-то работающий код. А преподаватель тратит своё время на подтягивания отстающих до этого уровня. Результат — хороший стиль появляется без участия преподавателя или не появляется вообще. Другой вариант — забыть об отстающих и работать с успевающими, тоже не работает нормально. У успевающего студента кода куда больше, проблемы глубже, времени на него нужно масса. А время ресурс невосполнимый.

Подхода, наверняка решающего все проблемы наилучшим образом, ни у кого нет. Посмотрим по крайней мере на инструменты из которых можно сложить решение. Для каждого инструмента напишу отдельный текст, а ссылки сложу сюда:

  1. Онлайн IDE
  2. Тестирование программ
  3. Системы для тестирования знаний
  4. Хранение кодов с контролем версий
  5. Предоставление материалов студенту и общение
  6. Накопление результатов и формирование отчетов
Share
Вы можете оставить комментарий, или ссылку на Ваш сайт.