Степанов А.Г.

Москалева О.И.

Зуева Н.В.

ГУАП,

г. Санкт-Петербург

Вариант классификации парадигм программирования для отбора содержания обучения информатике

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

Stepanov A.G.

Moskaleva O. I.

Zueva N.V.

SUAI

St. Petersburg

Russia

A variant of the classification of programming paradigms for the selection of the content of computer science training

The diversity of existing programming paradigms is discussed and fundamental and additional ones are highlighted. A variant of classification of programming paradigms used to select the content of teaching computer science, in particular for the selection of programming languages to be studied, is proposed.

Информатика как научная дисциплина сформировалась в 1986 году по итогам Общего собрания Академии наук СССР. Опубликованные до его проведения статьи А.А. Дородницына [1] и А.П. Ершова [2] сформировали ее общую структуру в виде набора технических, программных и алгоритмических средств. Тогда же учебная дисциплина «Основы информатики и вычислительной техники» стала обязательным предметом во всех общеобразовательных школах Советского Союза [3]. В основу ее изучения было положено освоение методов создания программ на уже распространенных в то время языках высокого уровня, причем некоторые из них позволяли заниматься программированием даже без использования компьютеров [4]. Техническая составляющая дисциплины изучалась по мере появления аппаратной базы [5], а алгоритмической уделялось внимание только по мере необходимости в рамках решаемых прикладных задач. Понимание того, что информатика, как и любая другая наука, содержит теоретическую и прикладную составляющие пришло позднее [6], [7]. К. К. Колин, занимаясь вопросом структуризации предметной области информатики, предложил термином «информатика» обозначить «и компьютерную науку, и информационную науку, и всю область, связанную с использованием информационной техники и информационных технологий для социальных коммуникаций, проведения научных исследований, развития образования, экономики и культуры, а также всю информационную сферу деятельности, включая отрасль промышленного производства» [8].

Система среднего и высшего образования по мере своих сил, возможностей и заинтересованности строила свою работу на развитии уже имеющихся у нее результатов в преподавании составляющих информатики. Проводились исследования, ставившие своей целью создание единой технологии обучения [9], однако, многообразие решаемых прикладных задач заставило вводить определенную специализацию. Все это, в конечном итоге, привело к тому, что каждый начал учить информатике «по-своему», выделяя «важные» с его точки зрения составляющие и отбрасывая «лишнее». Попытка навести порядок в используемой технологии и методах привела к формированию некой системы теоретических, методологических и аксиологических установок, принятых в качестве образца решения научных задач и разделяемых всеми членами научного сообщества исторически  называемой парадигмой [10]. Как следствие, преподавание программирования как составляющей информатики начало сводиться к изучению совокупности идей и понятий, формирующих стиль написания программ с учетом набора инструментов программиста (языком программирования и используемыми библиотеками) в терминах логики алгоритма программы. Все это в конечном итоге получило название парадигм программирования [11].

В литературе обсуждается множество вариантов парадигм программирования. Статья [12] приводит результаты исследований отличий между интерпретируемым и компилируемым исполнением средств автоматизации программирования. В работе [13] отмечается существование парадигм императивного и декларативного программирования, а также еще целого ряда парадигм: процедурной, структурной, объектно-ориентированной, функциональной, продукционной (логической), сентенциальной, событийной, автоматной, распределенной (параллельной) и аспектно-ориентированной. Н. В. Шилов [14] указывает на существование языков последовательного императивного программирования, параллельного, декларативного (функционального), логического и объектно-ориентированного программирования. Императивная парадигма основывается на технологии решения задачи программирования в рамках классической структуры аппаратных средств Джона фон Неймана. Она предусматривает разработку последовательности действий процессора за счет использования компилятора типовых конструкций в виде последовательностей, ветвлений и циклов. Декларативная парадигма использует механизм вызова функций и, возможно, прерываний и предполагает объявление некой цели, достигаемой за счет подключения к программному уже готовых библиотечных программ. Как справедливо отмечает Ю. И. Бродский, императивная парадигма предназначена для создания «алгоритмов узнавания того, что мы не знаем непосредственно, но хотим и умеем (считаем, что умеем) узнавать» в то время как декларативная «естественна для описания наших знаний… того, что мы знаем наверняка» [15]. Как следствие, мы не можем отказаться от обучения ни первой, ни второй.

Параллельная парадигма связана с развитием аппаратной базы. «Методы автоматического распараллеливания программ способны обеспечить значительное ускорение вычислений, … сводимых к комплексу независимых процессов обработки элементов векторов» [16]. Как следствие, возникает целый комплекс самостоятельных педагогических задач [17]. Их решение во многом связано со сложившимися традициями в области программирования и требует отдельного изучения.

