Не будем спорить о том, нужно ли обучение программированию. Примем как аксиому (если вы с этим не согласны, то просто бросьте читать этот пост). Вопрос другой: как?
Начальное обучение непосредственно на промышленных языках программирования приводит к ряду трудностей. Изучение программирования "всухую" сродни плаванию на берегу, и мне кажется совершенно очевидным, что без практики обучение бессмысленно. Но обеспечение практики, во-первых, достаточно затратно (эти компьютерные классы дорого стоят и далеко не везде есть, что бы нам ни говорили с экранов). Это приводит к тому, что "информатика" есть только в старших классах, а не тогда, когда развитие мышления наиболее актуально, в 10-12 лет. Это еще можно было бы преодолеть, но есть проблема куда большая. Даже написание простейшей программы сопряжено для ученика с преодолением значительных технических трудностей. Для написания элементарной программки нужно нажать очень много клавиш на клавиатуре, и не перепутать... Это же вам не математика, когда за орфографические ошибки журят, но оценку не снижают, тут на одну букву ошибся - и все. А еще нужно уметь открывать и закрывать какие-то среды программирования, изучать какие-то правила работы со средой. Это же какую усидчивость нужно иметь... и где ее взять в 10 лет?
Предпринимались попытки разработать языки попроще для начального развития алгоритмического мышления. Но они, во-первых, тоже требовали всяких технических навыков, а, во-вторых, выглядели уж больно игрушечными. Словом, не прижились.
Кстати, не последнюю роль играют еще и проблемы низкой квалификации преподавателей, отсутствие внятных методик (или, что то же самое, слишком большое количество невнятных), отсутствие традиций преподавания и т.п.
А ведь в нашем распоряжении есть прекрасный язык программирования, использование которого решает все проблемы! Я в обязательном порядке рассказывал его лицеистам на уроках математики. На "информатике" мы занимались другими вещами, но в оправдание свое скажу, что информатике я все-таки учил более старшие классы, десятый-одиннадцатый, там уже Паскаль был уместен. А потратить один урок математики на полезную вещь - сам бог велел,
по-моему. Итак.
Основными объектами этого языка являются геометрические объекты, изучаемые в стандартном школьном курсе геометрии: прямые, точки, окружности, углы и т.п. Поскольку мы говорим о средней школе, то все происходит, естественно, на плоскости. В начале работы программы предполагается, что нам дано некоторое множество таких объектов. Целью работы программы предполагается получение новых объектов, обладающих нужными свойствами.
Программой является последовательность предложений русского языка, каждое из которых принадлежит одному из следующих трех типов:
1. Проведем прямую через две данные точки
2. Проведем окружность с центром в данной точке и радиусом, равным расстоянию между двумя заданными точками.
3. Обозначим буквой латинского алфавита точку, полученную при пересечении двух данных линий.
В реально программе вместо "данных" точек и линий должны указываться их буквенные обозначения, или должно явно указываться, что тот или иной объект берется произвольно. Выполнение программы состоит в последовательном выполнении этих инструкций, и, как следствие, в последовательном появлении новых точек, прямых и окружностей. Инструкция применима, если все нужные для нее объекты существуют к моменту ее выполнения, в противном случае программа считается ошибочной.
Самое время прерваться и сказать, что если у читателя возникло дежавю, то это очень хорошо! Я того и добиваюсь. И на самом деле пытаюсь формализовать то, что давно известно как "геометрическая задача на построение".
Зачем мне нужно было называть это "алгоритмическим языком"? Ну, просто потому, что нужно же хоть иногда называть вещи своими именами. Решить школьную задачу на построение - это как раз и означает предъявить программу с указанным синтаксисом. Школьникам, конечно, для наглядности предлагают еще и выполнить чертеж с использованием реальных инструментов. Дидактически это совершенно правильно (тут вам и наглядность, тут и повторяемость), но с принципиальной точки зрения мы с вами прекрасно понимаем, что чертеж-то и не нужен. Реальным описанием процесса построения мог бы стать слайд-фильм с последовательным показом промежуточных состояний чертежа, но это бессмысленно, описания последовательности действий вполне достаточно.
Конечно, описывать каждый раз полным текстом было бы слишком утомительно для детей. Поэтому в реальности детям ненавязчиво, не употребляя красивых, но непонятных слов, дают идею макроса. (Исторически, кстати, было наоборот, геометрии-то три тысячи лет, а понятию подпрограммы сколько? Но мы истории не пишем...) А именно, с детьми решают несколько типовых задач, а затем "разрешают использовать их в дальнейших построениях". Технически это выражается в том, что кроме трех основных типов предложений разрешают использовать еще и некоторый набор дополнительных. По моим наблюдениям, для решения школьных задач достаточно шести.
1. Построим срединный перпендикуляр к данному отрезку.
2. Построим прямую, проходящую через данную точку и перпендикулярную к данной примой
3. Построим прямую, проходящую через данную точку, и параллельную к данной прямой
4. Построим биссектрису данного угла
5. Построим прямую, образующую при пересечении с данной прямой угол, равный данному
6. Построим касательную к данной окружности, проходящей через данную точку.
Впрочем, каждый преподаватель волен расширить список. Сужать, видимо, не стоит... Но мы сейчас говорим о принципиальных моментах.
Тут же ненавязчиво преподаются и основные управляющие конструкции. Существует много задач, в которых учащемуся нужно сделать выбор, как выполнять построение. Например, задача на построение геометрического места точек, равноудаленных от двух данных прямых решается по-разному в зависимости от того, параллельны эти прямые или нет. Пропедевтика понятия цикла есть, например, в задаче о делении данного отрезка на n равный частей.
Так что возможности для начального развития навыков программирования в средней школе вполне есть. И всегда были!!! И именно поэтому у нас вполне неплохо с программистскими кадрами. Дело не в "особом таланте русского народа", просто школьные программы когда-то удачно составили. И если кому-то хочется, чтобы школа выпускала людей, больше приспособленных к нынешней компьютеризированной действительности (желание прекрасное, кто бы спорил), то худшее, что можно для этого сделать - это заменить геометрию на "информатику". Но ведь так и будет сделано, вот что печально...
Кстати, а вы не замечали того, что победители олимпиад по программированию всегда бывают из тех школ, в которых хорошо преподается математика?
Между прочим, одним из побудительных моментов для написания этого поста явились несколько разговоров в реале о моем предложении выкинуть информатику из средней школы как профанацию (см
http://fdo-eq.livejournal.com/382540.html). Ну, и некоторая (не вся!) аргументация к моему
давно продвигаемому тезису, что программирование должно быть в школе одной из составляющих математики, надеюсь, тоже видна. Что же касается моего предыдущего поста про
почти школьную задачку, то я выражаю скромную надежду, что решатели будут хотя бы стараться описывать решения с помощью предложенного синтаксиса. А то фразы типа "проведем окружность из данной точки" не кажутся мне математически корректными... мягко говоря.