Программирование в средней школе

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

  • включить компьютер и дождаться, пока экран посинеет (загрузится NC);
  • 6 раз нажать кнопку со стрелкой вниз, потом Enter (зайти в нужный каталог);
  • 15 (!) раз стрелка вниз, Enter (запустить программу).

Кто-то удалил из каталога ненужный ВАК-файл, и прилежно исполняющая инструкцию дама оказалась в тупике.

Перед нами доведенный до абсурда образец пользовательского подхода к обучению работе на компьютере, когда не надо ничего понимать, а можно просто запомнить последовательность действий, приводящих к желаемому результату. Справедливости ради отметим, что бывают исключительные случаи, когда такой подход оправдан, но они не имеют никакого отношения к процессу обучения. Но если в школе "объясняют", что для построения круговой диаграммы надо написать числа там-то, нажать кнопку такую-то, ввести в окошечке название и т.д., то это только имитация обучения, так как ученики не понимают принципов работы и окажутся беспомощными перед аналогичной программой, но с другим интерфейсом пользователя. Обучать - значит давать фундаментальные знания, понимание изучаемых процессов. Что толку, если мы на химии только покажем, как взять вещество А, долить жидкости В, нагреть и т.д.? Без химических формул, таблицы Менделеева и прочих фундаментальных знаний ни о каком образовании в этой области говорить нельзя. То же самое с физикой, математикой и другими предметами. Информатика - исключение.

Хорошо все начиналось, но что мы имеем теперь? Рисование поздравительных открыток начали называть изучением методов обработки графической информации, набор в две колонки статьи в стенгазету - изучением текстовых процессоров, а бесцельное брожение по Интернету - изучением телекоммуникационных технологий. Пользоваться всем этим нужно. Выставки компьютерной графики, красиво оформленные газеты, web-странички школ, общение по электронной почте со сверстниками за рубежом становятся нормой школьной жизни. Но эти вещи не должны становиться содержанием информатики.

Многие учителя никак не могут осознать, что вместе с внедрением компьютера во все новые области жизни интерфейс пользователя становится интуитивно понятным и доступным для самостоятельного освоения грамотным человеком. Посмотрите на ребят, у которых дома есть компьютер. Без всяких проблем они изучают и Интернет, и офисные приложения, знают такие тонкости некоторых программ, до которых добираются только они и разработчики. Каким-то немыслимым способом они разбираются в системе команд современных игр, в сравнении с которыми изучаемые в школе программы - пустяк.

Школа должна давать базовые знания по всем предметам, в том числе и по информатике. Логика, устройство процессора и компьютера, сбор, кодирование, обработка и передача информации, программирование, обзор областей применения информационных технологий должны стать содержанием информатики. А тысячи прикладных программ имеют к этому предмету такое же отношение, как электрические приборы к физике. Естественно, дети не хотят учить всего этого, а желают "работать на компьютере". Но я что-то не видел, чтобы ученики радостно бежали на урок математики, потому что там будут решать уравнения с логарифмами.

Почему программирование положено в основу информатики? Тому есть две основные причины. Первая, историческая: ЭВМ разрабатывалась как расчетное устройство, и первые «монстры» работали только по написанным программам. Ни о каких «редакторах» и слова не было.

Вторая, методическая: изучая программирование, ученики одновременно приобретают навыки работы с компьютером в целом. Это включает набор и редактирование текста, файловую систему и т.п. А если грамотно подобрать примеры, то можно даже писать программы управления простейшими базами данных или форматирования текстовых файлов. Стоит ли говорить, что программирование положительно влияет на развитие логического и алгоритмического мышления учащихся.

Примерная схема изучения курса программирования в средней школе показана на рисунке. Штрих-пунктирными линиями выделены вариативные части курса.

Изучение программирования следует начинать с 8 класса, когда у школьников уже имеется некоторая базовая математическая подготовка. Как пропедевтический вариант можно использовать известную методику учителей ГМЦИТ г. Мурманска по изучению основ алгоритмизации в среде Microsoft Excel.

Следующий шаг – базовый курс программирования в 9 классе. Если учитель ставит целью не «ознакомление» с программированием, а формирование специфичных навыков для продолжающего обучения, то необходим факультативный курс по решению задач, причем задачи следует брать повышенной сложности или по крайней мере в нестандартной формулировке. Соответственно, на следующий год этот курс продолжается, ученики решают более сложные задачи уже на уроках, а на факультативе «пробуют» олимпиадные задачи. По своему опыту могу сказать, что именно в 10 классе ученика можно готовить на олимпиаду. Более младшие по возрасту ученики в основном не в состоянии воспринимать логическую «заковыристость» задач, предлагаемых на олимпиадах.

В течение этих двух лет учитель может поэкспериментировать и с языками программирования. Можно в 9 классе изучать Бейсик, а в 10 просто решать задачи, а можно и решать задачи, и учить Паскаль.

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

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

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