10 stycznia 2013

Po spotkaniu Warszawa JUG o metaprogramowaniu w Javie

Nowy rok i nowe postanowienia, co? A skoro o tym, to z pewnym spóźnieniem...

Wszystkiego najlepszego w Nowym Roku 2013! Jedynie ciekawych projektów w 2013 bez Project Maruderów!

Chyba niektórzy postanowili odświeżyć znajomości i wiedzę w nowym roku, bo ostatnie, wczorajsze spotkanie Warszawa JUG przyciągnęło bagatela ponad 70 osób! Mnie osobiście poraziło, kiedy zobaczyłem ten tłum.


Kamera też była, nagranie jest, więc niebawem powinno pojawić się w sieci. +Paweł Cesar Sanjuan Szklarz już nad tym pracuje.

Temat spotkania szumny - Metaprogramowanie w Javie - i tutaj doszukiwałem się odpowiedzi, skąd się wzięło tylu ludzi. Niektórzy wspomnieli również doskonałą zapowiedź jako możliwy powód: "Ten wykład to absolutny "must" dla wszystkich developerów związanych z Javą (i w ogóle JVM)."

Mnie przyciągnął do spotkania cglib, z którym miałem już wcześniej do czynienia, a nawet swego czasu byłem wielkim fanem rozgryzienia tematu dynamicznego generowania bajtkodu (również z asm), w czym pomagał mi dzielnie +Piotr Kobzda. Stare to czasy i postanowiłem odświeżyć temat.

Zawiodłem się niestety i uważam wczorajsze spotkanie w dużej mierze za stracone (!)

Poza tym, na spotkanie szedłem również, aby wybadać skąd u +Wojciech Erbetowski stwierdzenie nt. makr:

"Zgadzam się, nie ma makr w Javie (i bardzo dobrze), to może urągać metaprogramowaniu w Javie."

które założyłem, że zrodziło się po (nieprzyjemnych?) doświadczeniach z makrami w C i, zupełnie niezrozumiale, niekorzystnie rzutuje na makra w Clojure, z którymi C i Clojure dzielą jedynie nazwę. Byłem dosłownie wściekły (nie, nie tak wściekły, jak dosłownie możnaby to odczytać), kiedy przeczytałem to zdanie i miałem trochę żalu do Wojtka za jego...nonszalancję i nieznajomość tematu w językach alternatywnych do Javy.

Z drugiej strony, właśnie to zdanie i kilka innych w tym wątku sprawiło, że odnotowałem zadanie opisania makr w Clojure na tym blogu, aby przybliżyć go szerszej publiczności i spróbować wyjaśnić wiele niedomówień i nieprawdziwych tez. Wojtek, +Irek Matysiewicz z "W Javie nie można dodawać nowych konstrukcji do języka (np. w Scali można dzięki pluginom a w Clojure podobno dzięki makrom)." oraz Waldek Kot z "Skoro przytaczane tu przykłady języków z "dobrym" metaprogramowaniem (Ruby, Groovy i JavaScript - dodałbym tu pewnie jeszcze Clojure, czyli Lisp) mają swoje implementacje na JVM, to widać, że bytecode Java jest co najmniej "wystarczający"." uzasadnili potrzebę wprowadzenia do makr w Clojure. I to im się chwali!

Na plus spotkania dałbym tematykę oraz liczbę uczestników. I na tym niestety poprzestałbym.

Przez pierwsze 45 minut doświadczyłem "biegania" po wielu, często nieprzystających tematach, co mało brakowało, aby zakończyło się niemałą zadyszką. Trudno było znaleźć punkt zaczepienia i zacząłem się lekko nudzić.

Wojtek to człowiek, którego wszędzie pełno i rozumiem jego chęć podzielenia się wszystkim, począwszy od decyzji związanych z działalnością grupy Warszawa JUG, a skończywszy na jego zaskoczeniach przy tworzeniu RoboSpocka. Dodając do tego ochy i echy w temacie metaprogramowania w Javie i mamy niezły bigos.

Przy RoboSpocku należą się słowa pochwały za "udział" +Polidea we wczorajszym spotkaniu. Przemek przedstawił firmę i zachęcał do bliższego zapoznania się z nią. Peany na jej temat przywoływały mi na myśl konkurencję +SoftwareMill i TouK. Jeszcze stosunkowo niewiele jest firm, którym zależy na prospołecznościowym wizerunku i udzielają się bezpośrednio (wsparcie konferencji, spotkań Warszawa JUG) czy pośrednio (pracownicy są organizatorami konferencji, spotkań JUGów i często występują jako prelegenci na konferencjach) w budowanie lokalnych społeczności javowych. Ostatnio znaczenie nabrało dla mnie istnienie firmy i jej pracowników na Githubie, w czym również Polidea nie odstaje. Gratulacje!

Na minus prezentacji Wojtka przywołałbym "czytanie" ze smartfona. Pewnie gadżet miał wspierać i przypominać o agendzie, a sądzę, że ostatecznie przeszkadzał. Za mało naturalne było to wystąpienie, a z głową w smartfonie trudno było nawiązać kontakt wzrokowy. Próbowałem!

Później na scenie pojawił się +Maciej Jankowski z biblioteką CGLib. Merytorycznie dosyć ciekawie, ale zabrakło kilku sztuczek prezenerskich, aby mnie porwać i w pełni zaangażować w prezentację. Nudziłem się. Kod był, ale obaj panowie kilkukrotnie pozwolili mi sądzić, że jest w nim wciąż stosunkowo wiele nieznanego i zdumione miny pojawiły się kilkukrotnie. Pewnie niemniej zdumieni byli sami uczestnicy.

No i ten para-polski język! Czy mógłby prosić o zaprzestanie korzystania z "kastomizować" na rzecz "dopasowywać" lub malowniczo "kroić na miarę"?

Po Macieju na deskach ponownie zawitał Wojtek z Plastic. Zaczął doskonale, szczególnie, że pora (dobiegała 20:00) prosiła o podobne wejście - padł dowcip, który spróbuję sparafrazować:

"Wiele rozwiązań jest fajnych, a dołączone przykłady sprawiają, że szczęka opada. Nie można tego powiedzieć o Plastic'u!"

Cudo wejście! Od razu się poderwałem i...tyle. Było kilka przykładów z samego repo Plastic'a, ale chaos dał się poznać bliżej i skończyliśmy kwadrans później. Czasowo doskonale, merytorycznie niekoniecznie. Wyniosłem ze spotkania, że ten Plastic to nie dla mnie.

Możnaby odczytywać ten wpis jako negujący sensowność wczorajszego spotkania, ale nie takie jest moje zamierzenie. Bez solidnego treningu nie ma solidnych wyników, a właśnie temu ma służyć grupa Warszawa JUG. Wystąpienia na deskach WJUGa mają być przygotowaniem do wystąpień przed większą publiką podczas konferencji i pamiętając "tylko ten się nie myli, kto nic nie robi" należy czytać ten wpis z wyłącznie przyjacielskim nastawieniem (inne jest niedopuszczalne!)

Do następnego!

