Парадигмы в мышлении программиста
Парадигмы — различные подходы человека к осмыслению одного и того же явления.
Статья Роберта Флойда 1978 г. о парадигмах программирования здесь.
В отличие от парадигм по Томасу Куну в программировании происходит расширение, а не исключение парадигм.
Выступление Дейкстры 1972 г. «Смиренный программист» о влиянии инструментов на мышление.
Во многом стиль мышления определяется языком программирования:
— Императивное программирование (или в узком смысле процедурное) — «фоннеймановская» (Паскаль, Си, Бейсик) — концепция программы, как набора указаний подлежащих исполнению («императив» — «приказ») центральным процессором или интерпретатором. Самая главная особенность императивного программирования — присваивание.
Про «фоннеймановскую» архитектуру см. выступление Джона Бэкуса в 1977 «Можно ли освободить программирование от стиля фон Неймана?».
К императивным языкам относятся командно-скриптовые языки, но они не «фоннеймановские».
— Функциональное программирование (язык Haskell) — полная противоположность императивного. В основе лежат функции — «объекты первого класса», функции «чистые».
— Декларативное программирование (или более узко — логическое) — программы формируются в виде набора логических правил, описывающих некоторую предметную область, а исполнение программы состоит в попытке доказать утверждение (язык Пролог). Язык SQL относится к декларативным, но не к логическим.
— Объектно-ориентированное программирование (языки имеющие ООП надстройку: C++, Джава, С#, Go), см. Забытая история ООП, Алан Кэй, история SmallTalk. Данные в программе представляются в виде объектов — «черных ящиков». Все, что можно сделать с объектом — послать ему сообщение и получить ответ. В ООП инкапсуляция используется на уровне отдельных объектов. Класс — описание внутреннего устройства объекта.
Существуют «универсальные» парадигмы:
— «все есть поток байтов» в UNIX-way;
— «каждая программа должна решать одну задачу, и решать ее хорошо»;
— «все есть текст»;
— событийно-ориентированный способ построения программ;
— автоматное программирование (задача про лифт);
— параллельное программирование;
— разделяемые данные;
— компиляция и интерпретация;
— рекурсия;
— «побочный эффект».
Список использованных источников:
- Столяров А. В. «Программирование: введение в профессию» 3-ий том, МАКС Пресс (Москва), 2021 г.