Отсылая за подробностями к специальным руководствам, приведем возможную схему классификации видов программирования, с каждым из которых можно связать специальный профильный курс (рис. 15.1).

Рис. 15.1. Классификация языков программирования
На начальном этапе программирование было операциональным и (одновременно) процедурным (например, язык Фортран, исходные версии Бейсика), а уже в усовершенствованном виде — структурным (классический пример — Паскаль). Отличаясь рядом деталей, эти подходы сходятся в следующем: программа представляет собой детальное описание того, как решать задачу, т. е. алгоритм в некоторой специальной записи. Основные понятия языков этих групп — оператор и данные.
Принципиально иное направление в программировании связано с методологиями (иногда говорят «парадигмами») непроцедурного программирования. В их число входят объектно-ориентированное и декларативное программирование.
Объектно-ориентированная программа — совокупность множества независимых объектов. Каждый объект можно использовать для решения задачи, не вникая во внутренние механизмы его функционирования. Наиболее популярные языки объектного программирования — C++, Delphi, Visual Basic.
При использовании декларативного языка программист указывает исходные информационные структуры, взаимосвязи между ними и то, какими свойствами должен обладать результат. При этом процедуру его получения («алгоритм») программист не строит (по крайней мере, в идеале). В этих языках отсутствует понятие «оператор» («команда»). Декларативные языки можно подразделить на два семейства — логическое (Пролог) и функциональное (Лисп).
Наибольший опыт преподавания программирования в школе накоплен в отношении, прежде всего, языков типа Бейсик и Паскаль. В конце 1980-х гг. появились курсы, ориентированные на изучение основ математической логики и логического программирования, с середины 1990-х гг. — объектно-ориентированного программирования.
Сделаем ряд следующих замечаний в связи с изучением программирования в школе.
1. При углубленном изучении программирования часто не ограничиваются одним подходом. Достаточно типична ситуация, когда последовательно реализуются два курса (скажем, один в Х кл., а второй в XI кл.).
2. Часто авторы курсов программирования, ориентированных на разные его методологии, утверждают (из методических соображений), что то или иное направление при изучении программирования должно непременно предшествовать другому направлению. Скажем, вначале надо изучать логическое программирование на Прологе, а лишь затем — структурное (обычно на Паскале). Или другой вариант: всему должен предшествовать чисто объектный подход, а на его базе изучают все остальное. Аргументация обычно такова: методология X легче осваивается после методологии Y, а не наоборот. По нашему мнению, в таких утверждениях в основном отражаются профессиональные пристрастия разработчиков курсов.
3. При выборе темы спецкурса по информатике следует учитывать, что программирование (в любом его виде) годится для этой роли далеко не для всех учащихся. Утверждение типа «программирование — вторая грамотность», сыгравшее в свое время важную роль в становлении школьной информатики, следует сегодня воспринимать достаточно критически. Для большинства учащихся, с точки зрения интересов и будущей профессиональной карьеры, вполне достаточно изучить программирование на уровне, определяемом минимальными требованиями госстандарта (или заменяющего его документа); эти требования обычно реализуются в базовом курсе.
15.1. Методика обучения структурному
программированию
Практически повсеместно языком структурного программирования, используемым для изучения на уровне школьных курсов, является Паскаль. Это абсолютно оправдано по всем соображениям, и в данном подразделе ограничимся именно этим языком.
Способ изучения Паскаля в форме профильного курса информатики в определенной мере зависит от того, были ли прежде учащиеся знакомы с элементами Паскаля (в ходе изучения базового курса). Если ответ положителен, то учащиеся, скорее всего, знакомы в общих чертах со схемой Паскаль-программы, реализацией простых линейных, ветвящихся и циклических алгоритмов. В любом случае профильный курс должен содержать все темы, составляющие язык Паскаль, но методика их изучения должна учитывать вышесказанное обстоятельство. Будет правильным регулировать уровень изложения степенью подробности и «строгости», а также уровнем задач, приводимых в качестве примеров и самостоятельных заданий (как известно, разбор и решение задач играет важнейшую роль при обучении любому виду программирования).
При планировании курса учитель должен решить, будет ли язык изучен «полностью». Опыт показывает, что для этого, во-первых, мало даже годичного курса при наличии в нем двух-трех часов в неделю, а во-вторых, что ряд «верхних этажей» Паскаля труднодоступен многим учащимся (речь идет, прежде всего, о динамических структурах данных и объектном расширении Турбо Паскаля). Более того, возникает принципиальный вопрос о том, надо ли это в принципе включать в школьный курс, так как погоня за количеством обсуждаемых вопросов может стать препятствием для понимания основ программирования, формирования навыков структурного решения алгоритмических задач.
Программирование в узком смысле, понимаемое как кодирование на изучаемом языке готовых алгоритмов без проникновения в их сущность и без приобретения навыков по их разработке, не может быть целью общеобразовательного курса (даже профильного). Основная цель изучения того же Паскаля — не столько он сам, сколько приобретение знаний и навыков алгоритмизации в ее структурном варианте, освоение методов решения некоторого класса задач, традиционно реализуемых на Паскале и родственных ему языках программирования.
Ниже даны рекомендации по изучению отдельных тем (в той последовательности, в которой это чаще всего делается, хотя некоторые темы допускают перестановку). Для упрощения ситуации не будем оговаривать, что некоторые вопросы могут быть известны из базового курса информатики; учитель сам определит ту информацию, которую не следует дублировать.
Тема «Алгоритмы. Структурная алгоритмизация»
Форма изложения материала — сочетание лекции с практическими занятиями. На лекции вспоминают и уточняют понятие «алгоритм», введенное в базовом курсе информатики, и обсуждают особенности алгоритмов, исполнителем которых является компьютер. Далее переходят к способам записи алгоритмов, акцентируя внимание на блок-схемах, приводят примеры нескольких простейших линейных алгоритмов.
Отметим, что по вопросу о целесообразности использования блок-схем при отработке навыков алгоритмизации в методической литературе существуют разные точки зрения. Возможно (хотя и вызывает сомнение), что при подготовке профессиональных программистов в вузах этот способ записи алгоритмов является излишней промежуточной ступенью. Однако, как показывает опыт, при выработке навыков алгоритмизации у школьников использование графических схем является чрезвычайно полезным. При этом необязательно следовать соответствующему стандарту, но некий отчетливый набор Правил по изображению блок-схем должен присутствовать.
Далее переходят к изложению правил структурной алгоритмизации. Приведите на уровне схемы три классические структуры (следование, выбор и цикл). При изображении структуры «выбор» можно использовать, например, схему, приведенную на рис. 15.2 (как показывает опыт, на доске и в тетради удобнее вертикальная компоновка блок-схем); схемы развилки (как частного случая выбора) и различных циклов общеизвестны.

