Замечательная статься про обучению программированию
(ссылка)
Выдержки
- «Учить только хорошему». Дети должны сразу, с первого занятия видеть перед собой правильные, хорошие цели и правильные, хорошие примеры. Если не обратить внимания на какие-то вещи (например, форматирование кода), пустить их на самотек, дети сделают это так, как «поймут» сами. Впоследствии их придется переучивать, а это всегда намного менее продуктивно, чем учить правильно с самого начала. Поэтому на первом же занятии дети узнают, как правильно пользоваться пробелами и отступами, и почему важны пустые строки, разбивающие программу на логические фрагменты. С первых же занятий вводится понятие качества имен, и от детей требуется использовать понятные имена для переменных и функций.
- «Учить программированию, а не языку». Все понятия, даваемые детям, выводятся как инструмент решения проблемы. Даже не совсем так: сначала формулируется проблема, дается возможность её «пощупать», попробовать решить имеющимися средствами (в качестве домашнего задания или вместе с преподавателем в классе). Например, мы умеем рисовать на экране домик (у нас уже есть такая функция). Давайте нарисуем на экране 5 домиков друг за другом. Задачу, безусловно, можно решить, вызвав функцию 5 раз. Но, проверяя технологию, мы задаем вопросы: а если надо будет 10 домиков? 50? 100? А если 4? А если столько, сколько поместится на экране? Или столько, сколько введет пользователь программы? Затем детям предлагается обсудить, как можно было бы решить эту проблему, и обычно они сами, с некоторой помощью преподавателя, формулируют с той или иной степенью приближения идею цикла. Лишь только затем рассказывается синтаксис оператора цикла в выбранном для обучения языке программирования.
Последовательность задач
Последовательность знаний и умений, получаемых детьми, ориентирована на их практическое использование. Как я уже писал выше, конструкции даются как результат возникающих у детей в процессе обучения проблем. Разумеется, задания подбираются именно так, чтобы проблемы эти возникали в определенном порядке — в этом состоит одна из задач преподавателя. Задачи подбираются по принципу: чем важнее навык, тем раньше он изучается. Важность понимается как частота употребления конструкции в промышленном коде. Именно поэтому функции, важнейший элемент программирования, изучаются как можно раньше.
Одна из проблем современного школьника, даже математически образованного, иллюзия компетентности в работе с компьютером (все знают, как скачать музыку или установить Skype) и одновременно страх и неуверенность перед программированием («это сложно, мне никогда не понять»). Поэтому для снятия этого страха на первом же занятии детям предлагается поиграть в деловую игру, которая на первый взгляд не имеет отношения ни к компьютерам, ни к программированию1. В ходе игры участники воображают себя владельцами рекламного агентства, в которое приходит некий заказчик (преподаватель) и хочет заказать рекламный баннер. Но какой именно, не объясняет, ссылаясь на усталость, и предлагает задавать ему вопросы, из ответов на которые и будет составлен контракт. Такое вот завуалированное обсуждение ТЗ. На все вопросы о деньгах, установке баннера, разрешениях на установку и прочем успокаивает: «Это не проблема. Деньги есть, разрешения есть, не первый раз такую рекламу вешаем, рабочие уже вызваны». Подвох в том, что баннер нужен завтра, а его размер — 100 на 400 метров. Что же он с ним таким огромным будет делать?