Функциональное программирование за 40 минут • Расс Олсен • GOTO 2018

YOUTUBE · 29.11.2025 08:20

Ключевые темы и таймкоды

Введение в функциональное программирование

0:15
  • Рус Олсен рассказывает о своем опыте в языках программирования и функциональном программировании.
  • Он подчеркивает, что функциональное программирование часто мистифицируется и переоценивается.
  • Олсен обещает объяснить, что функциональное программирование - это простая идея, и он будет говорить с точки зрения программиста-замыкателя.

Основные темы выступления

1:50
  • Олсен планирует обсудить три основные темы: что такое функциональное программирование, каково быть функциональным программистом и работает ли это.
  • Он подчеркивает, что его цель - объяснить функциональное программирование для обычных программистов, которые хотят писать приложения и библиотеки.

Забудьте все, что вы знаете о программировании

2:56
  • Олсен критикует подход, который предлагает забыть все, что вы знаете о программировании, при переходе на функциональное программирование.
  • Он утверждает, что функциональное программирование - это рефакторинг, а не отказ от всех знаний о программировании.

Рефакторинг и редизайн

4:41
  • Олсен объясняет, что функциональное программирование помогает реорганизовать существующие системы, а не создавать новые с нуля.
  • Он приводит пример с бухгалтерским приложением, где рефакторинг помогает улучшить систему, сохраняя работающие части и добавляя новые.

Проблемы объектно-ориентированного программирования

8:20
  • Олсен обсуждает, что объектно-ориентированное программирование может стать слишком запутанным и требует рефакторинга.
  • Он приводит примеры из Java и Ruby, где объектно-ориентированные технологии могут быть сложными и запутанными.

Новая парадигма программирования

10:54
  • Олсен утверждает, что для улучшения программирования нужна новая парадигма, и предлагает обратиться к математике.
  • Он подчеркивает, что математики сталкиваются с теми же проблемами, что и разработчики, и что их подходы могут быть полезны для улучшения программирования.

Математические принципы

12:23
  • Книга "Математические принципы" 1900-х годов пытается вывести всю математику из простых принципов.
  • Книга содержит множество абстрактных утверждений, но в середине страницы доказывает, что 1+1=2.
  • Математики используют абстракции для достижения целей, как в этом примере.

Функции в математике и программировании

13:49
  • Математические функции отличаются от функций в программировании.
  • Математические функции всегда дают одинаковый результат при одинаковых входных данных.
  • В программировании функции могут изменять данные и выполнять побочные эффекты.

Чистые функции

16:22
  • Чистые функции в программировании следуют правилам, чтобы облегчить написание и понимание программ.
  • Они не изменяют данные и производят только результат.
  • Это помогает избежать побочных эффектов и упрощает понимание кода.

Неизменяемые структуры данных

19:08
  • В большинстве языков программирования структуры данных изменяемы, что создает проблемы.
  • Решение - сделать структуры данных неизменяемыми, что предотвращает изменение данных.
  • Это позволяет избежать необходимости просматривать весь код для понимания изменений.

Постоянные структуры данных

22:07
  • Постоянные структуры данных неизменяемы и поддерживают операцию копирования при изменении.
  • Они позволяют эффективно изменять данные без необходимости копировать большие объемы.
  • Пример: массив из 27 элементов может быть реализован как дерево, что позволяет изменять данные без копирования всех элементов.

Неизменяемые структуры данных

24:51
  • Решение проблемы неизменности с использованием коэффициента ветвления 32.
  • Дерево из трех элементов и 32 узлов может содержать более миллиона элементов.
  • Неизменяемые структуры данных обеспечивают эффективность и простоту.

Функциональный мир

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

Мост в реальный мир

27:03
  • Необходимость перекинуть мостик из функционального мира в реальный.
  • Проблема изменяемого состояния в функциональном мире.
  • Использование атомов для представления изменяемого состояния.

Атомы и их обновление

28:34
  • Атомы как контейнер для изменяемого состояния.
  • Обновление атома через добавление функции.
  • Атомы обеспечивают мост между функциональным и реальным миром.

Проблемы с потоками

29:51
  • Проблема одновременного обновления атома в разных потоках.
  • Атомы обрабатывают коллизии и запускают функции повторно.
  • Атомы контролируют побочные эффекты, ограничивая их обновлением.

Очереди и агенты

31:43
  • Использование очередей для управления побочными эффектами.
  • Агенты как мост в функциональный мир, выполняющие функции последовательно.
  • Функциональное программирование включает неизменяемые структуры данных и функции.

Программирование в функциональном стиле

33:32
  • Функциональное программирование не является волшебством.
  • Проблемы с ошибками и избыточным кодом остаются.
  • Неизменяемые структуры данных устраняют проблемы с потоками.

Правила программирования

36:19
  • Программирование в функциональном стиле требует соблюдения правил.
  • Неизменяемые структуры данных могут казаться ограничивающими.
  • Постепенное привыкание к правилам помогает создавать более совершенные программы.

Функциональное программирование

36:51
  • Функциональное программирование требует соблюдения правил, но со временем становится легче понимать код.
  • Это уменьшает трение между разработчиком и конечным результатом.
  • Пример с ездой на велосипеде: правила помогают достигать целей.

Библиотека Pedestal

37:51
  • Pedestal - это набор библиотек, созданный компанией Cognitech.
  • Библиотека широко используется в мире закрытых приложений.
  • Pedestal помогает анализировать параметры, перенаправлять запросы и подтверждать подлинность.

Структура Pedestal

38:16
  • Pedestal содержит 18,706 строк кода, что больше, чем в большинстве приложений.
  • В библиотеке 28 протоколов, 8 мостов с внешним миром, 9 типов записей и 1 мультиметрический метод.
  • Pedestal состоит в основном из функций и интерфейсов.

Функциональное программирование в действии

39:58
  • Функциональное программирование требует написания функций большую часть времени.
  • Это может быть скучно, но позволяет делать одно и то же снова и снова.
  • Функциональное программирование - это руководство для работающего программиста.