Рис. 15.2. Схема структуры «выбор»
Приведя несколько примеров простых задач, реализуемых через единичный выбор (развилку), единичный цикл (с предусловием и с постусловием), перейдите к иллюстрации важнейшего в структурном программировании понятия «суперпозиции». Уместно вначале просто показать графически, что такое суперпозиция (вложение) различных пар структур друг в друга. Например, структура типа «развилка, вложенная в цикл» изображена на рис. 15.3.

Рис. 15.3. Пример вложенной структуры
Обратите внимание на то, что при анализе изображений алгоритмов методически важной является возможность указать те точки, в которых начинается и заканчивается каждый элементарный фрагмент. При вертикальной компоновке блок-схем эти точки должны быть на одной вертикали.
Теперь сформулируйте несложную содержательную задачу, приводящую к такой структуре, и решите ее графически. Например: в компьютер последовательно вводится 100 чисел, найти отдельно суммы положительных и отрицательных чисел. Надо поступить также с другими суперпозициями: развилка в развилке, цикл в развилке, цикл в цикле, и отрабатывать решение типовых задач алгоритмизации, которые можно почерпнуть в цитированных ниже задачниках. При этом не следует прибегать к структурированию обрабатываемой информации (например, создавать переменные с индексом), чтобы не усложнять основную задачу.
Следующей проблемой является введение в идею модульности, одну из важнейших в структурном программировании. На блок-схемах вспомогательные алгоритмы (из которых впоследствии вырастут процедуры и функции) обозначают, например, так:

Далее формулируйте принципы нисходящего проектирования и пошаговой детализации, также являющиеся частью структурной алгоритмизации, и путем решения относительно несложных задач вырабатывайте простейшие навыки этой деятельности. Задачи на этом этапе достаточно традиционны, например: найти наибольшее число из нескольких (последовательно вводимых в машину) — вспомогательный алгоритм есть нахождение наибольшего из двух; найти наибольший общий делитель для нескольких целых чисел и т. п.
Опыт показывает, что пока элементарные навыки структурной алгоритмизации не отработаны, изучение языка типа Паскаль нецелесообразно, так как на специфические трудности программирования на новом языке накладываются трудности более высокого порядка. Поэтому этой теме следует посвятить несколько уроков без выхода на ЭВМ.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |


