Доклад на тему: «Проблема изучения программирования в школьном курсе информатики»

advertisement
Муниципальное бюджетное общеобразовательное учреждение
Средняя общеобразовательная школа с. Красное
Доклад на тему:
«Проблема изучения программирования в школьном курсе
информатики»
Подготовил: учитель
информатики
Щедрин А. Г.
с. Красное - 2012
Нынешнее положение курса алгоритмики и программирования в школе можно
назвать незавидным. Тенденция к его сокращению вплоть до полного вытеснения явно
прослеживается не только в периодически публикуемых программах различных авторов,
но и в отдельных инструктивно-методических документах. Немногие сторонники
программирования зачастую усугубляют ситуацию, поддерживая морально устаревшее
содержание курса. Учителям же приходится мириться с необходимостью изучения его,
оправдывая себя доводами, похожими на заклинания — "это пригодится в ВУЗе" или "а
как же быть с олимпиадами?"
Прежде всего, рассмотрим объективные условия преподавания информатики в
массовой школе, цели и задачи преподавания, доступные средства и другие вопросы. Без
этого нельзя сформировать целостный и систематический курс программирования,
являющийся неотъемлемым компонентом школьной информатики и отвечающий
потребностям среднего образования и общества в целом, а не корпоративным интересам
узких профессиональных групп.
Официальная точка зрения такова: информатика должна преподаваться по одному
часу в неделю в старших классах. Большинство руководителей от образования не вникают
в последующие фразы инструктивно-методического письма, о том, что: "при наличии
условий объём учебной нагрузки может быть увеличен". Это положение существенно
ограничивает возможности школьных преподавателей. По часу в неделю обычно
преподаются дисциплины необязательные, второстепенные, служащие для "отдыха"
школьников от "тяжёлых" предметов и для разбавления аттестата хорошими отметками.
Положение не спасает и удвоение учебной нагрузки — её всё равно не будет
хватать, уж слишком сложен и объёмен учебный материал даже при изучении одного
языка программирования. А ведь, в традиционных курсах, нужно не только выучить
синтаксис и семантику, но и научиться решать задачи!
Изучение информатики на протяжении пяти лет (три года базовый курс и два года
— профильный) делает возможным учёт возрастных особенностей школьников и
позволит оптимизировать учебный материал. Но главное — подходящий возраст позволит
активно использовать игровые формы обучения и специализированные учебные среды,
которые в старших классах не используются из-за их "бесполезности" в практическом
плане.
Цели и задачи курса программирования
Многие проблемы в преподавании информатики связаны с нечётким
целеполаганием. К сожалению, СТАНДАРТ по информатике не был своевременно
принят. Возможно поэтому основной целью изучения образовательной области
"Информатика" считается подготовка школьников к практической деятельности, а
развитие мышления и формирование основ научного мировоззрения как бы отступают на
второй план.
Изучение программирования позволяет внести свой вклад в достижение этих
целей. В первую очередь следует рассматривать программирование как средство развития
мышления школьника. Профессиональной подготовкой занимаются специализированные
учреждения. Поэтому лучше сразу отказаться от невыполнимой задачи: изучить язык
программирования, каким бы простым он не был. Знание языка как и владение любым
другим инструментом само по себе ничего не даёт, куда важнее умение им пользоваться, а
на это, как правило, времени и не остаётся (причём, это общая проблема школьного
образования). Только при самостоятельном решении задач можно говорить о развитии у
школьников способности принятия решения и ответственности за его последствия.
Другой важной целью является "понимание единства информационных принципов
строения и функционирования самоуправляемых систем различной природы", процессов
управления в природе, технике, социуме. При правильном подборе учебных задач эта цель
не кажется надуманно-недостижимой.
Но "правильный подбор" ещё не гарантирует достижения результата. Важна и
форма организации учебной деятельности, и методика преподавания. Вот здесь и
открываются широкие возможности реализации стратегической линии образования на
развитие личности, внедрения эвристических методов в образовательный процесс.
Другими словами, можно отказаться от традиционного построения курса, когда учащимся
сообщается большое количество готовых знаний, в надежде, что немногим "сильным"
ученикам удастся самостоятельно выстроить закономерности и постигнуть общие
принципы изучаемой дисциплины. Это по силам будет немногим. Гораздо труднее для
учителя инициировать на занятиях самостоятельную познавательную деятельность
учащихся, заставлять их постоянно задумываться "над природой вещей", сообщив лишь
небольшое количество исходной информации. Именно эта задача гораздо важнее
"зубрёжки" и имеет положительный результат в долгосрочной перспективе.
Систематическое построение курса
Машинный курс информатики появился в школе вместе с 8-разрядными бытовыми
ПК и Бейсиком в ПЗУ. Это в сознании многих намертво связало понятие
программирования с программами на Бейсике. Позже, когда появились другие
возможности, от "первой любви" не смогли отказаться ни авторы учебников, ни
преподаватели.
Несмотря на активную критику и формальное неприятие Бейсика, большинство
задач по программированию одинаково решаются — строка в строку — на трёх
"официальных" языках: Бейсике, Паскале, школьном алгоритмическом языке. А это
свидетельствует о механическом переносе задач, придуманных под Бейсик, в более
поздние разработки. Даже в новом обязательном минимуме наряду с упоминанием об
объектном программировании присутствует фраза: "Знакомство с одним из языков
программирования. Переменные величины: тип, имя, значение. Массивы (таблицы) как
способ представления информации". Не строки, списки, стеки, очереди, а именно
массивы, так как в старом Бейсике это первый пример сложного (структурного) типа
данных. Тем самым подразумевается, что программирование в школе должно изучаться
по проторенному пути, повторяя ошибки десятилетней давности.
Особую роль в программировании играют учебные курсы, основанные на языке
Лого. Несмотря на мировое признание Лого-технологий, у нас в стране этот язык на
официальном уровне не принят. Хотя под давлением "прогрессивного человечества"
некоторые уступки всё же есть. Касаются они, в основном, внешней стороны дела —
черепашьей графики. Возможно, в этом причина пренебрежительного отношения к Логосредам ортодоксальных программистов. К тому же, авторы Лого-курсов не учитывают
некоторых особенностей массовой школы, например, трудности использования
англоязычных версий программ, а содержательная сторона обучения практически не
изменилась с 1968 года, хотя сейчас возможности программ существенно больше.
Только при работе в Лого-среде возможна организация самостоятельной
творческой деятельности учащихся среднего звена в массовом порядке. Все остальные
программные продукты отстают по крайне мере на порядок. Даже попытки использования
так называемых исполнителей не могут сравниться с настоящей Черепашкой из-за
ограниченности набора задач. Однако без помощи государства Лого-продукты ещё долго
будут недоступны в массовой школе, а не знакомые с ними учителя так и не будут
проявлять к ним интереса.
Объектно-ориентированное программирование вообще появилось совсем недавно.
У большинства учителей, с одной стороны, не было возможности познакомиться с ним, с
другой же стороны, ООП предназначено для решения задач, малопригодных в школьном
обучении: слишком уж они объёмны и сложны. Вот и появляются многостраничные
статьи о том, как сделать тест в Delphi, а ведь такого рода программки мы успешно делали
в старом Бейсике!
Памятуя о единстве информационных процессов в системах различной природы,
можно утверждать, что объектный подход чрезвычайно важен для воспитания
полноценного гражданина, поскольку он направлен на конечный результат. Он тренирует
аналитико-синтетические умения, способность принятия решения, не говоря уже о том,
что в реальной жизни мы имеем дело не с алгоритмами и процедурами, а с объектами, их
свойствами и вариативными связями между ними. Между прочим, традиционный планконспект урока является линейным алгоритмом и поэтому не позволяет описать ситуацию
творчества на уроке, слишком уж много может возникнуть проблемных ситуаций и
предусмотреть реакцию на каждую из них практически невозможно. Возможно, в этом
причина отказа многих прогрессивных учителей от оформления плана-конспекта к
каждому уроку, да и описание опыта в этом стиле выглядит бледно и не передаёт сути,
хотя все внешние стороны описаны с достаточной подробностью.
Вывод напрашивается сам собой: раз мы изучаем в школе не конкретные
программные системы, а общие приёмы и методы познавательной деятельности, то из
всего многообразия имеющихся разработок следует выбрать только те, что соответствуют
высказанным выше идеям. Они отличаются от большинства похожих курсов по ряду
критериев:
 ориентация курса на решение задач, а не на изучение
