Wpis z mikrobloga

#naukaprogramowania #programowanie #programowaniefunkcyjne

Miruny, ostatnio zacząlem się trochę nudzić i zamiast robić coś twórczego w technologiach, które jako tako znam chciałem się trochę oderwać i poznać coś nowego - padło na programowanie funkcyjne. Przymierzam się do F#, jako że technologie Microsoftowe mocno mi pasują (#wmoimsercutylkocsharp), ale ciężko mi znaleźć coś ciekawego uczącego tego języka poza onlineowym kursem Microsoftu a'la codecademy. Dodatkowo obawiam się, że F# jako "ten drugi" język od Microsoftu ma małe wsparcie i mało będzie do niego materiałów.

Podstawy składni itd. powiedzmy, że już z tego tutoriala poznałem, ale przydałoby mi się więcej teorii i/lub przykładowych problemów do rozwiązania (tak, żeby poznać potęgę tego podejścia, z czym to się je) - dysponuje może ktoś jakimiś ciekawymi linkami do poczytania na ten temat? Może być nawet ogólnie o programowaniu funkcyjnym (niekoniecznie F#), bo tak jak piszę - to moja pierwsza styczność z tym tematem.

Ewentualnie, jak nie F# to co polecacie poznać z #programowaniefunkcyjne?
  • 15
@asunez: Funkcyjności najlepiej uczyć się na języku czysto funkcyjnym, który niejako zmusza Cię do myślenia w tym stylu. Do tego najlepszy jest Haskell, do którego jest też mnóstwo materiałów. Na początek bardzo dobre jest to.

Żeby było jasne: broń Boże nie chcę przez to powiedzieć, że Haskell to tylko dziwaczny język do nauki funkcycjności, wręcz przeciwnie. Po prostu uważam, że lepiej od razu wskoczyć w ten paradygmat, a nie bawić
@asunez: A ja polecam Scalę :) bardzo dobre wsparcie społeczności, bardzo dobry kurs na courserze, generalnie do nauki jak znalazł :)
@achr: z kolegą robimy scala99.org -> jeszcze beta, trochę bugów których nie mamy czasu ostatnio naprawić, mało problemów itp, ale można rzucić okiem :)
@alkan: Przeglądając tag #programowaniefunkcyjne widzę, że sporo się udzielasz w temacie. Mógłbyś troszkę bardziej rozwinąć temat, dlaczego F# to "półśrodek"?

Nie chcę podważać Twojej opinii, pytam, bo może faktycznie F# to nie jest najlepszy wybór (zarówno na początek, jak i w ogóle).

@fr3ak: Wiem, że Scala jest bardzo popularna i do niej na pewno znalazłbym masę materiałów, ale trochę odrzuca mnie fakt, że to działa na JVM - nie chcę
@asunez: Ciężko mówić, że OOP wypiera FP, bo nie ma czego wypierać. FP próbuje dopiero powoli się przebijać. Nadal jest to niszowa działka, ale jest trochę ogłoszeń dla Scali. Słyszałem o jednej firmie w całości opartej na Haskellu, tworzyła bodajże efekty specjalne dla filmów. Jeśli chodzi o F# wiem tyle, że można trochę w tym podłubać w Credit Suisse we Wrocławiu.
@asunez: W żadnym wypadku nie chodziło mi o to, żeby powiedzieć, że F#/OCaml to złe języki. :) Po prostu chodzi o to, że to są języki zrobione przede wszystkim z myślą o praktyce, więc dopuszczają różne haki i sposoby pisania, które nie są funkcyjne, bo biznes to nie miejsce na elegancję, tylko efektywność*. A doświadczenie podpowiada, że jeśli się najpierw nie przestawisz na myślenie funkcyjne, to będziesz nadużywał niefunkcyjnych możliwości F#/OCamla
@alkan: Dzięki za wyjaśnienie ( ͡° ͜ʖ ͡°) W takim razie najpierw siądę do Haskella, spróbuję "zrozumieć programowanie funkcyjne" i ewentualnie wtedy wrócę (a może tak mi się Haskell spodoba, że jednak nie) do F#. Masz rację, że szkoda sobie złe nawyki wyrabiać przez możliwe hacki - trzeba chociaż wiedzieć od podszewki, jak coś powinno działać, zanim zacznie się chodzić na skróty.

@achr: O to mi
@asunez: Widzę, że wyżej pojawiła się jeszcze kwestia Scali. Więc mówiąc krótko: chodzi o to, że jeśli raz nauczysz się funkcyjności na języku czysto funkcyjnym, to potem bez najmniejszego problemu przesiądziesz się na dowolny język głównie funkcyjny. :) Ze Scali czy F# nie przejdziesz na Haskella bez problemu, ale z Haskella na Scalę czy F# - już tak.

Co do pracy - no cóż, sam chciałbym pracować w takim charakterze, ale
@alkan: jak już tak się rozpływasz nad Haskellem to polecam Idris => Haskell przy tym wymięka
Z innych języków w których można programować funkcyjnie a przypadł mi do gustu to fajnie wygląda Swift(tak, ten od jabłuszek),
@fr3ak: O Idris będę się uczył za kilka tygodni, zapisałem się na przedmiot z teorii typów, mniej więcej połowa semestru będzie o Coq/Idris. :D Sam się uczyłeś tego języka? Możesz polecić jakieś materiały?