Введение в программирование».
Углубленное изучение программирования уместно начать с рассказа о его истории и современном состоянии. Отсылая за подробностями к специальным руководствам, приведем современную схему классификации видов программирования (рис. 19.1).

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