конструкций языка (задачно-ориентированный курс), приоритет
самостоятельной продуктивной деятельности учащихся, широкое
применение проблемного подхода;
 минимизация изучаемых понятий и дозированное их введение;
 контроль понимания учащимися изученного материала, а не
запоминания фактов и определений;
 взаимосвязь учебных задач как внутри одного раздела, так и
между отдельными разделами и компонентами курса;
 минимальное использование материалов других школьных
предметов, опора на прочные знания учащихся, их бытовой опыт
(недопустимо тратить драгоценное время урока информатики, например,
на объяснение понятия дискриминанта);
 использование задач, имеющих нетривиальное решение, — ни
каких "пролезет ли шкаф в окно, если у него такие размеры, а у окна —
такие-то", задача должна быть, на первый взгляд, трудной и, в идеале,
разрешимой лишь с помощью компьютера.
Интересно, что попытки реализовать курс программирования в однойединственной, пусть даже самой лучшей программной среде, приводят к значительным
методическим затруднениям. Изучение же нескольких учебных сред — роскошь, которую
могут позволить себе далеко не все преподаватели.
Одним из путей решения проблемы может стать структурно-модульное разделение
курса программирования на три уровня: пооперационный, процедурный, объектный.
Каждый уровень может быть представлен собственным программно-методическим
комплексом, изучение его может быть формально независимым от изучения других
модулей. В зависимости от направленности всего курса информатики (уровень А и
уровень Б в терминологии Министерства образования) отдельные модули могут быть
расширены или, напротив, вообще исключены из курса.
Содержание курса программирования
Разделение всего курса на уровни, с одной стороны, позволит использовать
наиболее удобные средства и приёмы для изучения понятий, характерных именно для
этого уровня, с другой же стороны, потребует дополнительных усилий для связывания в
единый комплекс отдельных модулей, реализующих каждый уровень.
Модульное построение позволит изучать программирование в любом порядке
следования модулей и даже отказаться от изучения одного или двух из них в зависимости
от конкретных условий преподавания. Построение школьного предмета не обязано
повторять исторический путь изучаемой дисциплины, поэтому объектный или
процедурный уровень может быть освоен раньше пооперационного. В любом случае,
систематизация курса необходима и предлагаемый вариант — лишь одна из возможностей
такой систематизации.
Пооперационный уровень
Исторически первый уровень. В основном, школьные курсы реализуют именно его.
Здесь от учащихся требуется запоминание элементарных команд, которые изменить
невозможно. Важнейшие понятия — линейное следование и операция присвоения. Здесь
же изучаются алгоритмические структуры, точнее, их внутреннее строение. При этом
выясняется, что все структуры можно свести к одной — условному переходу. На данном
уровне алгоритм может быть представлен в виде блок-схемы. Этот этап обязателен, а в
случае нехватки учебного времени, когда, например, информатика преподаётся в старших
классах по часу в неделю, именно им и следует ограничиться.
Основной способ проверки усвоения — трассировка алгоритмов. Во многих курсах
предлагается другой способ. Учащимся предлагается решить одну из типовых задач, то
есть воспроизвести по памяти текст программы. На первый взгляд, трассировка алгоритма
кажется слишком простой задачей, другое дело — составление программы. Но возможно
ли с уверенностью утверждать, что учащийся понимает смысл основных понятий и
поэтому составил верно исполняющуюся программу? Ведь он вполне мог заучить её
текст. При трассировке алгоритма ситуация совершенно другая. Задачи столь похожи друг
на друга, а ответ так сильно зависит от исходных данных и порядка операций, что проще
решить задачу, чем заучить правильный ответ. В любом случае, прямое измерение по
системе "зачёт-незачёт" предпочтительнее любых косвенных оценок.
С изучением пооперационного уровня программирования связана и ещё одна
застарелая проблема, а именно "наглядное" представление алгоритмов в виде блок-схем.
Несмотря на справедливую критику (см. например Симонович С. и др. "Практическая
информатика"), блок-схемы кочуют из одного обязательного минимума в другой и
активно используются в обучении программированию, хотя практические программисты
их давно не применяют. Похоже, что такой способ повышения наглядности применим
только к очень простым алгоритмам, реализуемым на пооперационном уровне. Главное,
что в блок-схемах цикл или ветвление представляются в виде отдельных команд, а не
единых, логически целостных блоков. Далеко не каждый преподаватель обводит на блоксхеме цикл или ветвление прямоугольной рамкой, подчёркивая такую целостность.
Поэтому лучшим выходом представляется выделение блок-схемам своего рода
"экологической ниши", они годятся для представления внутреннего устройства
стандартных алгоритмических конструкций, но для описания сколько-нибудь
завершённой задачи их применять не следует.
Выбор конкретной программной среды для изучения этого этапа — дело учителя,
однако количество терминов и понятий, которые следует выучить, прежде чем начать
собственно обучение, в среде QBASIC минимально. Конечно, TurboPascal — среда более
престижная, но на этом этапе каких-либо преимуществ не даёт. Поэтому, если не
предполагается использование этой среды для изучения следующего (процедурного) этапа
— лучше остановить выбор на более простом QBASIC.
Процедурный уровень
Процедурный уровень интересен тем, что направлен на получение конечного
результата, тогда как на пооперационном уровне, в основном, создаются фрагменты
программ. Именно с этого уровня начинается структурное программирование. Здесь попрежнему важно линейное следование, но отдельные команды практически равноправны,
а цикл или ветвление представляется как одна операция. Здесь изучается вложенность
процедур, в том числе самовложенность (рекурсия). Здесь же вводится понятие параметра
как переменной части процедуры, определяющей результат. Текст программы достаточно
нагляден даже без применения дополнительных средств.
Традиционно структурное программирование изучается в среде TurboPascal.
Использование этой среды приводит к объединению пооперационного и процедурного
уровня в одном курсе. При этом знакомство с процедурами происходит в середине
периода обучения. В качестве основы для программирования используются, по
преимуществу, математические задачи. Например, при изучении рекурсии любимой
задачей почти всех авторов, становится вычисление факториала числа. Обычно авторы
оправдывают использование не изучаемого в школьной математике понятия простотой
его определения. Есть и другие примеры включения в подобные курсы задач, которые
лучше иллюстрируют конструкции и возможности языка, а не способствуют лучшему
усвоению базовых понятий. Совершенно очевидно, что модуль, реализующий
процедурное программирование и рассчитанный на изучение в 7-8 классе, не может
опираться на математическое содержание, особенно когда предполагается
самостоятельная творческая деятельность учащихся.
Бесспорным лидером в этом модуле являются курсы, основанные на Логотехнологиях. Причём теперь они необязательно должны начинаться с черепашьей
графики. Мультимедийные возможности ЛогоМиров позволяют создавать проекты с
мультипликацией,
видеофрагментами
и
звуковым
сопровождением.
Метод
последовательной детализации алгоритма используется как рабочий инструмент, а не
только как объект изучения. К тому же изучать вложенность процедур можно практически
с самого начала курса, сразу сделав её основным приёмом работы, приобретая заодно
привычку структурировать решение любых задач.
Предпринимавшиеся в недавнем прошлом попытки подменить язык Лого разного
рода исполнителями нельзя признать вполне удавшимися. Хотя эти исполнители успешно
справлялись с задачей иллюстрации структурного программирования, их рабочая среда и
круг решаемых задач обычно сильно ограничены. Это снижает интерес к таким
исполнителям и ограничивает возможности творчества учащихся, например, делает
практически невозможной организацию проектной деятельности. Тем не менее,
исполнители могут применяться для изучения процедурного модуля, если курс
информатики не предполагает более глубокого знакомства со структурным
программированием.
В Федеральном перечне имеется только один учебник, посвящённый Логотехнологии, это "Практикум по программированию в среде Logo-Writer" А. Юдиной. Зато
исполнители представлены шире: набор исполнителей в "Алгоритмике" А. Звонкина,
кочующие из учебника в учебник Робот А. Кушниренко и Паркетчик А. Гейна.
Объектный уровень
Этот уровень самый молодой и наименее разработан. Объектный подход стал
широко применяться в программировании уже после того, как информатика стала
школьным предметом. Появляющиеся в периодической печати и всемирной сети
Интернет публикации посвящены, в основном, попыткам знакомства школьников с Delphi
или VisualBasic. До сих пор этот уровень воспринимается как экзотический и
необязательный для массовой школы. Однако только этот уровень направлен на создание
полноценных проектов. Именно его изучение позволит ликвидировать в сознании
школьника понятийную пропасть между программами, с которыми он постоянно имеет
дело и так называемыми программами, которые ему приходится писать на уроках
информатики. Если для учительства связь очевидна, то дети зачастую недоумевают: что
общего между яркой, динамичной, интерактивной игрушкой и чёрным экраном с белыми
цифрами?
Объектный подход интересен отсутствием явной линейной последовательности в
тексте программы, характерной для предыдущих уровней. В самом деле, если программа
составлена в категориях объектов, их свойств и событий, трудно говорить о каком-то
явном алгоритме, ведь неизвестно, какое событие может произойти в следующий момент.
Здесь имеется возможность обсудить понятия, которые не рассматривались на прежних
уровнях.
Школьное образование постоянно грешит упрощённым подходом, делающим
невозможным применение знаний в жизненной ситуации. Вся физика, например,
изучается лишь для материальных точек, движения без трения, процессов без потерь
тепла. Похожая ситуация наблюдается и в программировании. К примеру, в задаче
требуется сохранить результаты работы программы в файле. Типичная
последовательность, реализуемая в школьных программках — открываем файл,
записываем данные, закрываем фал. Но в реальной жизни следует сначала проверить,
может быть, уже существует файл с таким именем и спросить у пользователя: "Что
делать?" Далее, если пользователь разрешил сохранение, следует проверить достаточно ли
свободного места на диске и т.д. и т.п. Программа при этом должна общаться не только с
пользователем, но и с операционной системой. Реализовать это на пооперационном или
процедурном уровне без ошибок довольно сложно. Такие трудности в реальном
программировании на каждом шагу, а их учёт сильно отвлекает от основной задачи.
Курс программирования в школе без объектного модуля выглядит логически
незавершённым, но в настоящее время в нашей стране практически отсутствуют
разработки такого модуля для базового курса. Частично реализовать его позволяет среда
ЛогоМиры. Однако в ней легко отвлечься на пооперационный уровень. Визуальная среда
программирования ПервоЛого обходится без единой строчки кода в привычном
понимании, точнее, вместо текстовых команд в ней используются пиктограммы, но она
может реализовать лишь процедурный уровень.
Выводы
В заключение можно сказать, что преподавание программирования в курсе
информатики сталкивается с несколькими сложностями: недостаточный объем часов
преподавания информатики в старших классах, принципиальное отсутствие раздела
программирования в федеральном стандарте по информатике. Также отсутствует раздел
программирование и в учебниках, рекомендованных в федеральном перечне. В некоторых
из них лишь имеются раздел, посвященный алгоритмизации и, в лучшем случае, пример
одной простой программы. В то же самое время в ЕГЭ есть достаточно много вопросов, а
в особенности в части «С», на понимание и составление программ. Так же олимпиады по
информатике состоят из задач, направленных исключительно на прикладное
программирование. Отсюда и возник вопрос моего исследования: Как же можно
подготовить учеников к участию в олимпиадах и сдаче Единого Государственного
Экзамена. Вывод напрашивается только один – сокращать время на изучение прикладных
программ общего пользования и использовать это время на изучение программирования.
Также немаловажной проблемой является еще и не знание языков программирования
самими учителями и нежелание их переучиваться. Особенно это актуально для сельских
школ. В лучшем случае учителя информатики знают «Qbasic», а как было сказано выше –
начинать рекомендуется с языка Лого, а заканчивать объектно-ориентированным
программированием. Только таким образом учащиеся смогут не просто изучить раздел
программирование, но и успешно составлять собственные программы, решать учебные и
олимпиадные задачи.
Download