Functional Miners - Programowanie Funkcyjne dla Każdego
2019-05-21 odbyło się spotkanie Functional Miners (@fun_miners) w HackerSpace Silesia (@hs_silesia) o tematyce Programowanie Funkcyjne dla Każdego. Wydarzyły się dwie prezentacje:
- Wojciech Gawroński - Functional Programming in the Wild
- Andrzej Spiess - From \x.x to Facebook - Introduction to Lambda Calculus
Wojciech Gawroński - Functional Programming in the Wild
Wojtek (@afronski) przygotował prezentację próbującą przekonać, że deklaratywne programowanie czysto funkcyjne jest lepsze od imperatywnego. Było to o tyle łatwe, że na spotkanie przyszli tylko fani programowania funkcyjnego. Dla mnie, głównym wnioskiem z prezentacji jest to, że nie należy w prezentacji umieszczać żadnych skomplikowanych definicji matematycznych, np. monad. Zwłaszcza jeśli są to pierwsze dwa slajdy. Nawet jeśli jest to tylko żart.
Pozwólcie, że powtórzę: nie należy ludziom pokazywać matematycznej definicji monady, bo uciekną.
W prezentacji Wojtek stara się odpowiedzieć na pytania:
- Dlaczego uczyć się funkcyjnych języków programowania?
- Bo jest totalnie inne od programowania imperatywnego, więc ćwiczy nasz mózg
- Bo jest przejrzystrze, więc trudniej popełnić błąd
- Z czego składa się funkcyjny język programowania?
-
Correctness - poprawność, święty graal matematyków-programistów, która miała pozwolić na automatyczne stwierdzać poprawność programu
- Immutability - niezmienność, zmienne są stałymi, referencje są finalne, wartości są niemodyfikowalne
- Referential Transparency - reguła podstawienia, wywołanie funkcji zawsze można zamienić na wartość przez nią zwracaną, nie używa się efektów ubocznych
- Advanced Type Systems - zaawansowane systemy typów, o wiele bardziej rozbudowany parametryczny polimorfizm
- Jak uczyć się funkcyjnego języka programowania?
- Warto mieć jeden mały programik, trochę większy niż Hello Wolrd i implementować go w wielu językach. Np interpreter, transpilator lub kompilator ezoterycznego języka Brainfuck
Oprócz tego Wojtek rozprawiał się z mitami na temat programowania funkcyjnego, jak np. to że zasady SOLID stosują się także do funkcji i programowania funkcyjnego i deklaratywnego.
Andrzej Spiess - From \x.x to Facebook - Introduction to Lambda Calculus
Andrzej (@ninjazoete) przygotował prezentację będącą bardzo teoretycznym i historycznym wprowadzeniem do rachunku lambda.
Najważniesze punkty, które zrozumiałem to:
- Problemowi stopu z Maszyny Turinga w rachunku lambda odpowiada problem nieredukowalnych lambd do postaci normalnej.
- Haskell jest kompilowany do HSC CORE, który składa się 26 rodzajów konstruktorów (rachunek lambda + systemu F + kowersja + parametryczny polimorfizm)
- W typowanych lambdach problem stopu nie istnieje, ale nie da się wyrazić rekurencji, więc dodaje się nowe operatory i traci się kompletność w sensie turinga.
Jeśli ktoś chciałby zobaczyć rachunek lambda w bardziej przystępnej formie, czyli interaktywnie w języku Java to polecam prezentacje Jarosława Ratajskiego (@jarek000000):
- W warszawie - WJUG #183 - Lambda Core: Hardcore - Jarosław Ratajski
- W Łodzi - Lambda Core - Hardcore - Jarek Ratajski
Najważniejsza rzecz z tego wykładu to to, że:
Wszystko to co robicie da się zrobić czysto funkcyjnie, to jest udowodnione przez Turinga
Repozytorium z kodem do analizy lambd - Lambda analysis package.
Podsumowanie
Z niecierpliwością czekam na kolejne wykłady w ramach Functional Miners (@fun_miners)
Zostaw komentarz