Какие книги почитать по функциональному программированию?

Есть необходимость познакомиться с функциональной парадигмой для расширения кругозора. Конкретной цели изучить какой то язык нет, просто научиться писать код в функциональном стиле, понять общие принципы, поэтому, какой язык посоветуете для того кто вообще не шарит в функ.парадигме, с какого лучше начать?
С каких книг на русском желательно стоит начать знакомство с функциональным программированием?
Мельком слышал только об Erlang и Haskell.
  • Вопрос задан
  • 7688 просмотров
Пригласить эксперта
Ответы на вопрос 7
sergey-gornostaev
@sergey-gornostaev Куратор тега Функциональное программирование
Седой и строгий
Восприятие языка - это вопрос индивидуальный. То, что далось легко мне, может показаться сложным вам. И наоборот. Но личным опытом поделиться могу:

У Haskell есть веское, на мой взгляд, преимущество - программы компилируются в бинарники. А минус в том, что я никогда не слышал о сколько-нибудь значимых случаях реального применения Haskell. Для восприятия он мне показался очень тяжёлым, литературу по нему можно использовать как снотворное.

Самой простой для изучения мне показалась Scala. Мультипарадигменность языка обеспечивает более лёгкое вхождение из императивного стиля программирования. Есть замечательный учебник "Scala для нетерпеливых" Кея Хорстманна. К тому же, вакансии на scala-программистов есть даже в РФ. Минусом для меня послужила как раз мультипарадигменность. Нет вызова, нет настоящей мозголомки, способствующей перекраиванию мышления.

Erlang интересный, чисто функциональный, широко применяются. Но чувствуется некоторая незаконченность языка и отовсюду выпирает телекоммуникационное наследие. Есть неплохой учебник на русском Чезарини и Томпсона "Программирование в Erlang". Плюс, сейчас появился Elixir. Слышал, что он хорош и, что в нём решили все проблемы Erlang, но сам не щупал.

Я в результате остановился на Clojure. Кложа сложная, но она реально учит думать по-новому. По ней много книг. В том числе есть на русском - "Программирование на Clojure" Эмерика. Хорошая документация, большое и дружелюбное сообщество. В реальном мире применяется чаще, чем Haskell, но реже Scala или Erlang.
Ответ написан
Начинать изучение функциональщины, я считаю, стоит с Haskell. Функциональный код можно писать и на Scala, и даже на JS, но Haskell с точки зрения изучения ФП хорош тем, что он навязывает функциональный стиль, так что не будет соблазна решить задачу в привычном императивном стиле.

Начать можно с лекций Дениса Москвина по лямбда-исчислению:

  1. https://youtu.be/7BPQ-gpXKt4
  2. https://youtu.be/nyulPOcDLGM
  3. https://youtu.be/S-mqZrmUUqU


Конкретно по Haskell могу посоветовать книгу Антона Холомьёва.
Ответ написан
c3gdlk
@c3gdlk
Ментор в http://rubyboost.ru/
Сам год назад задавался подобным вопросом, книги прочел по эликсиру, эрлангу, окамлу и хаскелю. И только в книге по хаскелю первычной целью было объяснить функциональный подход, и только потом язык. Очень легко читается - https://www.ozon.ru/context/detail/id/8696277/
Ответ написан
Комментировать
begemot_sun
@begemot_sun
Программист в душе.
Касаемо Эрланга.

Изучай эрланг во имя добра. Дмкпресс.

Для вводного достаточно.

Что касается эрланга и хаскеля - это примерно как пхп и сиплюсплюс в обычном мире. Выбирайте что вам ближе.
Ответ написан
Комментировать
Skellig
@Skellig
Fratercula arctica
Как варианты:
  1. Scheme, по классической книге Структура и Интерпретация Компьютерных Программ
  2. JavaScript, по книге Секреты JavaScript ниндзя (только обязательно 2-е издание, оно как раз недавно вышло на русском)
Ответ написан
@AlexSku
не буду отвечать из-за модератора
Есть курс Дмитрия Сошникова на Интуите. Хотя он голосует за F#, но мне больше понравился Haskell.
Ответ написан
Комментировать
@potan
Функциональный программист
Для полноценного изучения надо ничинать с Haskell (или *ML, но по ним и информации меньше, и не все там так просто, как может показаться).
Если просто познакомиться и есть опыт фронтенда, то можно начать с ELM.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы