НЕКОТОРЫЕ ОСОБЕННОСТИ МЕТОДИКИ ПРЕПОДАВАНИЯ ПРОГРАММИРОВАНИЯ ЗА РУБЕЖОМ

Раздел: ИТ в образовании

Журнал: Информационные технологии в образовании и научная работа студентов

11 июня 2015 г.

Авторы: Можаров Максим Сергеевич , Журавлев Сергей Владимирович

М. С. Можаров, С. В. Журавлев

НЕКОТОРЫЕ ОСОБЕННОСТИ МЕТОДИКИ ПРЕПОДАВАНИЯ ПРОГРАММИРОВАНИЯ ЗА РУБЕЖОМ

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

Keywords: methods of learning programming, cognitive theory load, visual program simulation, web-based environment, pair-programming.

 

Настоящая статья – попытка обобщить современные западные подходы к проблеме преподавания программирования. Нами были проанализированы диссертационные исследования, проведённые в ведущих университетах и отобраны результаты, разделяемые различными учёными.

В мире существует множество подходов к обучению студентов  программированию.  Мы  проанализировали  работы Г.   Л.   Уайта   и   М.   П.   Сивитанидеса;   К.   М.   Хэнкока;  М.  Е.  Касперсена;  П.  Д.  ДеПаскуале  III; Д. Тиг; А. Эккердал; Ю. Сорвы; Х. Лоде, Д. Е. Франчи и Н. Г. Фредериксена; Л. Ма; Д. А. Миллера; Н. Труонг; Т. Дженкинса. Рассмотрим некоторые вопросы методик преподавания программирования.

Одна из методик, описываемая в работе М. Касперсена (Университет г. Аргус в Дании), основана на теории когнитивной нагрузки.

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

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

Когнитивная нагрузка (L) в настоящее время делится на три непересекающиеся категории:

1) посторонняя когнитивная нагрузка (E) – нагрузка, которая мешает обучению, так как часто превышает пределы рабочей памяти;

2) уместная когнитивная нагрузка (G) – нагрузка, которая скорее способствует обучению, чем мешает, помогая приобретать знания. Она образуется путём повышения уровня когнитивных процессов, способствующих эффективному усвоению знаний;

3) внутренняя когнитивная нагрузка (I) – нагрузка, уменьшение которой приводит к снижению понимания. Она зависит от относительной сложности изучаемого материала и степени усвоения студентом предшествующего материала.

Отношения между L, E, G и I можно представить следующим образом:

L=E+G+I.

В этих условиях задача балансировки когнитивной нагрузки для оптимального обучения сводится к попыткам минимизации E и максимизации G.

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

Обучение на основе данного метода проводилось с использованием комплекса учебных средств (учебника, упражнений и заданий и видеоматериалов).

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

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

Ещё одной особенностью метода скаффолдинга является использование видеоматериалов (видеозахват экрана), которые показывают процесс разработки программы. На видео специалист демонстрирует применение методов, принципов и приёмов программирования, изучаемых в данном курсе. Также видеоматериал может показывать мелкие детали, которые настолько просты, что о них обычно мало рассказывают студентам. Такой подход очень удобен, так как сильные студенты могут пропускать то, что им понятно, а слабоуспевающие могут останавливать и пересматривать видео несколько раз. [1]

Следующая методика, которую мы рассмотрим, была описана в работе Ю. Сорвы из Научной школы Университета Аалто (Финляндия). Эта методика – визуальная имитация выполнения программы (ВИВП) – основана на том, что студент берёт на себя роль исполнителя программы: читает код, выполняет команды в соответствующем порядке, отслеживает поток управления. Такая деятельность помогает ему понять принцип работы программы.

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

Обучать начинающих программистов выполнению визуальной имитации удобно с помощью систем визуализации программ – специальных программ, которые отображают ход выполнения программы в текстовом или графическом режиме.

