"Парадигмы программирования", 2023, вводная лекция
Эфир текущей лекции получился неудачным — картинка зависла
Что такое «программирование»?
Алгоритм — «это когда»
Алгоритм — «это когда» (∃ только операциональное определение)
- формализована задача (класс задач)
- формализованы однозначно интерпретируемые действия (правила, инструкции и т. п.) при решении задач
- формализован исполнитель этих действий:
- порядок (не обязательно «последовательность») исполнения,
- представление объектов из предметной области задачи
- и т. п.
- есть конечная запись действий (программа),
- приводящая к решению задачи за конечное число действий исполнителя
- для одной и той же задачи решение всегда одинаковое
Алгоритмически полные формализмы
Примеры:
Рекурсивная функция (теория вычислимости)
TODO онлайновая версия?
Примеры и учебники по SWI Prolog
- …
Тезис Чёрча
⇒ Вещественных чисел ∄
Сверхтьюринговые вычисления — хайп или прогноз?
Требования к алгоритмически полной системе (нечёткие)
- Соответствие операциональному определению алгоритма
+ Аллегируемые объекты
- + Действия, обусловленные свойствами объектов
Даже про эти нечёткие «требования» мы не знаем, обязательны они или нет.
Эквивалентность какой-либо актуальной алгоритмически полной системе
…ещё более строгое ограничение
Следствие: отсутствие концептуальных определений у общих терминов
Программа — это формальная запись алгоритма (того, у чего нет концептуального определения)
Программирование — практическая актуализация понятия «программа»
Парадигма программирования — термин тертьего уровня из той же пирамидки
Что такое «парадигма программирования»?
Конкретные направления подходов, правил и дисциплины разработки часто образуют некоторую достаточно отдельные, не всегда хорошо сосуществующие системы.
По аналогии с научной парадигмой их называют «парадигмами»
Нечто вроде определения: Парадигма программирования: дисциплина построения и актуализации алгоритмически полных формализмов.
- Как минимум ещё три определения
- Совокупность идей и понятий, определяющих стиль написания компьютерных программ
- «Такой способ думать»
Формализация исполнителя, задания и аллегирования объектов, порядка и обусловливания действий и удобные для такого формализма практики
- ⇒ Если аллегирование и обусловливание в ЯП похожи, скорее всего, они реализуют одну и ту же парадигму
- ⇒ Большинство современных ЯП мультипарадигмальны
Конкретнее? А конкретика всегда разная!
- Где в «требованиях» циклы?
Нужна ли последовательность выполнения инструкций?
- Нужен ли инструмент моделирования/абстракции произвольных данных (спойлер: нет)
Многие вопросы подразумевают несколько вариантов ответа, различные для разных парадигм:
- Существуют ли объекты, когда действия не выполняются?
- «Вычислитель» — это конкретная ЭВМ или что-то совсем иное?
- При повторном использовании алгоритма выполняется тот же самый код или другой?
- …
О чём будет этот курс?
Нет никакого конечного списка парадигм, а тем более единого критерия, который бы позволил составить такой список
- Парадигмы могут пересекаться, быть реализованы частично и т. п.
- Устоявшиеся парадигмы живы потому, что эффективно решают некоторые классы задач
- Языки программирования, как правило, хорошо отвечают не более, чем одной парадигме
- хотя зачастую имеют инструментарий для другой
- ⇒ Будем коротко изучать наиболее характерные некоторые ЯП, и как на них думать
- В числе прочего — ООП как основу для парадигмального сдвига
- …
- Процедурное окостенение алгоритмического мышления как недостаток современной программистской культуры
Бонус: о чём этот курс не будет
- Языки программирования с интересным/эффективным «способом думать», принадлежащие классическим парадигмам
Некоторые подходы, традиционно считающиеся парадигмами (например, событийно-ориентированное программирование), трудно отыскать в чистом виде
- (вселенная велика)…