"Парадигмы программирования", 2023, вводная лекция

Запись прошлого года

Что такое «программирование»?

Алгоритм — «это когда»

Алгоритм — «это когда» (∃ только операциональное определение)

  1. формализована задача (класс задач)
  2. формализованы однозначно интерпретируемые действия (правила, инструкции и т. п.) при решении задач
  3. формализован исполнитель этих действий:
    1. порядок (не обязательно «последовательность») исполнения,
    2. представление объектов из предметной области задачи
    3. и т. п.
  4. есть конечная запись действий (программа),
    1. приводящая к решению задачи за конечное число действий исполнителя
    2. для одной и той же задачи решение всегда одинаковое

Алгоритмически полные формализмы

Примеры:

Тезис Чёрча

  1. Тезис Чёрча — Тьюринга

  2. …— Дойча

    • ⇒ Вещественных чисел ∄ :D

  3. Сверхтьюринговые вычисления — хайп или прогноз?

Требования к алгоритмически полной системе (нечёткие)

  1. Соответствие операциональному определению алгоритма
  2. + Аллегируемые объекты

  3. + Действия, обусловленные свойствами объектов

Даже про эти нечёткие «требования» мы не знаем, обязательны они или нет.

  1. Эквивалентность какой-либо актуальной алгоритмически полной системе :)

…ещё более строгое ограничение

Следствие: отсутствие концептуальных определений у общих терминов

  1. Программа — это формальная запись алгоритма (того, у чего нет концептуального определения)

  2. Программирование — практическая актуализация понятия «программа»

  3. Парадигма программирования — термин тертьего уровня из той же пирамидки

Что такое «парадигма программирования»?

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

  1. По аналогии с научной парадигмой их называют «парадигмами»

  2. Нечто вроде определения: Парадигма программирования: дисциплина построения и актуализации алгоритмически полных формализмов.

  3. Как минимум ещё три определения
    • Совокупность идей и понятий, определяющих стиль написания компьютерных программ
    • «Такой способ думать»
    • Формализация исполнителя, задания и аллегирования объектов, порядка и обусловливания действий и удобные для такого формализма практики

      • ⇒ Если аллегирование и обусловливание в ЯП похожи, скорее всего, они реализуют одну и ту же парадигму
      • ⇒ Большинство современных ЯП мультипарадигмальны

Конкретнее? А конкретика всегда разная!

  1. Где в «требованиях» циклы?
  2. Нужна ли последовательность выполнения инструкций?

  3. Нужен ли инструмент моделирования/абстракции произвольных данных (спойлер: нет)

Многие вопросы подразумевают несколько вариантов ответа, различные для разных парадигм:

  1. Существуют ли объекты, когда действия не выполняются?
  2. «Вычислитель» — это конкретная ЭВМ или что-то совсем иное?
  3. При повторном использовании алгоритма выполняется тот же самый код или другой?

О чём будет этот курс?

  1. Нет никакого конечного списка парадигм, а тем более единого критерия, который бы позволил составить такой список

  2. Парадигмы могут пересекаться, быть реализованы частично и т. п.
  3. Устоявшиеся парадигмы живы потому, что эффективно решают некоторые классы задач
  4. Языки программирования, как правило, хорошо отвечают не более, чем одной парадигме
    • хотя зачастую имеют инструментарий для другой
  5. ⇒ Будем коротко изучать наиболее характерные некоторые ЯП, и как на них думать
  6. В числе прочего — ООП как основу для парадигмального сдвига
  7. Процедурное окостенение алгоритмического мышления как недостаток современной программистской культуры

Бонус: о чём этот курс не будет

LecturesCMC/AL/2023_09_04 (последним исправлял пользователь FrBrGeorge 2023-09-07 18:39:38)