Список обсуждаемых парадигм программирования можно продолжить, однако очевидно, что большинство авторов выделяют императивное, декларативное и параллельное программирование. Л. В. Городняя утверждает, что в образовательной среде принято выделение в качестве фундаментальных парадигм «функционального, параллельного и императивно-процедурного программирования, а логическое и объектно-ориентированное относят к дополнительным парадигмам, преподавание которых обременено необходимостью знания некоторых предметных областей» [18]. К сожалению, устоявшегося коллективного мнения по этому вопросу нет. В то время изобилие парадигм программирования приводит и к многообразию языков. В связи с этим, возникает простой вопрос: а чему надо учить будущих программистов?

Описанная ситуация заставляет задуматься о классификации парадигм программирования для отбора содержания обучения по конкретным направлениям подготовки с учетом того, что, как указывают многие авторы, современные языки могут поддерживать несколько парадигм [19]. Перечисленные выше парадигмы могут рассматриваться как самостоятельные (например, параллельная), либо как дочерние по отношению к двум базовым. Интерес к этому вопросу подогревает существующее многообразие языков программирования и все возрастающая сложность декомпозиции создаваемых программных продуктов.

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

stepanov-1

Рис. 1 – Предлагаемая классификация парадигм программирования

 

Литература:

1.     Дородницын, А. А. Информатика: предмет и задачи / А. А. Дородницын // в кн. Становление информатики, М.: Наука, 1986.

2.     Ершов, А. П. Информатика: предмет и понятие / А. П. Ершов // в кн. Становление информатики, М.: Наука, 1986.

3.     Эволюция школьной программы по информатике. Хабр. 02.09.2013. [В Интернете]. https://habr.com/ru/company/intel/blog/191674/ [Дата обращения: 21.12.2022].

4.     Кушниренко, А. Г. Основы информатики и вычислительной техники / А. Г. Кушниренко, Г. В. Лебедев, Р. А. Сворень // Проб. учеб. для сред. учеб. заведений, М.: Просвещение, 1990, 224 с.

5.     Эволюция школьного компьютера. Часть первая, историческая. Хабр, 05.09.2012. [В Интернете]. https://habr.com/ru/company/intel/blog/150837/. [Дата обращения: 21.12.2022].

6.     Заболотский, В. П. Информатика как предмет обучения в высшей школе / В. П. Заболотский, А. Г. Степанов, Р. М. Юсупов // Труды СПИИРАН. – 2004. – Т. 1. – № 2. – С. 316-347.

7.     Степанов, А. Г. Объектно-ориентированный подход к отбору содержания обучения информатике / А. Г. Степанов. – СПб.: Издательство "Политехника", 2005. – 286 с.

8.     Колин, К. К. Информатика как фундаментальная наука: проблемы и перспективы становления нового научного направления / К. К. Колин // Вестник Челябинской государственной академии культуры и искусств. – 2007. – № 1(11). – С. 4-14.

9.     Макарова, Н. В. Информатика в системе непрерывного образования / Н. В. Макарова, А. Г. Степанов. – СПб.: Издательство "Политехника", 2005. – 338 с.

10.  Новейший философский словарь: 3-е изд., исправл., Мн.: Книжный Дом, 2003. – 1280 с.

11.  Бизнес. Толковый словарь. Под общей редакцией: д.э.н. Осадчая, И. М., М.: "ИНФРА-М", Издательство "Весь Мир", 1998.

12.  Столяров, А. В. Чистая компиляция как парадигма программирования / А. В. Столяров, О. Г. Французов, А. С. Аникина // Труды Института системного программирования РАН. – 2018. – Т. 30. – № 2. – С. 7-24.

13.  Неклюдова, С. А. Парадигмы программирования как инструменты разработчика программных систем / С. А. Неклюдова, А. Р. Балса // Информационные технологии и системы: управление, экономика, транспорт, право. – 2014. – № 1(12). – С. 27-34.

14.  Шилов, Н. В. Заметки о трёх парадигмах программирования / Н. В. Шилов // Компьютерные инструменты в образовании. – 2010. – № 2. – С. 24-37.

15.  Бродский, Ю. И. Методы декомпозиции в программировании имитационных моделей сложных систем / Ю. И. Бродский // Моделирование, декомпозиция и оптимизация сложных динамических процессов. – 2012. – Т. 27. – № 1(27). – С. 54-79.

16.  Гордняя, Л. В. Парадигмы программирования. Часть 4: Параллельное программирование 2015. [В Интернете]. https://www.iis.nsk.su/files/preprints/gorodnyaya_175.pdf [Дата обращения: 21.12.2022].

17.  Воеводин, В. В. Параллельные вычисления / В. В. Воеводин, Вл. В. Воеводин, СПб.: БХВ-Петербург, 2002, 608 с.

18.  Городняя, Л. В. От трудно решаемых проблем к парадигмам программирования / Л. В. Городняя // Информационные и математические технологии в науке и управлении. – 2021. – № 1(21). – С. 94-109.

19.  Городняя, Л. В. Систематизации парадигм программирования по приоритетам принятия решений / Л. В. Городняя // Электронные библиотеки. – 2020. – Т. 23. – № 4. – С. 666-696.

комментарии: