Trafiając w sieci na m.in.na filmy kolegi @jarekr000000 zainteresowałem się programowaniem funkcyjnym.
Po obejrzeniu zapoznaniu się z "elementarzem" t.j. wiki, kilku poradników i obejrzeniu kilu wykładów zauważyłem, że sama koncepcja nie jest mi obca i przez lata eksperymentowania z programowaniem zupełnie nieświadomie tego typu konstrukcje gdzieś w kodzie się pojawiały. Nie były one oczywiście sformalizowane i głęboko przeplatały się z programowaniem obiektowym, strukturalnym czy proceduralnym no ale nie da się ukryć, że było to właśnie to.
Dziś widzę, że popularność tego paradygmatu znacząco wzrasta ale mam także poważne obawy co do jej praktycznego stosowania. Teoria poparta prostymi przykładami na wykładach wygląda zawsze fajnie ale co z praktyką?
Teraz dygresja... Zanim nauczyłem się programować obiektowo przechodziłem przez programowanie klasyczne w BASIC i z wykorzystaniem kluczowej instrukcji GO TO, później w Pascalu nauczyłem się programować proceduralnie i strukturalnie gdzieś na początku studiów doszło programowanie obiektowe. Dziś mając dość spore doświadczenie w tych wszystkich sposobach programowania zaczynam poznawać kolejne zwane "funkcyjnym". Patrząc wstecz, przechodząc między kolejnymi metodami dostawałem nowe narzędzia pozwalające na łatwe poruszanie się w abstrakcjach coraz wyższego poziomu i to oczywiście jest dobre. Z drugiej zaś strony przegięcie z chęcią bycia "skrajnie formalnym" często nie miało praktycznego uzasadnienia i czasem łatwiej było napisać obiekt, który w środku był małym programem strukturalnym z "nie świrując" w kierunku usilnego pisania klas do obsługi plików, bazy danych, I/O itp...
Dziś niemal wszystkie moje większe programy są różnych form programowania jednak z naciskiem na obiektowość. Nie boję się jednak robić wyjątków gdy jest to faktyczne uzasadnione ułatwienie.
No i teraz pytania dotyczące praktyki:
-
Gdzie znaleźć przykłady "większych" programów napisanych z zastosowaniem tego paradygmatu? Proste przykłady są piękne ale chciałbym zobaczyć starcie tego typu programowania np. z bazą danych, plikami, HTTP.
-
Jak głęboko zakorzeniać funkcyjność w swoim programie? Na jakim poziomie warto to stosować? Czy jedynie jako odgórną koncepcję czy jednak faktyczną implementację "wszystkiego"?
Po dwóch dniach zgłębiania się w tematykę i próby przełożenia paradygmatu na praktyczną aplikację (chociażby aplikacja p.t. faktura + klienci) intuicja podpowiada mi, że rozsądnym jest jednak tworzyć klasy, w których wewnątrz już faktycznie trzymamy się logiki funkcyjnej ( do momentu spotkania z I/O).
p.s.
No na koniec zupełnie luźna refleksja... Programowanie funkcyjne wydaje mi się być doskonałą formą przejściową w drodze do automatyzacji pisania programów przez sztuczne inteligencje lub algorytmy ewolucyjne... Więc zastanówmy się czy popularyzując ten temat jako programiści sami sobie nie kopiemy grobu :-)