Валерий Лаптев писал(а):
А вот научить декомпозиции бывает значительно сложнее. Во всяком случае я постоянно сталкиваюсь с тем, что начинающие программеры не в состоянии разложить большое действие на ряд простых и поставить их в нужном порядке.
Как учить ТЕХНИКЕ ДЕКОМПОЗИЦИИ?
На черепашках?
Черепашки тут не помогут. Лучше всего тут поможет опыт. Но опыт не в программировании.
Или лучше пойду с другого конца. Одним из важных компонентов правильного выполнения декомпозиции является знание формальной логики как минимум в пределах, необходимых для чёткого понимания того, какое понятие - широкое, а какое - узкое. Это знание важно само по себе, но для целей декомпозиции важнее сами механизмы, позволяющие определить область понятия. Например, анализ определения понятия.
Другой компонент - наличие определения каждого объекта программы, подвергаемого декомпозиции. И вот здесь появляется принципиальная трудность. Зачастую, программист сам должен давать определения вновь появляющимся элементам (например, после очередного этапа декомпозиции). Помочь здесь может только жизненный опыт (накопленные понятия и их определения) и та часть формальной логики, про которую я говорил. Во-первых практика анализа определений помогает видеть ошибки уже на этапе составления определения, а во-вторых, после составления определения его можно уже целиком проанализировать и оценить, не является ли оно слишком узким.
Процесс декомпозиции заключается в нахождении определения понятия. Определение понятия - это другие понятия и отношения между ними. Процесс декомпозиции заканчивается, когда понятия текущего уровня декомпозиции выражаются в понятиях исполнителя. Исполнителем может быть процессор, видеокарта, принтер, другая периферия.
Грубо говоря - так.
Таким образом, для старших классов и выше предлагаю писать определения (на доске, в тетради)
без написания собственно программы. По началу. Скажем, одно практическое занятие в начале полугодия и одно в середине.
А черепашка здесь не поможет.
Вот такой макет. Пусть педагоги его рассмотрят и подкорректируют.