Согласно проблемно-ориентированной классификации Малетика и др., системы визуализации программ, прежде всего, категорируются по следующим параметрам:

1) задачи – для чего необходима визуализация (например, обратная разработка, поиск места ошибки);

2) аудитория – кому необходима визуализация (например, опытный разработчик, руководитель группы);

3) цель – что визуализирует система (например, исходный код, результаты выполнения программы);

4) форма представления – как представлена визуализация (например, двумерная графика, трёхмерные объекты);

5) способ представления – каким образом представляется визуализация (например, отображение на экране, виртуальная реальность).

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

1) задача – помощь в изучении вводного курса программирования;

2) аудитория – начинающие программисты и преподаватели вводного курса программирования;

3) цель – визуализация пошагового выполнения программ;

4) форма представления значения не имеет;

5) способ представления – визуализацию должно быть видно на экране.

В настоящее время системы визуализации программ существуют для различных языков программирования. Так, например, для изучения Pascal предназначены программы Amethyst, EROSI, PlanAni, для изучения Basic – Basic Programming, для изучения C – Bradman, CMeRun, VINCE, OGRE, PlanAni, VIP, ViLLE и др., для изучения Java – JAVAVIS, OOP-Anim, JavaMod, JIVE, Memview, JavaTool, PlanAni и др., для изучения Python – PlanAni, ViLLE, Jype, Online Python Tutor, UUhistle.

В конечном счёте, хотя и косвенно, визуальная имитация выполнения программы способствует совершенствованию навыков написания программ. [4]

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

В ходе работы в стандартных средах программирования начинающие студенты сталкиваются с определёнными трудностями:

1) установка и настройка среды программирования;

2) использование редактора среды программирования;

3) понимание вопросов, связанных с программированием и применение знания синтаксиса языка программирования к написанию программного кода;

4) понимание ошибок компиляции;

5) отладка.

Эти трудности значительно возрастают, когда студенты изучают такие языки программирования, как С++, Java или С#, поскольку эти языки содержат абстракцию высокого уровня и разработаны в основном для опытных программистов.

С целью чтобы избавить студентов от необходимости установки среды программирования и обучения использованию её редактора, разработаны веб-ориентированные среды программирования.

В настоящее время существует много веб-ориентированных сред программирования, наиболее известными из которых являются:

1) CodeSaw – поддерживает языки C, C++, Java, Perl, Python, Ruby, XML, HTML, PHP, SQL, PL/SQL, Java-Script;

2) CourseMaster – поддерживает языки C++, Java;

3) WebToTeach – поддерживает языки Java, C, C++, FORTRAN, Ada, Pascal;

4) CodeLab – поддерживает языки Java, C, C++ и др.;

5) InSTEP – поддерживает языки Java, C, C++;

6) WWW for Learning C++;

7) W4AP – поддерживает языки Java, C и др.;

8) JERPA – поддерживает язык Java;

9) VECR – поддерживает языки Java, C;

10) Ludwig – поддерживает язык C++;

11) ALECS – поддерживает язык C++;

12) ELP – поддерживает языки Java, C, C#.

Анализ перечисленных веб-ориентированных сред показал, что наиболее эффективной является система ELP.

ELP является клиент-серверной средой. Клиент работает через веб-браузер, для его запуска необходим пакет Java Runtime Environment. В ELP предусмотрены режимы «Студент» и «Преподаватель».

В варианте для студентов представлена система упражнений типа «заполнить пропуски», которые хранятся в базе данных на сервере. Каждое упражнение представляет собой программу с недостающими строками кода, которые обучающиеся должны дописать. При этом остальная часть кода недоступна для редактирования. Таким образом, студентам не нужно тратить время на обучение использованию редактора среды программирования, и они могут непосредственно сосредоточиться на изучении программирования.

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

