11 września 2012

Znalezione w skrzynce: Do czego mi Clojure?

Właśnie dostałem do skrzynki maila, który odzwierciedla większość pytań i wątpliwości, jakimi zarzucają mnie moi rozmówcy w temacie Clojure. Postanowiłem opublikować moją odpowiedź, która specjalnie nie wnosi nic nowego w temacie, ale być może zainspiruje do ciekawej dyskusji o sensowności...właśnie! Czego ta sensowność miała by dotyczyć?! Pytanie pozostawiam otarte.

> Na pikniku rzuciłeś pytanie "W jaki sposób przekonać programistów Javy do
> użycia Clojure w swoich projektach?". Poczytałem trochę na ten temat i
> jedyne co mi nie pozwala używać tego języka to to, że po prostu nie mam
> czasu na naukę nowych języków. Musisz wziąć pod uwagę to, że ja reprezentuje
> jak to powiedziałeś "żółtodziobów" (chociaż za takiego się nie uznaję). Ja
> swój czas zamierzam poświęcić na naukę technologi takich jak Spring , JPA,
> JSF,EJB, SQL itd. Są to technologie które najczęściej występują w
> ogłoszeniach o pracę i jest ich tak dużo że nie ma czasu na naukę Clojure.

Cześć XXX,

Święta racja! W zasadzie nic dodać nic ująć, ale zastanów się, ile
osób tak myśli. Sądzę, że cała masa. Właściwie nawet więcej, co
sprawia, że przebicie się na lidera w tej grupie jest zadaniem
wymagającym dużego nakładu pracy. A może by tak warto rozważyć
poświęcenie nie mniej czasu na coś odmiennego, co sprawi, że jeśli
wartościowe (podkreślam słowo "jeśli") da Ci gwarantowaną przewagę.
Czy w takim świetle Clojure wypada ciekawiej?

> -powiedział ile czasu zajmie nauka Clojure
> -powiedział jak szybko można zrobić coś co działa w Clojure
> -do czego ten język wykorzystuje się w praktyce, jakiś konkretny przypadek w
> którym Clojure jest bez cenny ( bo jak sam stwierdziłeś że przykład z
> wyświetlaniem daty nie za bardzo wszystkich przekonał)
> -zapewnił że użycie Clojure jest stabilne, można go obdarzyć zaufaniem
> To prawdopodobnie kupił bym Clojure In Action i zaczął przerabiać kolejne
> rozdziały.

Czy potrafiłbyś odpowiedzieć na te pytania, gdyby zamiast Clojure
występowało Java lub inny język programowania? Celem Clojure było
przybliżenie programowania funkcyjnego do platformy Java i wielu
przypadło to do gustu. Jak to bywa, znalazło się też wielu, którym
niekoniecznie. Trudno powiedzieć, kto ma rację, bo gdyby tak było, nie
byłoby tylu języków programowania.

Nie oczekuj od innych, że powiedzą Ci, jak masz żyć. To Twoje życie,
Twoje wybory i co dla jednego wpadką, dla innego sukcesem. Wszystko
zależy od nastawienia. Moje jest otwarte na nowe, a że udaje mi się
zwykle trafiać w ciekawe technologie/języki, nie obawiam się o własną
przyszłość znając Clojure. Na pewno poszerza horyzonty.

> Ogólnie Java jest językiem w którym można zrobić wszystko i należało by
> wskazać taką rzecz która w Javie jest za obszerna. Jakieś porównanie ile to
> trzeba się na główkować w Javie a w Clojure robi się to w prosty sposób i
> można się zająć innymi rzeczami.

Weźmy trywialne przechodzenie po liście. A teraz pomyśl, że to cały
strumień danych. Współbieżność. Zwartość kodu funkcyjnego jest nie do
przecenienia w porównaniu z obiektowym. Oba jednak mają swoje plusy i
minusy.

