С чего начать изучать функциональое программирование джависту?
Около двух лет работаю разработчиком на Java, несколько месяцев назад начал использовать восьмерку. Недавно посмотрел лекцию по введению в ФП, понравился стиль мышления. Хотелось бы познакомиться с ним поближе, хотя не думаю, что он может прямо сейчас пригодиться в работе.
Как вы считаете, какой язык лучше всего подошел бы для знакомства? С более глубокими особенностями инфраструктуры (вроде вопросов о том как работает gc в джаве) разбираться не хочется, цель именно в том чтобы научиться мыслить в функциональном стиле.
Еще будет очень хорошо если подскажите курсы на русском или английском языках по предложенному языку - чтобы выполнение заданий было привязано к недельному плану. Но это опциональная хотелка.
Спасибо за ответы!
Ivan Sokolov: соглашусь. С ФП познакомился впервые в Scala. Но вся русскоязычная литература не углубляется в ФП, а дается как должное. Библиотека scalaz это такой костыль, пытающийся эмулировать тайп-классы через неявные параметры. Изучая ее теряется фокус с самой сути. Приходится бороться с синтаксисом. В scala великолепная система типов, но ужасный синтаксис для описания отношений.
Kotlin я не трогал, лишь видел. Он позиционируется как более простой язык, но такой же мощный. И тут кроется та же проблема - поверхностное изучение ФП. Т.е. фактически рассказывается как пользоваться, но не затрагивая основную базу.
И вот лишь познакомившись с Haskell, я разложил более-менее знания по полочкам. Начал с Липовача. Hello World по-моему в седьмой главе был
Ivan Sokolov: как я понял из того что я читал, одной из особенностей kotlin является null-safety т.е. если ссылка может указывать на null, то это нужно специально указывать, а по умолчанию нет.
Я как-то начал читать документацию по Котлину. В качестве языка-альтернативы джава его плюсы - jvm, привычная ide, приятно оформленная дока. Но я не уверен, что смогу на его примере понять само ФП, без привязки к ОП
Я бы посоветовал начать с https://de.wikipedia.org/wiki/Scheme
и racket-lang.org от туда не долеко до Clojure.
Москвин и Haskell хороши, ну мне пошли не сразу. Возможно субьективно, возможно не сразу материал потянул.
Как раз сам недавно начал увлекаться ФП. Курс по ФП от создателя Scala. Хорошая книга по ФП.
В курсе и книге используется Scala, он ближе всего для джавистов. Знания самого Scala заранее не требуется.
Начать стоит с дотошного изучения механизмов ФП в самой Java. Тот же Stream API. Потом взяться за Scala. Мультипарадигменность языка облегчит вхождение. Тем более, что есть замечательная в своей простоте книга "Scala для нетерпеливых" Кея Хорстманна. А после можно будет поиграть с чисто функциональным языком Clojure, тоже работающим на всё той же привычной JVM.