Для студентов предусмотрена возможность работать в трёх режимах: hint (совет), solution (решение) и My Program. Основной режим, в котором они выполняют упражнение, My Program. Перейдя в режим hint, они получат советы по заполнению пропусков, а в режиме solution отображается правильный ответ.

Заполнив недостающие строки кода, обучающиеся должны сохранить программу, прежде чем компилировать её. Упражнение отправляется на сервер для компиляции, и результаты отображаются на консольной панели под текстом программы. Если в программе нет ошибок, студенты могут загрузить и запустить её на своих компьютерах в режиме «offline». В противном случае компилятор выдаёт сообщения об ошибках, которые дополнены дружественными сообщениями и ссылками, позволяющими обучающимся легко находить строки кода, содержащие ошибки, а также комментарии к качеству и правильности программы, сформированные на основе комбинации статического и динамического анализа.

Таким образом, среда ELP предоставляет студентам мгновенную обратную связь, на основании которой они получают подробную информацию об ошибках в программе и могут их исправить.

В режиме «Преподаватель» помимо режимов hint, solution и My Program существует также режим template (шаблон), в котором преподаватели могут создавать и удалять пропуски в упражнении. Также они могут изменять советы в режиме hint, вносить изменения в текст программы в режиме My Program. Кроме того, преподаватели имеют возможность получать подробную информацию о выполнении студентами упражнений: количество доработок программы, интервал времени между попытками компиляции, успешность каждой попытки. Проанализировав эту информацию, они могут сделать вывод об умении студентов программировать и определить, кому необходимо предоставить дополнительную помощь. [6]

В завершение рассмотрим метод обучения программированию, который был описан в работе Д. Тиг (Квинслендский технологический университет, Австралия). Это метод парного программирования.

Парное программирование является одной из практик экстремального программирования, заключающейся в том, что два программиста работают бок о бок за одним компьютером. Один из них берёт на себя роль «ведущего», т. е. печатает код и решает проблемы с тактической точки зрения, другой становится «штурманом» – он мыслит стратегически, задаёт вопросы и отслеживает ошибки в коде. Они часто меняются местами.

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

1) меньшее количество ошибок;

2) лучшее понимание кода;

3) более качественный код;

4) возможность учиться у партнёра;

5) улучшение дизайна;

6) постоянный просмотр кода;

7) креативность и мозговой штурм;

8) улучшение качества тестирования и отладки;

9) быстрое решение возникающих проблем.

При обучении студентов на основе метода парного программирования возникают некоторые проблемы, связанные со следующими факторами:

1) различия в способностях между студентами в паре;

2) понимание студентами правил парного программирования и готовность соблюдать их;

3) посещаемость студентов;

4) контроль со стороны преподавателей за соблюдением студентами правил парного программирования.

Для того чтобы обучение было эффективным, необходимо руководствоваться следующими принципами:

1) желательно, чтобы в пару входили студенты, обладающие схожими способностями;

2) проводить лабораторные занятия, на которых студенты работают в парах;

3) студентам, образующим пару, должно быть удобно сидеть рядом друг с другом, они оба должны иметь лёгкий доступ к монитору, мыши и клавиатуре;

4) состав пар должен меняться в течение семестра;

5) обучающиеся должны понимать, что о проблемах с партнёром нужно немедленно сообщить преподавателю, чтобы дать ему шанс исправить ситуацию;

6) программисты в паре должны работать для достижения общей цели;

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

8) установить стандарт кодирования, которого должен придерживаться каждый студент;

9) придерживаться принципа сотрудничества, взаимного уважения и общей ответственности в отношениях между обоими студентами в паре и преподавателями;

10) контролировать посещаемость и опоздания, чтобы обучающиеся не оставались без партнёра;

11) осуществлять контроль над балансом между индивидуальной и совместной работой студентов;

12) преподаватели должны побуждать пары самостоятельно искать ответы на возникающие вопросы, а не предоставлять им их.

Проведённые исследования подтвердили эффективность использования метода парного программирования в обучении студентов. [5]

Таким образом, в качестве основных методических подходов к преподаванию программирования можно выделить:

1) подход, основанный на теории когнитивной нагрузки;

2) подход, основанный на визуальной имитации выполнения программы;

3) обучение с использованием веб-ориентированной среды программирования;

4) обучение с использованием метода парного программирования.

Эффективность описанных подходов была доказана экспериментальным путём. Преподавателям российских ВУЗов будет полезно подробнее ознакомиться с этими и другими подходами и научиться использовать их при обучении студентов.

Литература

1. Можаров М. С. О развитии содержательной линии «Моделирование и формализация» в школьном курсе «Информатика и ИКТ» / М. С. Можаров, С. Д. Коткин // Информатика и образование. – 2010. – №4. – С. 95-99.

2. Можаров М. С. Практикум по решению задач в среде Lazarus с использованием модульно-рейтинговой системы оценивания:   учебно-методическое   пособие   для   студентов   / М. С. Можаров, Ю. И. Валеева, Л. В. Попова. – Новокузнецк: изд-во КузГПА, 2013. – 150 с.

3. Можаров М. С. Формирование нового содержания образования как важнейшая составляющая профессиональной деятельности учителя информатики / М. С. Можаров // Педагогическое образование и наука. – 2009. – №9. – С. 84-87.

4. Caspersen M. E. Educating novices in the skills of programming: dissertation for the PhD degree / M. E. Caspersen. – Aarhus, 2007. – 311 p.

5. DePasquale III P. J. Implications on the learning of programming through the implementation of subsets in program development environments: dissertation for the degree of doctor of philosophy in computer science and applications / P. J. DePasquale III. – Blacksburg, 2003. – 575 p.

6. Eckerdal A. Novice programming students’ learning of concepts and practice: digital comprehensive summaries of Uppsala dissertations   from   the   faculty   of   science   and   technology   / A. Eckerdal. – Uppsala, 2009. – 76 p.

7. Eckerdal A. Novice students’ learning of object-oriented programming: dissertation for the degree of licentiate of phylosophy in computer science / A. Eckerdal. – Uppsala, 2006. – 114 p.

8. Hancock C. M. Real-time programming and the big ideas of compulational literacy: dissertation for the degree of doctor of philosophy in media arts and sciences / C. M. Hancock. – Cambridge, 2003. – 121 p.

9. Jenkins T. The motivation of students of programming: thesis for the degree of master of science / T. Jenkins. – Canterbury, 2001. – 211 p.

10. Lode H. Learning games for programming: thesis for the degree  of  master  of  science  of  media  technology  and  games  / H. Lode, G. E. Franchi, N. G. Frederiksen. – Copenhagen, 2012. – 111 p.

11. Ma L. Investigating and improving novice programmers’ mental models of programming concepts: thesis for the degree of doctor of philosophy / L. Ma. – Glasgow, 2007. – 208 p.

12. Miller J. A. Promoting computer literacy through programming python: dissertation for the degree of doctor of philosophy (Education) / J. A. Miller. – Ann Arbor, 2004. – 288 p.

13. Sorva J. Visual program simulation in introductory programming education: doctoral dissertation for the degree of doctor of science in technology / J. Sorva. – Aalto, 2012. – 422 p.

14. Teague D. Pedagogy of introductory computer programming: a people-first approach: thesis for the degree of master of information technology (research) / D. Teague. – Queensland, 2011. – 129 p.

15. Truong N. A web-based programming environment for novice programmers: dissertation for the degree of doctor of philosophy / N. Truong. – Queensland, 2007. – 286 p.

16. White G. L. A theory of the relationships between cognitive requirements of computer programming languages and programmers’    cognitive    characteristics    /    G.    L.    White, M. P. Sivitanides // Journal of information systems education. – 2002. – Vol. 13, №1. – P. 59-66.

PDF