9 komentarzy:

  1. No to dyskutujmy. Kilka słów o moim punkcie widzenia dotyczącego nauki programowania funkcyjnego (FP):
    1) Nauka FP ma szansę być bardziej trwałą inwestycją niż nauka technologii. Technologie przemijają, starzeją się. A programowanie funkcyjne, które ma korzenie oparte o matematykę, a więc o trwały fundament, więc nauka FP nie powinna się tak łatwo zdezaktualizować.
    2) Nie znam przyszłości, ale FP ma szansę stawać się popularne bardziej z uwagi na wzrost znaczenia przetwarzania równoległego, współbieżnego.
    3) Za to nie jestem przekonany zeby Clojure był akurat najlepszym językiem do samej nauki FP, choć oczywiście to nie znaczy że nie można go do tego wykorzystywać.
    Grzegorz Balcerek

    OdpowiedzUsuń
  2. Jacku, wydaje mi się, że Twoja odpowiedź nie pomogła pytającemu. XXX pytał o konkretne przykłady lub zastosowania, które by pokazały dlaczego warto się zagłębić w ten temat. Ty zaś odpowiedziałeś ogólnikami i Twoja odpowiedź na pewno nie zachęciłaby mnie do poznania Clojure.

    Weźmy chociaż końcówkę:

    > Weźmy trywialne przechodzenie po liście. A teraz pomyśl, że to cały
    > strumień danych. Współbieżność. Zwartość kodu funkcyjnego jest nie do
    > przecenienia w porównaniu z obiektowym. Oba jednak mają swoje plusy i
    > minusy.

    Ale dlaczego? Dlaczego "Zwartość kodu funkcyjnego" jest nie do przecenienia? Argumenty! Jakie są plusy i minusy?

    Jednym słowem, brak jakichkolwiek konkretów :(

    OdpowiedzUsuń
  3. @Grzegorz, pełna zgoda z mojej strony. Przy wyborze Clojure, albo inne języki funkcyjne coś wewnętrznie podpowiedziało mi stawiaj na Clojure. Nic ponadto.

    @Krzysiek, a co Ciebie odrzuca/przyciąga do Clojure?

    OdpowiedzUsuń
  4. @Jacek, nie znam Clojure i dlatego czytałem Twój post z takiego samego punktu widzenia, jak autor maila do Ciebie. Tak jak pisałem, nie napisałeś nic, co by zachęciło- lub zniechęciłoby mnie do poznania tego języka.

    OdpowiedzUsuń
    Odpowiedzi
    1. Masz rację! Nie dawałem odpowiedzi licząc, że ich brak sprowokuje do bliższej z nim znajomości. Tak trochę opacznie niż zwykle, ale wolę dowiedzieć się, że gość stracił okazję, bo sam tak wybrał niż zachęcony przeze mnie, stracił czas i ma do mnie żal.

      W przypadku pytań "Czy warto?" odpowiedź jest wiadoma - skoro z tym siedzę, to musi być warto! Oczywiście możnaby wskazać powody, które mnie skłoniły do poświęcenia czasu na to, ale to nie muszą być powody, dla którego faktycznie warto usiąść nad językiem. Trochę się pastwię, ale liczę, że rozmówca się nie zniechęci zbyt wcześnie i pozwalam sobie na chwilę luzu. Jak gość wytrzyma, zaopiekuję się nim. W przeciwnym wypadku, nie warto poświęcać mu czasu.

      Gdyby zapytał, dlaczego Ty wybrałeś ten język, odpowiedź byłaby zdecydowanie inna. Ludzie nie chcą znać innych przemyśleń, a jedynie odpowiedzi na swoje bardzo dopasowane pytania. Koniec z tym. Ktoś musi zrobić z tym porządek! :)

      Kolejne wpisy będą o powodach wejścia w Clojure. Widać ich potrzebę. Dzięki za inspirację!

      Usuń
    2. Oprócz powodów, podaj kilka przykładów. Łatwych do zrozumieniach, ale nie trywialnych. Dobre przykłady, które by pokazały dlaczego warto zainwestować swój czas w naukę Clojure, byłyby na wagę złota :)

      Usuń
    3. Chciałbym mieć taką wiedzę! Dobranie właściwych powodów, a później przykładów jest, w/g mnie, największym wyzwaniem propagatora rozwiązania. Kiedy mi się to uda, będę "na wagę złota" :)

      Nie poddaję się jednak i będę próbował.

      Usuń
    4. Tak jak piszesz, dobre przykłady to najtrudniejsza droga, ale moim zdaniem najbardziej skuteczna!

      Powodzenia :)

      Usuń
  5. @Jacek

    Argumenty ok i jeśli myślę o FP jako o czymś nowym i rozwijającym, to mnie przekonują. Myślę jednak, że pytanie dotyczyło czego innego. Wyobraź sobie, że pracujesz za stawkę godzinową. Każda godzina programowania dla pracodawcy to dodatkowe pieniądze. Jeśli robisz coś innego, nie otrzymujesz za ten czas wynagrodzenia.
    Pytanie brzmi: jakie argumenty musiałbyś usłyszeć, aby zrezygnować z kilkunastu (kilkudziesięciu?) godzin wynagrodzenia i poświęcić je na naukę FP?

    OdpowiedzUsuń