Записи занятий и материалы вводного курса Университета Карнеги-Меллона (CMU) по функциональному программированию, который преподавался летом 2023 года, теперь доступны в свободном доступе.
В этом курсе рассматривается концепция компьютерных наук, которая обычно не изучается глубоко или просто включается в более широкий модуль по программированию. Курс же «15-150: Принципы функционального программирования» посвящен именно им.
И на то есть веские причины. Брэндон Ву, преподаватель курса, который сейчас работает инженером по анализу программ в Semgrep, так объясняет причины его появления:
Этот курс обычно является вторым или третьим в традиционном курсе информатики для бакалавров, что является привилегией, которой пользуются не многие другие университеты, поскольку функциональное программирование часто считается нишевой темой.
Несмотря на это, я (и CMU) считаю, что это очень важно. Дисциплинированный, ориентированный на типы, безопасный взгляд на программирование может принести огромную пользу начинающим в области компьютерных наук, и я часто слышал отзывы студентов о том, что этот курс изменил их представление о компьютерных науках в целом.
Курс состоит из 22 лекций, каждая из которых длится более часа:
- Пролог
- Эквивалентность, связывание и область применения
- Индукция и рекурсия
- Структурная индукция и хвостовая рекурсия
- Деревья
- Асимптотический анализ
- Сортировка и параллелизм
- Полиморфизм
- Функции высшего порядка
- Комбинаторы и постановка
- Стиль продолжения-прохождения
- Исключения
- Регулярные выражения
- Структуры и подписи
- Функторы
- Красно-черные деревья
- Последовательности
- Ленивое программирование
- Императивное программирование
- Компиляторы
- Анализ программ
- Финал
Лекции выложены на YouTube в плейлисте, также их можно смотреть по отдельности на основном сайте курса Брэндона, где каждая лекция сопровождается описанием изложенных концепций. Они также сопровождаются очень подробными слайдами, но, к сожалению, без привязки ко времени.
На протяжении всего курса используется функциональный язык программирования Standard ML (SML). Необычный выбор, но суть в том, что курс учит не языкам программирования, а концепциям, лежащим в их основе, и с SML легче их объяснить, потому что он не учитывает тонкости и идиомы, привнесенные остальными языками программирования, а значит, не отвлекает от первоначальной цели.
Пройдя этот курс, вы поймете, как функциональное программирование помогает улучшить нашу способность общаться как программистов — с помощью описательного, модульного и сопровождаемого кода.