Cześć,
Uczę się obecnie najróżniejszych zagadnień z FP w Scali z wielu źródeł, a nastepnie chciałbym wziąć się za książkę Get Programming with Haskell, która jest świetnie napisana.
Niestety ilość zwłaszcza tych bardziej zaawansowanych zagadnień w FP jest ogromna i sam już nie wiem, które są najbardziej przydatne, a które nie.
Jak dotąd, mam taką listę zagadnień z FP, które moim zdaniem bardzo przydają się do pisania dobrego biznesowego kodu:
-
Immutability: obiekty immutable itp
-
Pure functions: Pisanie funkcji bez side effectów oraz stosowanie się do zasad referentially transparent functions
-
Funkcyjne struktury danych np. pakiet immutable w Scali
-
High-order functions: unikanie imperatywnego kodu i stosowanie streamów oraz operacje: lambdy, funkcje: map(), filter(), reduce(), fold() itd
-
Pattern matching
-
Functional Error Handling: Stosowanie Option i Either zamiast wyjątków
-
Currying? Zastanwiam się na ile Currying jest tak naprawdę przydatny
-
Monoidy
-
Znajomosć generyków i różnego typu polimorifzmu: parametric/subtyping/ad-hoc polymorphism
-
Monady
-
Monady IO
-
Algebraic Data Types ?
-
Umiejętność oddzielenia kodu funkcyjnego od kodu gdzie mamy do czynienia z side effects np w I/O
Czy Waszym zdaniem warto uczyć się takich bardziej zaawansowanych zagadnień jak np. Category Theory, Kind Polymorphism, Kleisli Category itp (kiedyś @jarekr000000 wrzucał taką fajną listę tego typu zagadnień na Githubie)? Przyznam szczerze, że cięzko byłoby mi zastosować te zagadnienia w praktyce np. w Scali, bo wydają mi się mało praktyczne (może dlatego, że nie znam ich dobrze)
Co jeszcze dorzucilibyście do tej mojej listy, co może faktycznie przydać się w praktyce? ;)
Znalazłem jeszcze taką listę: https://hub.packtpub.com/a-five-level-learning-roadmap-for-functional-programmers/
scibi_9299xmarcin