ИССЛЕДОВАНИЕ ТЕХНОЛОГИЙ
ПРОГРАММИРОВАНИЯ
Важное место в программном
обеспечении современных ЭВМ занимают системы
программирования. Основное их назначение -
освободить программиста от необходимости
работать на языке машинных команд. Язык
программирования, с которым работает система
программирования, называется ее входным языком.
Системы программирования именуются по названию
своего входного языка. Например: Бейсик - система,
Паскаль - система, система пролог. Иногда в
название систем включаются префиксы,
обозначающие, например, фирменное происхождение
системы. Очень популярны системы с приставкой
"Турбо": Турбо - Паскаль, Турбо - Си и др. Это
системы программирования, разработанные фирмой
Borland.
Системы программирования - это
универсальные средства работы с информацией. С
их помощью можно решать вычислительные задачи,
обрабатывать тексты, получать графические
изображения, осуществлять хранение и поиск
данных и т.д., в общем, делать все, что делают
средства прикладного программного обеспечения -
специализированные исполнители. Кроме того,
сами эти средства (графические и текстовые
редакторы, СУБД и др.) - это программы, написанные
на языках программирования, созданные с помощью
систем программирования.
Языки программирования претерпели
большие изменения с тех пор, как в сороковых
годах началось их использование. Они все еще
продолжают изменяться и теперь даже быстрее, чем
когда либо ранее.
Первые языки программирования были
очень примитивными и мало чем отличались от
формализованных упорядочений двоичных чисел (единиц
и нулей), понятных компьютеру. Использование
таких языков было крайне неудобно с точки зрения
программиста, так как он должен знать числовые
коды всех машинных команд, должен сам распределять
память под команды программы и данные. На языках
машинных команд трудно поддерживать структурную
методику программирования.
Для того, чтобы облегчить общение
человека с ЭВМ были созданы языки
программирования типа Ассемблер. Переменные
величины стали изображаться символическими
именами. Числовые коды операций заменились на
мнемонические (словесные) обозначения, которые
легче запомнить. Язык программирования
приблизился к человеческому языку, но удалился
от языка машинных команд. Чтобы ЭВМ могла работать
на языке Ассемблера, необходим транслятор -
системная программа, переводящая текст
программы на Ассемблере в эквивалентные ей
машинные команды. Языки типа Ассемблер -
машиноориентированные, потому что они
настроены на структуру машинных команд
конкретного компьютера. Разные компьютеры с
разными типами процессоров имеют разный
Ассемблер.
В пятидесятых годах, с широким
развитием ЭВМ и применением их в различных
областях науки и техники, возникла серьезная
проблема: простой пользователь не мог работать
с ЭВМ из-за сложности языков программирования, а
подготовленный программист был просто не в
состоянии обслужить огромное количество
пользователей. Разрешением данной проблемы
явилось создание языков программирования
высокого уровня (ЯПВУ). Форма записи программ на
ЯПВУ по сравнению с Ассемблером и машинными
языками ближе к традиционной математической
форме и разговорному языку. Они легко изучаются,
хорошо поддерживают структурную методику
программирования, и еще, что очень важно, ЯПВУ
являются машинонезависимыми языками. Одна и та
же программа на таком языке может быть выполнена
на ЭВМ различных типов, оснащенных
соответствующим транслятором. Однако программы,
написанные на языках высокого уровня, занимают
больше памяти и медленнее выполняются, чем
программы на машинных языках или языках
Ассемблера.
Первыми популярными языками высокого
уровня, появившимися в 50-х годах, были Фортран,
Кобол (в США) и Алгол (в Европе). Для первых ЯПВУ
была характерна их предметная ориентация. Так
языки Фортран и Алгол были ориентированы на
научно - технические расчеты математического
характера. Кобол - язык для программирования
экономических задач. В нем, по сравнению с двумя
другими языками программирования, слабее
развиты математические средства, зато хорошо
развиты средства обработки текстов, организация
вывода данных в форме требуемого документа.
Огромное количество новых языков
программирования стало появляться в 60-х, 70-х
годах. За всю историю ЭВМ их было создано более
тысячи. Однако распространились и выдержали
испытание временем немногие.
В 1965 году появились два новых важных
языка. Профессорами университета в городе
Дартмуне Т. Куртцем и Д. Кемени был разработан
язык для обучения программированию, который
являлся упрощенной версией Фортрана и получил
название Бейсик (Beginner's All-purpose Simbolic Instruction Code, т.е.
многоцелевой код символических команд для
начинающих). Бейсик предоставляет разнообразные
средства для диалога: пользователь имеет
возможность "общаться" с Бейсик-программой
во время ее выполнения. Программа может "попросить"
пользователя ввести данные, проверить их, осуществить
выбор и т.д. Наибольшее признание Бейсик получил
с появлением микроЭВМ начиная с 1975 года. Сейчас
Бейсик со всеми его реализациями вполне можно
назвать наиболее известным и широко
распространенным языком высокого уровня.
Вторым языком, появившемся в 1965 году,
был ПЛ/1 (Programming Language 1, т.е язык программирования
1). ПЛ/1 был разработан при содействии фирмы IBM.
При этом преследовалась цель создать язык,
сочетающий в себе лучшие свойства Алгола, Кобола
и Фортрана. ПЛ/1 действительно подходит для
решения широкого круга задач и является более
гибким по сравнению с Алголом, Коболом и
Фортраном. При появлении языка ПЛ/1 предсказывали,
что он станет основным языком и в конечном итоге
заменит своих предшественников. Однако этого не
произошло. Главная причина по-видимому связана
с тем, что некоторые пользователи Кобола и
Фортрана не ощутили тех преимуществ языка ПЛ/1,
которые оправдали бы переход к нему. Другая
причина связана с "размерами" языка. Большое
количество средств и разнообразие операторов
ПЛ/1 привели к тому, что он оказался довольно
сложным в изучении.
В 1971 году профессор Н. Вирт из
Технического университета в Цюрихе разработал
новый язык, известный под названием "Паскаль"
(в честь хорошо известного математика 17-го века
Блеза Паскаля). Язык паскаль основан на Алголе, но
содержит ряд усовершенствований. Первоначально
он создавался как учебный язык, в нем аккуратно
соблюдена структурная линия программирования.
Наибольший успех и распространение языку
Паскаль принесли первые персональные компьютеры.
Фирма Borland Internetional Inc (США) разработала систему
Турбо - Паскаль для ПК. Турбо - Паскаль - это не
только язык и транслятор с него, но еще и
операционная оболочка, позволяющая
пользователю удобно работать на Паскале. Турбо -
Паскаль вышел за рамки учебного предназначения и
стал языком профессионального
программирования с универсальными
возможностями. В силу своих достоинств Паскаль
послужил источником для создания многих
основных современных языков программирования,
таких как Ада, Си, Модула-2 и др.
Язык Си первоначально был разработан
для мини - ЭВМ использующих операционную
систему UNIX. Он является относительно простым
языком, в нем нет операций над символьными
строками и списками, но, в отличии от Паскаля, в
нем заложены возможности непосредственного
обращения к некоторым машинным командам, к
определенным участкам памяти компьютера. Си
широко используется как инструментальный язык
для разработки операционных систем, трансляторов,
баз данных т других системных и прикладных
программ.
В 1965 году появился язык
программирования Лисп (LISt Processing, т.е. обработка
списков). Он служит для обработки строк и
рекурсивных данных. Лисп располагает также
средствами для выполнения арифметических и
логических операций. Он находит широкое
применение в исследованиях по созданию
искусственного интеллекта.
В настоящее время существует большое
количество языков высокого уровня, и каждый год
появляются новые языки (хотя немногие из них
действительно реализованы и в какой-то степени
используются).
В современной информатике можно
выделить два основных направления развития
языков программирования: процедурное и непроцедурное
(рис. 1.).
Процедурное программирование
возникло на заре вычислительной техники и
получило широкое распространение. В процедурных
языках программа явно описывает действия,
которые необходимо выполнить, а результат
задается только способом получения его при
помощи некоторой процедуры, которая
представляет собой определенную последовательность
действий. Основные средства, применяемые в этих
языках - величины (в том числе и табличные),
присваивания, циклы, процедуры. При построении
процедурной программы необходимо ясно
представлять какие действия и в какой
последовательности будут производиться при ее
выполнении. Следовательно, процедурное программирование
основано на алгоритмическом мышлении и может
служить средством его развития.
Среди процедурных языков можно
выделить в свою очередь структурные и
операционные языки. В структурных языках одним
оператором записываются целые алгоритмические
структуры: ветвления, циклы. В операционных
языках для этого используются несколько
операций. Широко распространены структурные
языки: Паскаль, Си, Ада, ПЛ/1. Операционные: Фортран,
Бейсик, Фокал.
Непроцедрное (декларативное)
программирование появилось в начале 70-х годов, но
стремительное его развитие началось в 80-е годы,
когда был разработан японский проект создания
ЭВМ пятого поколения, целью которого явилась
подготовка почвы для создания интеллектуальных
машин. К непроцедурному программированию относятся
функциональные и логические языки.
В функциональных языках программа
описывает вычисление некоторой функции. Обычно
эта функция задается как композиция других,
более простых, те в свою очередь разлагаются на
еще более простые и т.д. Один из основных
элементов в функциональных языках - рекурсия, то
есть вычисление значения функции через значение
этой же функции от других элементов.
Присваивания и циклов в классических
функциональных языках нет.
Наиболее распространенными среди
функциональных языков являются Лисп и Рефал.
Лисп - язык обработки списков давно и активно
применяется в системах искусственного интелекта.
Рефал, построенный на алгоритмах Маркова,
удобен для обработки текстов и единственный из
распространенных в мире языков программирования,
разработанный в нашей стране.
Промежуточное положение занимает
язык Лого, который содержит средства и
процедурного и функционального
программирования. На начальном уровне, которым
всегда начинается и часто заканчивается его
изучение, он похож на классический процедурный
язык. Однако при решении сложных задач обработки
данных на первый план выходят функциональные
методы. Фактически, Лого - это Лисп, адаптированный
для обучения. Эта адаптация потребовала
включения в язык процедур, переменных,
присваивания, т.е. средств, характерных скорее
для процедурных, чем для функциональных языков.
Функциональная программа, как и процедурная,
описывает действия, которые надо совершить для
достижения результата (вызов функции - это тоже
действие), но ее построение требует скорее
математического, чем алгоритмического мышления.
В логической традиции программа
вообще не описывает действий. Она задает данные
и соотношения между ними. После этого можно
задавать вопросы. Машина перебирает известные (заданные
в программе) данные и находит ответ на вопрос.
Порядок перебора не описывается в программе, а
неявно задается самим языком. Классическим
языком логического программирования считается
Пролог, хотя он и содержит некоторые средства
управления перебором, т.е. процедурные элементы.
Построение логической программы вообще не требует
алгоритмического мышления. Здесь нет динамики,
нет описания действий, программа описывает
статические отношения объектов, а динамика
находится в механизме перебора и скрыта от
программиста.
Можно выделить еще один класс языков
программирования - объектноориентированные
языки сверхвысокого уровня. На таких языках не
описывают подробной последовательности
действий для решения задачи, хотя они содержат
элементы процедурного программирования.
Объектноориентированные языки,
благодаря богатому пользовательскому
интерфейсу, предлагают человеку решить задачу в
удобной для него форме. Примером такого языка
может служить язык программирования
визуального общения Smalltak. Трудно провести четкую
границу между системами программирования
сверхвысокого уровня и прикладным программным
обеспечением. Как те, так и другие системы
позволяют работать с ними неквалифицированному
пользователю, т.е. не программисту.
ВЫБОР ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ
ДЛЯ УЧЕБНОГО ПРОЦЕССА
Выбирая стратегию преподавания
информатики в школе, необходимо учитывать, что
задача общеобразовательного курса - это в
большой степени выработка определенного стиля
мышления, формирование наиболее общих навыков,
умений и представлений, нежели освоение тех или
иных конкретных языков и технических средств
программирования.
В то же время такой курс должен
служить базой для последующего
профессионального изучения программирования в
высшей школе или старших классах средней школы (в
рамках профессионального обучения).
В настоящее время существуют три
наиболее распространенных подхода к
преподаванию программирования:
1) преподавание программирования как
теоретической дисциплины вообще, без освоения
конкретных языков и систем;
2) преподавание на основе специально
разработанного языка, ориентированного на
обучение основным навыкам программирования;
3) изучение одного или нескольких
языков программирования, широко используемых
при решении научных и хозяйственных задач (такие
языки можно назвать стандартными).
Первый подход представляется
наиболее логичным. Однако его практическая
реализация наталкивается на серьезные трудности,
так как с отказом от языка программирования не
только теряется возможность использовать
соответствующий инструментарий, но и зачастую
становится трудно обосновать необходимость его
использования.
Второй подход часто используется при
преподавании основ программирования в младших
классах средней школы. Разработаны и
специализированные языки для этих целей. В их
числе можно назвать Школьник, Рапира (СССР), SMR (Великобритания),
LOGO (США). Они предельно упрощены и рассчитаны на
возможности младшего школьника в области
программирования. Такой подход хорош при
углубленном изучении информатики в
специализированных классах при начальном этапе
обучения.
Противники третьего подхода
утверждают, что он непригоден прежде всего
потому, что ни один из существующих стандартных
языков не отражает в достаточно чистом виде
современный концептуальный запас
программирования. Такое положение, вообще говоря,
естественно, так как все эти языки
разрабатывались со своими целями и каждый из них
ориентирован на определенную, более или менее узкую
область применения. Кроме того, большинство
реализаций стандартных языков загружено
большим количеством технических деталей и
сложны в изучении.
Наиболее приемлемым для
общеобразовательной школы, где курс информатики
преподается в 8-х - 9-х классах, является сочетание
первого и третьего подходов - обучение
теоретическим основам программирования на базе
стандартного языка. При этом не обязательно
вдаваться в глубины языка. Учащиеся, которых он
заинтересует, могут сделать это и сами.
Наибольшее внимание следует уделить переходу
от алгоритмических структур к их программно
реализации на языке программирования.
Здесь стоит отметить, что Бейсик и
Паскаль первоначально создавались как учебные
языки, но со временем получили широкое
распространение в качестве стандартных языков.
Можно взять за основу один из них. У каждого
языка есть свои сторонники и противники, и
конечный выбор определяется наличием аппаратных
средств и личными наклонностями преподавателя.
Ориентируясь на ЭВМ БК-0011М, имеющийся в наличии,
целесообразно выбрать Бейсик - систему,
реализованную на этих машинах.
ВЫВОДЫ ПО РАЗДЕЛУ
Из существующих технологий
программирования наиболее популярной и широко
используемой является технология структурного
программирования "сверху - вниз". Ее
достоинством является то, что она позволяет
сформировать у обучаемых алгоритмичесий стиль
мышления, необходимый при изучении практически
всего курса информатики. Следовательно, выбирая
язык программирования для школьного курса,
нужно ориентироваться на один из структурных
языков. Желательно, чтобы этим языком был Бейсик
или Паскаль, так как они первоначально
создавались для учебных целей.
СПИСОК ЛИТЕРАТУРЫ
1. Концепции системной интеграции
информационных технологий в высшей школе. М.:
РосНИИСИ, 1993.
2. Герасименко В.А. Новый взгляд на
информатику и информатизацию: необходимость,
проблемы становления и развития // Зарубежная
радиоэлектроника, 1995, № 2, 3.
3. Основы информатики и
вычислительной техники в базовой школе. Пособие
для учителей. Под редакцией Семакина И.Г., Пермь,1995.
4. Аляев Ю.А., Березинцев М.П.
Программное обеспечение микро-ЭВМ "Электроника
БК-0010" (Пакет программ), ч. 1, 2, Пермь,1994.
5. Программное обеспечение ПЭВМ "Электроника
БК-0011М". Учебно-методическое пособие, Пермь, 1992.
6. Аляев Ю.А., Кушев В.О., Лебедев В.В.
Прикладное программирование, ч. 1.
Алгоритмизация и программирование. Учебно-методическое
пособие для самостоятельной работы.
7. Прикладное программирование.
Сборник задач. Под редакцией Лебедева В.В., Пермь,
1997.