26 sierpnia 2010

W pogoni za Clojure - w końcu się uda zastosować, tylko trochę jeszcze potrwa

Logo Clojure
Połowa dnia, a mnie od zachwytów nt. Clojure już boli głowa. Mówią, że dobrze jest poznać nowy język programowania, szczególnie jeśli wymaga zmiany myślenia i w przypadku mojego doświadczenia imperatywno-obiektowego, Clojure jako język funkcyjny (aczkolwiek jeszcze nie powiedziałbym, że i funkcjonalny) wpasowuje się idealnie. Mówią również, że jak boli, to działa, więc zaczynam odczuwać trudności podchodzenia pod górę, którą zwą Clojure.

Wczoraj do zbioru narzędzi, które należałoby rozpracować doszły conjure z hiccup oraz sandbar. Przypomnę, że krążę wokół zastosowania Clojure w aplikacjach webowych, których wokół mnie pełno i doświadczenia z korporacyjną Javą (jak zwę Java EE) nie pozwalają mi sądzić, że mogą być jeszcze inne rodzaje, jak niewebowe. Zauważam przy tym, że może niekoniecznie należałoby stosować Clojure bezpośrednio w aplikacjach webowych, a jedynie po stronie serwera, gdzieś do przetwarzania dużych ilości danych (przetwarzanie wsadowe?) w środowisku rozproszonym. Na chwilę obecną większość bibliotek/rozwiązań dla Clojure tworzonych jest na githubie, co może przyprawić o lekki ból głowy osoby przyzwyczajone do korzystania z wersji stabilnych/produkcyjnych projektów, które doczekały się co najmniej swojej własnej strony webowej. Ja do takich należę, więc korzystanie z rozwiązań z githuba traktuję raczej hobbystycznie w celach poznawczych samego Clojure, a nie ich konkretnie. Na razie działa, pewnie głównie dlatego, że są one stosunkowo małych rozmiarów, przez co niezwykle specjalizowane. Łatwo rozczytać się w kodzie, zrozumieć jego istotę i potencjalne zastosowanie w kilka minut/godzin, a to zdecydowanie mi wystarczy.

Kontynuując moje poznawanie świata funkcyjnego dzień zacząłem od przeglądania dyskusji na grupie dyskusyjnej clojure, skąd trafiłem na temat Multiversion concurrency control. Skąd mnie tam poniosło?! Okazuje się, że Clojure STM to nic innego jak właśnie MVCC, w którym każda transakcja ma swój zrzut aktualny repozytorium danych. Świadomię napisałem "repozytorium danych", aby oddzielić temat od baz danych, które również z tego rozwiązania korzystają. I tu mnie olśniło. Właśnie MVCC sprawia, że Clojure STM to nic innego jak...baza danych. Okazuje się, że nie tylko baza danych (w sensie relacyjnej/obiektowej bazy danych), ale również Subversion opiera się na MVCC. Czyż to nie odkrywcze, jak to powiedzieliby nasi znajomi "zza wielkiego bajora" - mind-blowing (jeśli nie dla Clojure, czy wynurzeń, chociaż czytelnik pozna nowe słownictwo angielskie czytając moje wpisy :)).

Zaraz mnie wzięło na rozgłaszanie tych odkryć i posłałem kilka twittów na moim kanale @jaceklaskowski. Po chwili otrzymałem odpowiedź od @antoniovieiro:

@jaceklaskowski Yep Software Transactional Memory is similar to database transactions (with commits and rollbacks) http://tinyurl.com/dyecjo

A tam Papers and presentations about transactional memory in Haskell. Od Microsoft? A bodajże dzisiaj czytałem o zarzuceniu STM przez niego w jakimś projekcie?! F#?!

Bez względu na (bez?)sensowność rozgłaśniania swoich prywatnych poczynań na twitterze, widać, że często staje się źródłem dotarcia do ciekawych ludzi, których w przeciwnym przypadku nie byłoby nam dane spotkać (nawet wirtualnie). W ten sposób przekonuję swoich studentów podczas praktyk w IBMie, aby nagłaśniali swoje problemy - ja śledzę ich postępy, a oni otrzymują rozwiązania ze świata, dając się jednocześnie poznać jako specjaliści w danym obszarze.

Skoro przy IBM, a wciąż przy Clojure, trafiła mi się dzisiaj kolejna ciekawa sytuacja - spotkałem studenta z PJWSTK, który jest na praktykach w IBM i który również rozpoznaje to wszystko, co ja obecnie poznaję - Clojure et al. - i korzysta w projekcie przetwarzającym...rozkład jazdy autobusów w Warszawie (czy podobnie, ale sens jest ten sam). Kiedy zacząłem rozmawiać z kolegą z zespołu o MVCC i DB2, ów student (na razie zachowam jego dane na prywatny użytek) okazał się równie zainteresowany i znający tematykę, że pozwolił sobie...siebie poznać! W ten sposób mam namiary na kolegę z Warszawy zajmującego się Clojure i poznający jego zastosowanie w projektach. Możnaby powiedzieć, jaki ten świat mały, ale brzmi to tak banalnie.

W trakcie rozczytywania się w artykułach dotyczących Clojure w projektach, trafiłem na artykuł Clojure and Rails - the Secret Sauce Behind FlightCaster, w którym pojawiają się rozwiązania do tej pory nieprzystające do rozwiązań, którymi się zajmowałem. Innymi słowy, nie było mi dane ich poznać, bo za nowe, zbyt przewracające w głowie i przez to chwilowo na rozpoznaniu w zespołach projektowych, które taką aktywność w ogóle wliczają w swoją działalność (chciałbym powiedzieć, że robią tak wszystkie, ale wiem(y), jak jest, niestety). Nawiązuję do Hadoop, Cascading i Cloudera. Wygląda mi na to, że Clojure i świat języków funkcyjnych wymaga/wymusza stosowanie innych rozwiązań. Jak to idzie? Ach, już mam: "if all you have is a hammer, everything looks like a nail". W końcu nie samym OO człowiek powinien się delektować i odrobina PF nikomu jeszcze nie zaszkodziła (a tym, którym tak, wliczamy po cichu do wyjątków, ale nie wyjątkowych).

Oby poznawanie nowego nie przyprawiało Was o taki mętlik w głowie, jak mnie nagina Clojure. Nie życzę nikomu takiego bałaganu. Może się przydać How to Learn a Programming Language, a przede wszystkim How To Become A Hacker, w którym można przeczytać:

LISP is worth learning for a different reason — the profound enlightenment experience you will have when you finally get it. That experience will make you a better programmer for the rest of your days, even if you never actually use LISP itself a lot.

It's best, actually, to learn all five of Python, C/C++, Java, Perl, and LISP. Besides being the most important hacking languages, they represent very different approaches to programming, and each will educate you in valuable ways.


Ciekawym, jak Wam przychodzi poznawanie nowego. I nie pytam o nowsze, ale całkowicie nowe, odmienne. Da się? Ile trwa? Bolało? Warto było? Na rozpoczynający się sezon spotkań Warszawa JUG możecie liczyć na kilka prezentów funkcyjnych ode mnie.

1 komentarz:

  1. Zgłodniałem! Czas zaspokoić pragnienia :) Wyposażyłem się w Clojure in Action Manninga z programu MEAP :) http://www.manning.com/rathore/

    Większość rozdziałów jest już dostępnych!

    Jeszcze moja kolejne pragnienie to Play! Framework :)
    http://www.playframework.org/

    OdpowiedzUsuń