2. Примерно через три занятия мне пришла в голову замечательная идея: оформить процедуру построения башенки в виде алгоритма. Вот как это реально выглядело.
Во-первых, я ещё раз дал им задание на построение башенки. На этот раз они справились с заданием идеально и быстро, что, кроме всего прочего, продемонстрировало хорошее усвоение материала.
— А теперь, — сказал я, — давайте подумаем, какие действия мы делаем и в какой последовательности.
И, конечно, получил естественный ответ:
— Сначала ставим несколько кубиков, потом измеряем, и тогда один кубик или прибавляем, или убавляем.
(Действительно, при первоначальном построении башенки на глаз они ошибались не более чем на один кубик.) Я стал нудеть, что надо разбить задачу на самые маленькие действия, например, ставить всего по одному кубику, а не сразу много, и т. п.
После этого я им показал вырезанные заранее карточки из плотной бумаги. На них было (Аллой) нарисовано следующее:
1) прямоугольная карточка: мальчик ставит кубик;
2) прямоугольная карточка: мальчик измеряет башенку (на полу);
3) карточка-ромбик: в ней большой вопросительный знак (имеется в виду молчаливый вопрос: ну как, равны?);
4) карточка-прямоугольник поменьше: на ней (печатными буквами!) написано слово КОНЕЦ;
5) ещё из той же плотной бумаги был вырезан набор стрелок — несколько маленьких одинаковых стрелок и одна длинная; на двух маленьких стрелках были написаны слова ДА и НЕТ.
Показав всё это, я спросил, в каком порядке нужно делать нарисованные здесь действия. Такой тип вопросов был уже ребятам знаком, так как до этого они выполняли два следующих задания:
(А) Определить порядок утренних дел (одевание, умывание, просыпание, завтрак, катание на санках, зарядка, потягивание в кровати и т. п.) — из книги Тамаша Варги «Блок-схемы, перфокарты, вероятности».
(Б) Определить, в каком порядке следует надевать различные предметы одежды и обуви (трусы, майку, носки, ботинки, рубашку, брюки, свитер, шубу, шарф, шапку).
В первом случае получается линейный порядок, или «программа без ветвления», во втором — частичный порядок, или, если угодно, недетерминированный алгоритм.
Поэтому в данном случае ребята правильно объяснили последовательность действий, а когда потребовалось снова вернуться к блоку «мальчик ставит кубик», я жестом фокусника извлёк длинную стрелку, и получилась изображённая на рис. 54 блок-схема.
Рис. 54. Алгоритм построения башенки нужной высоты. Текста на карточках с картинками не было — их смысл я объяснял устно. А слова «да», «нет» и «конец» дети уже были способны прочитать сами.
3. Сейчас, задним числом, всё изложенное кажется мне не очень удачным. Есть два дефекта в самой реализации: первый — плохо выражена проверка условия; второй — куда-то исчезла операция измерения той башенки, что на столе (её надо было предпослать первому блоку). Ещё более важен другой недостаток — неестественность конструкции. Ребята прекрасно поняли, что я делаю, но совершенно не поняли, зачем и почему именно так. Я уже говорил, что реально в жизни они поступали иначе: ставили сразу несколько кубиков, после чего хватало одного-двух измерений.
Тем не менее осталась общая идея — придумывать задачи на построение алгоритмов, и остались также некоторые принципы, сохранившиеся в окончательном проекте.
Принцип 1. Задавать алгоритмы не с помощью какого-нибудь «записываемого» языка программирования (или даже обыденного языка) — ведь ребята ни читать, ни писать не умеют, за исключением самых простых слов, — а задавать их блок-схемами.
Принцип 2. Блок-схемы не рисовать на бумаге — рука у детей очень уж нетвёрдая, — а выкладывать из готовых карточек. (Самое трудное и обременительное следствие этого принципа — необходимость вырезать большое количество стрелок разной длины.)
Принцип 3. Операторы и логические условия на карточках должны изображаться не словами, а простыми и понятными картинками. Лучше всего даже — простыми условными значками.
Кроме того, чисто эстетически оказалось очень приятным раскладывать белые карточки на чёрном лакированном фоне журнального столика.
Однако долгое время я не мог придумать ни одной новой задачи. Идеи приходили в голову разные — от того, как подниматься на нужный этаж на лифте, до того, чтобы вытаскивать из мешка шарики разных цветов и раскладывать по двум урнам. Но всё это были процессы либо плохо алгоритмизуемые, либо неинтересные и неестественные. А идея алгоритмического языка казалась мне совсем недостижимым идеалом: если я не могу придумать одну задачу, то что уж говорить о классе задач! К тому же меня несколько угнетала мысль о том, что даже если я придумаю несколько задач, то для каждой из них придётся делать новые рисунки.