27 października 2009

W świat programowania funkcyjnego na JVM z "Programming Clojure" od The Pragmatic Programmers

Jesienna aura idealnie sprzyja zgłębianiu wiedzy przez lekturę książek. Tym razem padło na Programming Clojure Stuarta Halloway'a (The Pragmatic Programmers, Maj 2009).

Po 2 tygodniach naginania mojego obiektowo-imperatywnego umysłu do myślenia funkcyjnego przebrnąłem w pocie czoła przez 300 stron o Clojure. Początkowo nie mogłem się w ogóle odnaleźć. Wszechobecne nawiasy były do strawienia, ba nawet wydały mi się przyjazne jak średniki, czy jawne określanie typów w Javie. Po prostu składnia i tyle. Kwestia gustu, czy się ją lubi, czy nie. Co mnie jednak najbardziej zmęczyło (i to w pełnym tego słowa znaczeniu), to myślenie w kategoriach struktur danych, które są...niezmienne. Dodając do tego funkcje jako obywateli pierwszej kategorii (domknięcia), makra i multimetody, a programowanie obiektowe wydaje się być zbyt rozdmuchane składniowo. Wiele z problemów programistycznych przedstawiono ciekawie w sposób funkcyjny.

Przez cały czas nie mogłem zrozumieć, dlaczego miałbym poznać kolejny język programowania, który w dodatku jest funkcyjny. Po co mi się z nim męczyć?! Mało mi było Haskella czy OCamla, które omijałem szerokim łukiem?! Teraz nie mam złudzeń, że chociażby, dla świadomości, że osoba programująca funkcyjnie w Clojure nie musi być dodatkiem do zespołu, a powinna być jego przewodnikiem. Clojure to po prostu język funkcyjny napisany w znanej nam Javie, więc w chwilach zwątpienia zawsze możemy zejść na poziom programowania obiektowego w niej lub mikstury programowania obiektowo-imperatywno-funkcyjnego z Groovy. Wszystko zależy od zdrowego rozsądku, gdzie i jak wkleić poszczególne elementy. Zamknięcie funkcjonalności w biblioteki wielokrotnego użycia ukrywa nam detale jaki język programowania został użyty, więc nic nie stoi na przeszkodzie, aby jednym z nich w projekcie był właśnie...Clojure.

Recenzja książki "Programming Clojure" znajduje się na moim Wiki - Book review: Programming Clojure (po angielsku ze względu na wymogi wydawnictwa w programie "Książka dla JUGa za recenzję").

Zapewne kolejne wpisy powinny choć w niewielkim stopniu przedstawić możliwości programowania funkcyjnego z Clojure, więc nie jest to ostatni raz, kiedy się z nim spotykam(y). Czy ma ktoś tyle szczęścia, aby wykorzystać jakikolwiek język funkcyjny w projekcie komercyjnym? Wszędzie wszechobecna Java, Scala, Groovy, czy może znalazłoby się, albo już znaleziono, miejsce dla Clojure? Jest strona po polsku o Clojure i trochę o programowaniu funkcyjnym można poczytać w materiale "Programowanie funkcyjne" na ważniaku. Jeśli dodać do tego, że właśnie kilka dni temu pojawiła się wtyczka Clojure Plugin do Grails można odnieść wrażenie, że obok Clojure nie można przejść obojętnie. W końcu, czego możnaby oczekiwać od Clojure w Grails, gdzie jest Groovy?! Taki temat mógłby pojawić się na spotkaniu Warszawa JUG. Kto chętny? Krzysiek? Przyjezdni mają gwarantowany wikt i opierunek :)

Dziękuję Pawłowi Stawickiemu ze szczecińskiego JUGa za kontakt z wydawnictwem "The Pragmatic Programmers", a Michałowi Januszewskiemu za wskazanie "Programming Clojure". Prawdopodobnie nie schyliłbym się po nią, gdyby nie obaj panowie. Chylę czoła za dobór repertuaru informatycznego.