12 komentarzy:

  1. Skoro było dużo ludzi, to tylko pokazuje że ta tematyka jest ważna. Szkoda tylko że w Javie tak dosyć słabo zrealizowana. :-(

    OdpowiedzUsuń
  2. Żałuję Jacku, że tak się zawiodłeś na ostatnim spotkaniu. To już drugi raz kiedy dostaję burę od Ciebie po wykładzie. Coś czuję, że trzeciej szansy nie dostanę.
    Może po prostu nie mam talentu do prowadzenia prezentacji i nie powinienem z tym walczyć, bo w moim odczucie (jak na moje możliwości) to uważam, że nieźle poszło :-(

    >Poza tym, na spotkanie szedłem również, aby wybadać skąd u +Wojciech Erbetowski stwierdzenie nt. makr:
    > "Zgadzam się, nie ma makr w Javie (i bardzo dobrze), to może urągać metaprogramowaniu w Javie."

    Szkoda, że nie zadałeś pytania o makrach na wykładzie, mógłbym Ci przedstawić kontekst. Chodzi mi o to, że w języku mainstreamowym (wybacz anglicyzmy, tak już mam) makra są olbrzymim problemem. Już przy ciasnych ograniczeniach Javy wydaje mi się, że sporo jest i tak już nagięć składni (np LambdaJ) do granic, aby coś wyrazić krócej, czytelniej. Uważam, że makra w przypadku tego języka mogły by sprawić, że nastąpiłoby jeszcze większe rozbranchowanie (znów przepraszam) sposobu pisania w Javie. Dzięki mocnym ograniczeniom w języku udało nam się przejść transformację w sposobie pisania przez te ok 15 lat, dotrzeć do świata TDD, GoF, SOLID i przy tym pozostać przy w miarę spójnym sposobie tworzenia kodu. Dlatego ciesze się, że makr w Javie nie ma.

    Jeśli chodzi o języki, w których 90% programistów używa jednego narzędzia (tak widzę RoR, ale nie chciałbym nikogo urazić) i to właśnie to narzędzie wprowadza makro(a), to jest spora szansa, że to makro stanie się to głównym nurtem i jest kopiowane do innych narzędzi analogicznie (tak mi się wydaje). Wtedy niebezpieczeństwo jest mniejsze niż w przypadku Javy, świecie gdzie frameworków jest więcej niż deweloperów. Nie uważam, żeby to urągało innym językom.

    Dzięki za konstruktywną krytykę, pozdrawiam,
    Wojtek

    OdpowiedzUsuń
    Odpowiedzi
    1. Zawiodłeś?! Co to, to nie! "Zawieść się" to wynik niespełnionych oczekiwań, a ja poszedłem zobaczyć, co będzie bez nich. Chciałem usłyszeć to i tamto, zobaczyć trochę kodowania na żywo (z git'em w tle), ale nie mogę powiedzieć, że to, co usłyszałem mogło mnie zawieść. Trochę to pokrętne, ale cieszę się, że pojawiłem się na spotkaniu.

      A co do makr, to ciekawym Twojej opinii na ich temat w Scali. Skąd pomysł w zespole Oderski & spółka, aby w ogóle rozważyć ich wprowadzenie? Masz swoje zdanie w temacie?

      Usuń
    2. To Scala ma makra? Pokręciłeś czy czegoś nie wiem?
      Z tego co wiem Scala ma tylko pluginy kompilatora, i to też mocno ograniczone - można wpiąć się tylko w niektóre fazy kompilacji.

      Usuń
  3. Jeszcze tylko mała uwaga do makr i Javy, może w obecnych czasach, kiedy dojrzałość języka, narzędzi i społeczności jest na bardzo wysokim poziomie, makra byłyby bardziej pomocne niż nieszczące, więc powinienem pisać, że "ciesze się, że makr nie było w Javie" :-)

    OdpowiedzUsuń
  4. Jacku, jeszcze jeden, mały komentarz. Polideę przedstawił Jarek (https://github.com/potiuk) :) a nie Przemek (https://github.com/pjakubczyk), choć Przemek był tam również .. No i jako współtwórca Robospocka, może to Przemek właśnie powinien to zrobić, he he....

    OdpowiedzUsuń
    Odpowiedzi
    1. Wybacz pomyłkę. Szukałem Twoich namiarów właśnie na githubie i zobaczyłem, że Przemek jest aktywny i od razu założyłem, że Ty to on :-) Wybacz!

      Usuń
  5. A swoją drogą Wojtku, to zapewniam Cię, że jak razem z Przemkiem opowiecie o Robospocku i pokażecie trochę przykładów testów i napiszecie kilka takich, to publika oszaleje a i Jacek się czegoś nauczy. Naprawdę - musicie to zrobić bo to prawdziwa pionierka, co zrobiliście. Myślę że Jacek ma sporo racji że na ostatnim wykładzie był spory misz-masz. Ty masz spory talent i zapał do prowadzenia prezentacji. Zwłaszcza korzystnie wypadasz w parze z kimś innym jeśli pokazujecie coś razem, ale w ostatnim wykładzie trochę faktycznie zabrakło myśli przewodniej i zwykłego "z głową" zrobionego planu - tak żeby z poprzedniego slajdu logicznie wynikał następny.

    OdpowiedzUsuń
    Odpowiedzi
    1. Tak, tak, tak! Chcę Robospocka. Chcę dowiedzieć się rzeczy spod lady, od strony kuchni - jak było na początku, jak powstawał Robospock i jakie są dalsze plany.

      Usuń