22 października 2013

Wirtualne scalania - jak do tego podejść? Google Hangouts?

0 komentarzy
Given...

Zaangażowałem się w te scalania na tyle, że pomyślałem o wyjściu poza ramy tradycyjnego spotkania w Warszawie, w budynku MIM UWu. Myślę, że to zbyt tradycyjne podejście, aby dotrzec do większej liczby zainteresowanych, a okazuje się, że jest ich całkiem niemało.

Chociażby ostatni komentarz, który dostałem po edycji na warsjawie, sugeruje potrzebę odpalenia takiej wersji:
"idealnie by było dla mnie jakby scalania było więcej = trwało dłużej - jak zorganizujesz 5 godzinne scalanie to wsiadam w pociąg i przyjeżdżam z Łodzi... dla ludzi ze stolicy to mogłoby być za dużo, ale można by organizować krótkie i długie scalania :) dla różnych grup."
I tu pojawia się seria znajomych pytań kontrolnych, która zwykła mnie nękać, kiedy tylko rozpoczynam nowy temat, w której prym wiedzie jedno - "Jak do tego w ogóle podejść?"

Pomyślałem, aby skorzystać z doświadczeń innych grup, które korzystają z Google Hangouts - jestem pod ogromnym wrażeniem konferencji wirtualnej dotNetConfPL z tym narzędziem - i od tego bym właśnie zaczął.

When...

Utrzymałbym również godzinę spotkania 18:00 - 20:30 w środę, zanim zdecydowałbym się na dalszy krok odpalenia całodniowego scalania.

Then...

Pozostaje dotrzeć do kilku zainteresowanych osób, które zechciałyby na próbę skorzystać z tej formy nauki języka Scala i przyłączyć się do spotkania.

Wyobrażam sobie, że na spotkaniu mam duży ekran, na którym wyświetlana byłaby sala z grupą osób pod drugiej stronie lub po prostu pojedyncze osoby i w połączeniu z osobami na miejscu znacznie uczłowieczyć spotkanie. To mogłoby być bardzo ciekawe doświadczenie.

Kiedy to już spisałem i upubliczniłem, to musi się takie spotkanie odbyć. Nie znam wielu podobnych inicjatyw i chętnie przetarłbym szlaki z Twoją pomocą. Koniecznie skontaktuj się ze mną, jeśli jesteś zainteresowany udziałem, dysponujesz wolnym czasem w środę po 18:00 i wyrażasz zainteresowanie nauką języka Scala.

Co powiedział(a)byś na środę w przyszłym tygodniu?

20 października 2013

Relacja ze scalania 6 - niespodzianek końca nie widać

0 komentarzy
Byłoby niegrzecznie wychwalać własne dzieło, ale przywdziewając czapkę uczestnika spotkań z językiem Scala - Scalania - mogę śmiało oznajmić, że ostatnie, szóste spotkanie było jeszcze lepsze niż poprzednie (wliczając te podczas warsjawy). Na wsparcie tych słów, przytoczę opinie uczestników ze strony Scalania 6 - spotkania z językiem Scala.


Jacek Kołodziejski napisał:
"Kolejne bardzo udane scalanie i nawet się zmieściliśmy w czasie! Składam oficjalne gratulacje na ręce prowadzącego:)
Pomysł z wywoływaniem losowych ludzi do zadania z poprzedniej edycji jest bardzo ciekawy."
Co zechciał wesprzeć Piotr Kowalski swoim "lajkiem".

Andrzej Jóźwik dodał:
"Bardzo udana współpraca - praca w grupach wyzwoliła konkurowanie na ilość różnych podejść/rozwiązań. Jak widać ile osób tyle pomysłów - a scala daje duży potencjał."
Z "lajkiem" Rafała Krzewskiego.

Biorąc pod uwagę, że na spotkaniu było 15 uczestników (16 ze mną) i 4 wyraziło swój zachwyt, daje to ponad 25% zadowolonych, co uważam za solidne wsparcie mojego (być może przesadzonego tu i ówdzie) myślenia.


Daleki jestem od stwierdzenia, że to moja zasługa. Wręcz przeciwnie! Owe dzieło - scalania - wyjątkowo dobrze się samoorganizuje, a ja jedynie nadaję temu ramy spotkania. Liczba pomysłów, które mógłbym określić moimi, stanowi pewnie jedynie połowę wszystkich wdrożonych, co jest kolejnym sukcesem tej inicjatywy.


Ot, choćby ostatnie "ćwiczenia" polegające na podziale uczestników na grupy i ścisłe przestrzeganie ram czasowych. To nie są moje pomysły, a jak widać to właśnie one stanowią o doskonałości spotkania. I tak trzymać! Ja ustawiam się w roli bacznego obserwatora i "zbieracza" pomysłów, a uczestnicy, jako główni aktorzy na scenie, określają formę i kierunek rozwoju (własnego i spotkania). Widzę samych wygranych.


Dziękuję tym, którzy zabrali głos w sprawie (na meetupie), pozostałym uczestnikom, wydziałowi MIM UW, aby nie zapomnieć o sponsorze - firmie Javart. Zabrzmi banalnie, ale należy to napisać...oddawając tedy, co jest cesarskiego, cesarzowi, a co jest bożego, Bogu...że bez nich scalania nie miałyby miejsca. Dziękuję!


W zasadzie, komentarze wyżej, dają pojęcie o zmianach wdrożonych podczas ostatniego spotkania - utrzymanie podziału na 3-osobowe grupy oraz ścisłe trzymanie się agendy. Dla mnie największym sukcesem było trzymanie się czasu i wciąż jest zaskakująca łatwość, z jaką idzie to utrzymać. Chociaż niewielu potrafi rozwiązać zadanie w zadanym czasie, to nie słychać głosów, które mogłyby świadczyć, że to coś niewłaściwego. To się musi podobać każdemu!


Zaczęliśmy spotkanie o 18:10, od wprowadzenia do Scali, które poprowadził Andrzej Goławski. Dostał 15 minut i ich nie zmarnował! Trudno było znaleźć czas, aby się nudzić. Wielkie brawa dla Andrzeja.


Później "odpaliłem" nowość tego spotkania - 15-minutową rozgrzewkę, czyli sprawdzian dla osób, którzy byli na poprzednich scalaniach, a którzy "poproszeni" rozwiązywali już zrobione wcześniej zadania (niekoniecznie przez nich samych).

Jak wybierać osoby do tego sprawdzianu jest jeszcze do wypolerowania, ale z pewnością należy to utrzymać. Daje to możliwość wyjścia na scenę osobom, które zwykły trzymać się z dala od blasku fleszy, a także wdrożyć nowe osoby do mechaniki rozwiązywania zadań. Bardzo podobała mi się dyskusja z pierwszym na scenie (wybacz chwilową amnezję, bom imienia nie pomniał), aby rozwiązać zadanie, którego akurat nie robił wcześniej (bo udział w scalaniu nie musi oznaczać, że dane zadanie właśnie wtedy było robione).


W końcu nadeszła pora na przerwę żywieniową i chwilę na dyskusję. Ten element uważam za kluczowy, bo nie tylko, że można się posilić, ale przez miejsce (korytarz) i niewielką liczbę osób (poniżej 20) próbuję animować dyskusje między uczestnikami. Podczas przedostatniego spotkania mieliśmy jedno wielkie kółko, w którym każdy dzielił się swoimi wdrożeniami Scali w firmie, a na ostatnim widać już było kilka podgrup i raczej nikogo pozostawionego samemu sobie. To zdecydowany sukces scalania i odejście od tradycyjnego, opartego na slajdach i jedzeniu w ławkach, formatu spotkań Warszawskiego JUGa.


Od 19:00 można liczyć faktyczne rozwiązywanie zadań. Zgodnie z planem, na pierwszy ogień poszło P14. O 19:10 dzielimy się gistami. Poniżej zebrane propozycje.
W agendzie zaplanowałem kolejną niespodziankę spotkania, ale najwyraźniej sprawność grupy sprawiła, że pojawiła się ona w propozycjach rozwiązań - napisać rozwiązanie w trzech wersjach - z użyciem dopasowania wzorców, jednolinijkowca z foldLeft/flatMap czy podobnie, oraz wersję z rekurencją ogonową. Zakładając, że jedno z wymienionych jest bieżącym rozwiązaniem, pozostałe stanowiły(by) uzupełnienie i kolejne ćwiczenie umysłowe. Zwykle dawało to trzy różne rozwiązania.


O 19:30 podeszliśmy do P15.

Właśnie wtedy uzmysłowiłem sobie kolejną nowość spotkania - baczniejszą analizę błędu podczas uruchomienia testu. Do tej pory zakładałem, że należało przeczytać test, aby dowiedzieć się, co jest wymagane w implementacji, ale już samo uruchomienie testu daje taką informację.

Uruchom polecenie ~exercises/testOnly *P15* i po prostu przeczytaj błąd, w którym napisano, czego oczekuje się od implementacji.
> ~exercises/testOnly *P15*
[info] P15Spec
[info]
[info] P15 solution should
[info] x Duplicate the elements of a list a given number of times.
[error]    an implementation is missing (S99_P15.scala:4)
Trzeba więcej?! Raczej nie. To znacznie upraszcza operowanie projektem i udział w spotkaniu. Gdyby podzielić ekran na dwa i u dołu pokazywać wynik testu, a u góry edytor, byłoby to idealne środowisko pracy. Tutaj IDE, np. IntelliJ IDEA, mogłoby spełnić pewną rolę.


I tu mnie olśniło - zaproponowałem, aby w 3-osobowej grupie był tylko jeden otwarty komputer ze zmianą osoby piszącej rozwiązanie. Moja pamięć zawodna i nie pamiętam grupy, która nie wdrożyłaby tego pomysłu.
O 19:50 siedliśmy przy P16.
O 20:30 ogłosiliśmy spotkania koniec.


Dziękuję uczestnikom, wydziałowi MIM UW, firmie Javart oraz Tobie za przeczytanie sprawozdania. Zapraszam na kolejne spotkanie, które odbędzie się już za 2 tygodnie. Do zobaczenia!

p.s. Zachodzę w głowę, jak gromadzić rozwiązania, aby stały się częścią projektu scalania na GitHubie. Pomysły mile widziane.

15 października 2013

Scalania 5 - wydanie specjalne i warsjawa 2013 przechodzą do historii

0 komentarzy
Projekt spotkań w formie warsztatowej o nazwie scalania odpaliłem po raz pierwszy 9 lipca 2013. Pomysł nie był nowatorski w swej formie, a wciąż nie posiada swojego konkurenta, przez co można choćby z tego powodu okrzyknąć go sukcesem. Podobnie jak warsjawę.


Kiedy 6 lat wcześniej - 21 listopada 2007 - uruchamiałem (jeszcze na tamten czas nazywaną) WarsJavę - projekt polegający na serii krótkich wykładów praktycznych, które miały być odpowiedzią na rosnące zapotrzebowanie poznawaniem technologii przez warsztaty - nie sądziłem, że może kiedykolwiek przyciągnąć ponad 500 uczestników, a dodatkowo będzie prowadzony przez grupę niesamowicie nakręconych łebków, którzy już dawno udowodnili, że jak można, to będzie i nie potrzeba ciągać za sobą balastu w postaci mojej osoby. Chwała za decyzję!


I dało się? Pewnie, że się dało! Spełniło się moje marzenie o uformowaniu grupy, która organizuje się samodzielnie i potrafi uruchomić confiturę, warsjawę oraz zadbać o regularne spotkania Warszawskiej Grupy Użytkowników Technologii Java (Warszawa JUG).

Panie i Panowie, szacunek za poświęcony czas i włożony wysiłek. Jestem dumy móc pracować z Wami i korzystać z owoców Waszej pracy! Uczę się przy tym niemało. Dziękuję!

I tak zabrakło mi organizowania czegoś i padło na spotkania warsztatowe ze Scalą. Zaczęło się od poznawania języka Scali samodzielnie, aby wpaść na pomysł odpalenia scalania. Brakowało mi towarzystwa do nauki, więc zorganizowałem spotkania.


I się toczy pomalutku.


Podczas warsjawy okazało się, że projekt scalania pozwala na organizowanie spotkań regularnie na MIMUWie oraz wydanie specjalne. W zasadzie formuła scalania podczas warsjawy nie różniła się zasadniczo od tego, co doświadczam na spotkaniach regularnych, ale kolejny raz dano mi możliwość poeksperymentowania i wdrożenia kilku pomysłów.

Na wydaniu specjalnym scalania na warsjawie pojawiło się 12 osób. Żadna z osób nie uczestniczyła w poprzednich scalaniach.


Po usadowieniu się uczestników i wprowadzeniu ich w tajniki projektu scalania (co trwało około 15 minut) poprosiłem o ujawnienie się bardziej zaawansowanych programistów Scali. Szczęście mnie nie opuściło i okazało się, że osób na poziomie kursu Odersky'iego i kilku samodzielnych prób z językiem było 6 - dokładnie połowa! W ten sposób wdrożyłem w życie pomysł podziału uczestników na pary - nowicjusz i zaznajomiony ze Scalą. Stoły były jakby dopasowane do takiego pomysłu i mieściły pary doskonale.


Przeszliśmy przez P01 wspólnie, później już P02 samodzielnie (w parach), aby około 10:40 zabrać się za P03. Zauważyć można było, że tempo nie każdemu służy i było niemałym zaskoczeniem dla uczestników. Mimo wszystko nie zraził się nikt i zawzięcie widać było na twarzach.


Trzeba było widzieć te pracujące pary - ludzie pracują wspólnie, w parach w rytm expression pair programming! Widać interakcję. Moje marzenie o spotkaniach, które integrują (zamiast tylko przekazywać wiedzę) spełniało się kolejny raz.

O 11:05 przerwa.

Przeszliśmy do P12 około 11:45 i dokończyliśmy spotkanie wspólnym rozwiązywaniem zadania, które pozwoliło mi zademonstrować siłę systemu typów Scali i wymuszanie przez niego implementacji (po prostu należało spełniać wymogi kompilatora, aby ostatecznie wyłoniło się rozwiązanie). Tym wspólnym akcentem zakończyliśmy scalania 5 - wydanie specjalne na warsjawie 2013.


Po warsztacie spędziłem czas do 15:00 na dyskusjach z organizatorami, wolontariuszami, sponsorami oraz uczestnikami warsjawy. Dziękuję wszystkim za wspaniałą atmosferę.


Niech podsumowaniem mojej relacji będą trzy relacje uczestników scalań. Jak nietrudno zauważyć, pojawia się w nich nowy pomysł do wdrożenia ;-)

"Hej,

jeszcze raz dzięki za świetny sobotni warsztat. Poniżej tak jak prosiłeś moje spostrzeżenia.

Na plus:
- muszę przyznać, że przed warsztatem widziałem może z jedno "Hello World" ze Scali więc trochę obawiałem się, że polegnę na składni. Jednak krótkie wstępy teoretyczne przed zadaniami pozwoliły mi o tym zapomnieć. Dodatkowo muszę powiedzieć, że taka metoda (minimum teorii koniecznej do rozwiązania problemu + kodowanie) nauki nowego języka bardzo dobrze się sprawdza.
- tworzenie par nowicjusz + bardziej doświadczony. Można poznać nowych ludzi, czegoś się od nich nauczyć, a i może oni się czegoś nauczą od nowicjuszy przez ich świeże spojrzenie.
- krótki czas na rozwiązanie zadań. Nie pozwoliło to ślęczeć uczestnikom nad rozwiązaniem nie wiadomo ile, dzięki temu nie robiło się nudno.
- sądzę, że wspólne rozwiązanie P12 na moim przypadku (trochę przy nim poległem na kompilatorze, ale rozwiązanie zmierzało w jakimś tam dobrym kierunku jak się okazało :) ) dużo dało nie tylko mi.

Co mogłoby być inaczej, żeby było lepiej (czyli jak ktoś woli minusy):
- zabrać/schować/wyłączyć (niepotrzebne skreślić :] ) jednej osobie komputer. Zdarzało się, że zaczynaliśmy rozwiązywać problem na jednym komputerze, rzucaliśmy swoje pomysły, później następował mały zastój i praca rozpraszała się na dwa komputery. Jedna osoba na chwilę zwątpiła we wspólnie wypracowane rozwiązanie i przechodziła do realizacji własnego pomysłu. Gdyby nie było drugiego komputera dało by się tego uniknąć i wycisnąć ze wspólnej pracy w parach dużo więcej.
- trochę się rozjechaliśmy z czasem/agendą, ale to właściwe plus bo jeśli mamy jakieś pytania do zadania, pojawiają się jakieś ciekawe dyskusje lub Ty miałeś coś extra do powiedzenia to dlaczego nie? Myślę więc, że nie ma co ściśle ustalać ile zadań zrobimy na spotkaniu bo czas poświęcony na jakieś dodatkowe rozmowy, o ile nie odchodzimy za bardzo od tematu, na pewno nie jest czasem straconym :)

Ogólnie jestem bardzo zadowolony z tego warsztatu. Jak napisałem wcześniej nie miałem kontaktu ze Scalą, a z programowaniem funkcyjnym tylko akademicko (LISP, PROLOG) - jakoś do mnie ono nie trafiło. Po warsztacie trochę inaczej na to spojrzałem i pewnie będę się chciał bardziej zagłębić w ten temat. Mam nadzieję, że uda mi się pojawić na następnych scalaniach. To tyle ode mnie."

"Cześć,

Warsztaty były naprawdę fajne i to co mi się najbardziej podobało to w miarę żwawa akcja.
Zauważyłem, że czasami jak omawianie teorii trwa zbyt długo i ludzie jeszcze nie za bardzo czują, że ta teoria może im się do czegoś przydać, to lubią się wyłączać.
Tutaj tempo było w sam raz.

Dzień wcześniej zrobiłem sobie dwa pierwsze zadania na ifach. Dzięki temu, że na zajęciach padła sugestia by użyć pattern matching, łatwiej mi było zauważyć różnicę pomiędzy tymi rozwiązaniami. Być może będziecie chcieli na przyszłych spotkaniach rozwiązywać dany problem na kilka sposobów 
i omawiać różnice.

To co można poprawić to pozostawić jeden laptop na grupę aby zachęcić do większej współpracy.

pzdr,"

"Witaj,

Podobało mi się:
- praca w parach (może warto pójść jeszcze dalej i spróbować pair programmingu ze zmianą kompa co zadanie?)

Podobało mi się mniej:
- skakanie między Sublime i REPLem gdy "spełniałeś wymagania kompilatora" (może wtedy lepiej byłoby użyć jakiegoś IDE które na żywo podkreśla błędy kompilacji?)"

Zaczynam zastanawiać się, na ile zasadne byłoby myślenie, że scalania należałoby odpalić w innych częściach Polski? Już realizuję pomysł, aby odpalić scalania w pewnej firmie (ogłoszenie niebawem), ale może i należałoby zastanowić się nad innymi miastami. Może również należałoby oprzeć na scalaniach całodniowe szkolenie? A może nawet kilkudniowe? Jesteś chętna, aby podjąć wątek? Porozmawiajmy!

13 października 2013

Scalania 6 - spotkania z językiem Scala w najbliższą środę, 16 października od 18:00

1 komentarzy
Zapraszam na szóste spotkanie z językiem Scala - Scalania 6, które odbędzie się w najbliższą środę, 16 października na MIMUWie. Szczegóły organizacyjne znajdziesz na stronie spotkania http://scalania.pl.

Rozpoczynamy o godzinie 18:00 w sali 3180.

Po ostatniej warsjawie pojawiło się w mojej głowie kilka pomysłów, które chciałbym zrealizować właśnie podczas tego spotkania. Z pewnością będzie inaczej niż podczas poprzednich spotkań, więc stali bywalcy powinni ponownie poczuć się jak nowicjusze.

Motywem przewodnim będzie praca z projektem scalania z GitHuba w obszarze zadań P14-P16 (z możliwością rozszerzenia aż do P19).

Na scenie zobaczymy Andrzeja Goławskiego, który "uzbroi" nas w niezbędne konstrukcje języka Scala potrzebne do rozwiązywania zadań.

Zastanawiasz się, czy to spotkanie dla Ciebie?! Na pewno! Świeże spojrzenie zawsze w cenie. Po prostu nie może Cię zabraknąć! Zapraszam!

11 października 2013

Szanowny uczestniku specjalnej edycji Scalania na warsjawie

0 komentarzy
Drogi uczestniku scalania - wydanie specjalne,

Z niecierpliwością oczekuję nadchodzącej soboty, 12 października, kiedy o godzinie 9:30 będziemy mogli się spotkać na tegorocznej warsjawie, w której wspólnie weźmiemy udział w wydaniu specjalnym Scalania.

Przekonasz się na własnej skórze, że nie ma lepszego sposobu na poznanie Scali, jak obcowanie z nią w gronie podobnych zapaleńców. Odmienność spojrzenia na ten sam problem współtowarzysza i możliwość poznania powodów takiego rozumienia jest bezcenna, a jednak dostępna na wyciągnięcie ręki podczas tych spotkań.

Spotykamy się w sali 2045 na MIMUWie. Wcześniej zachęcam do udziału w oficjalnym rozpoczęciu konferencji o godzinie 9:00.

Na mój warsztat zapisało się 23 osoby i planuję zastosować wszystkie techniki uatrakcyjniania spotkań, które miałem możliwość doświadczyć podczas poprzednich 4 edycji scalania.

Zaczynamy punktualnie o godzinie 9:30. O 11:00 jest obowiązkowa 30-minutowa przerwa. To daje nam 2 bloki warsztatowe = odpowiednio 90 minut i 60 minut.

Wstępna agenda scalania - wydanie specjalne jest następująca:

CZĘŚĆ 1 :: 09:30 - 11:00 - 90 minut - część wprowadzająca/rozgrzewająca
15 minut - wprowadzenie do projektu scalania
10 minut - tematy scalowe do rozwiązania zadań
30 minut = 3 x 5 minut - rozwiązywanie zadania + 5 minut - omówienie rozwiązania
10 minut - tematy scalowe do rozwiązania zadań
25 minut = 3 x 5 minut - rozwiązywanie zadania + 5 minut - omówienie rozwiązania

PRZERWA 11:00 - 11:30 - 30 minut

CZĘŚĆ 2 :: 11:30 - 12:30 - 60 minut - część (bardziej) zaawansowana
10 minut - tematy scalowe do rozwiązania zadań
20 minut = 2 x 5 minut - rozwiązywanie zadania + 5 minut - omówienie rozwiązania
10 minut - tematy scalowe do rozwiązania zadań
20 minut = 2 x 5 minut - rozwiązywanie zadania + 5 minut - omówienie rozwiązania

RAZEM 3+3 + 2+2 = 10 zdań

Dzielenie się agendą przed spotkaniem jest nowością tego wydania. Chciałbym, aby tempo zostało dotrzymane i  tym samym proszę o wspólne pilnowanie harmonogramu, gdybym sam nie dawał z nim rady. Nie będzie lekko, ale nikt tego nie obiecywał, więc po co sobie odpuszczać! :-)

Proszę zapoznać się z projektem scalania na GitHubie. Najważniejsze, aby pobrać projekt (git clone) na swój komputer, z którym pojawisz się na warsztacie. Dodatkowo należy odpalić sbt (w wersji 0.13) i wykonać polecenia opisane w README projektu. To pozwoli nam na pracę bez konieczności dostępu do sieci, gdyby takowa zawiodła. Jako IDE będę korzystał z Sublime Text 3 i/lub IntelliJ IDEA 13. Wybór IDE pozostawia się uczestnikowi.

W miarę możliwości proszę o zabranie ze sobą przedłużacza.

O czymś powinienem jeszcze wspomnieć? Pytania? Sugestie? Komentarze? Proszę o kontakt.

Do zobaczenia na warsjawie!
Jacek

07 października 2013

Czytelność kodu a przegląd kodu w moim zespole w Citi

0 komentarzy
Nie miałem jakiejkolwiek wątpliwości, że przejście do Citi będzie dla mnie wyjątkowe pod wieloma względami. Ot, chociażby dzisiejsze spotkanie zespołu celem przeglądu kodu jednego z nas - nazwisko ominę (wybacz Artur).

W jeden sali miałem okazję zasiąść z (kolejność przypadkowa) Marcinem, Grześkiem, Tomkiem, Arturem, Pawłem i innymi, mniej lansującymi się w Sieci, ale wciąż światłymi osobami (określenie "lansowanie" używam tutaj wyłącznie w pozytywnym znaczeniu). Wielu ich zna, niektórzy nawet osobiście, ale niewielu może z nimi pracować na co dzień. Ja taką okazję mam i nie zamierzam jej marnować, więc uczestniczę we wszystkich spotkaniach. Uważam, że obcowanie z mądrym sprawia, że sam się nim stanę (?), a co najmniej zbliżę się do takiego poziomu. Dziękuję Panowie!

Podczas pierwszego przeglądu kodu, wyniknęła dyskusja o czytelności kodu. Początkowo sądziłem, że to kolejne marnowanie czasu, ale wystarczyło wstrzymać się z dalszymi ocenami, aby przekonać się, jak bardzo się myliłem. Dyskusja rozgorzała, kiedy pojawił się poniższy kawałek kodu:
  val wasStateChanged = prevCMStatusState match {
    case Some(prevState) => prevState != currentState
    case None => true
  }
Ten kawałek został zganiony za powtórzenie implementacji metody Option.fold. Korzystając z niej możnaby powyższe zapisać następująco:
  val wasStateChanged = prevCMStatusState.fold(true)(_ != currentState)
I tu się zaczęło.

Kiedy zobaczyłem fold zacząłem rozkładać prevCMStatusState na elementy (zakładając, że to kolekcja). To był błąd, bo prevCMStatusState to scala.Option.

Zajęło mi chwilę, co mogłoby to robić, ale kiedy dowiedziałem się, spodobało mi się. Jakieś takie geek'owe :) I tu cały pies pogrzebany. Może faktycznie geek'owe, albo po prostu moja nieznajomość (ignorancja) podstawowych klas i ich metod w Scali sprawiła, że odniosłem takie wrażenie. Nieistotne, bo szybko stałem się zwolennikiem Option.fold. Nie wszyscy.

Inny przykład mógłby być taki:
  case class X(age: Int)
  Some(X(40)).fold(false)(_.age > 30)
Odczytanie tej linijki z Option.fold zajmuje mi tyle samo czasu, co odczytanie pattern matching wyżej, a pisze się krócej, więc obstaję za wersją krótszą.

Ale czy krócej to piękniej? I czy nie przekraczamy cienkiej granicy czytelności kodu nad jego zwięzłością? I czy czytelność kodu jest cechą kodu czy relacją między kodem a czytelnikiem. Sądzę, że to drugie.

Dla mnie czytelny kod nie musi implikować jego czytelności dla Ciebie czy Twoich znajomych. Dyskusja sprowokowała mnie do zastanowienia się nad (lekko wyświechtanym) określeniem "czytelność kodu". Dla mnie, czytelność kodu jest wypadkową doświadczenia czytelnika, a nawet nastroju. Dzisiaj jestem w stananie czytać między liniami, ale czy jutro również będzie mi to dane? Zdecydowanie obstaję nad pełną znajomością standardowej biblioteki języka (w tym przypadku Scali), więc jeśli mamy Option.fold w Scali, to będę z tego korzystał (zamiast pisać implementację za każdym razem, gdzie Option.fold mógłby być zastosowany).

A jak z Twoją definicją czytelności kodu? Czy powyższy przykład mógłby stanowić podstawę do takiej dyskusji z Tobą? Czy znasz inne, kontrowersyjne przykłady?

03 października 2013

Scala scala na Scalaniu - 4-te spotkanie za nami

0 komentarzy
Zacznę od rzeczy najważniejszej - podziękowań. Dzisiejsze, czwarte spotkanie ze Scalą - Scalania 4 - było bezsprzecznym sukcesem współpracy wielu osób, o których byłoby nietaktem nie wspomnieć. Wcześniejsze nie były specjalnie inne, ale efekt dzisiejszych jest jakiś szczególny i tak mnie naszło.

Dziękuję firmie Javart za opiekę nad spotkaniem. Kolejny raz. Pozwoliło nam to na pełne oddanie się "trawieniu" wiedzy o języku Scala, zamiast walce z głodem i pragnieniem. Dzięki wsparciu firmy Javart, głód i pragnienie poszły w zapomnienie, kiedy…

pojawiła się strawa i napoje,
a na scenie kolejno nasi prelegenci we troje.

Zaczął +Andrzej Goławski. Pierwsze dziesięć minut upłynęło sprawnie i zapoznaliśmy się z metodami map, List.make, List.flatMap oraz List.zipWithIndex. Andrzej korzystał z prezi. Wyjaśnienie, przykład i kolejny, wyjaśnienie ponownie, itd. Przerwałem jego wystąpienie po tym, kiedy mój stoper oznajmił upływ 10 minut. Oklaski i wchodzi kolejny prelegent.


Na scenie pojawia się +Anita Fronczak. Anita wykorzystała Google Docs jako platformę do slajdów. Z pewnymi problemami sprzętowymi (Anity komp bez wyjścia VGA, a mój Mac kolejny raz się zawiesza przy podłączeniu do wyjścia projektora, więc Andrzej nas ratuje swoim) zaczynamy kolejne 10 minut. Anita przeprowadza nas przez tajniki krotek (ang. tuples), przypisania przez dopasowanie wzorców, Either/Left/Right i kończymy po kolejnych 10 minutach. Oklaski i wchodzi kolejny prelegent.


Ostatnim "czarodziejem" staje się +Piotr Marczewski. Tym razem jedynie IDE. Omówił klauzulę import w ramach object, typ scala.Any oraz scala.Symbol. Dokładne wpasowanie do przydzielonych 10 minut i kończymy o czasie.

Wielkie gratulacje dla naszych prelegentów! Utrzymanie materiału w ryzach 10 minut z pewnością nie było łatwe i wymagało od nich starannych przygotowań. Udało się i było super. Anita, Andrzej i Piotr zasługują na gromkie brawa.

Utrzymanie owych 10-minutówek zgodnie z ich planowanym czasem (i nazwą) okazało się strzałem w dziesiątkę! Było różnorodnie (merytorycznie i osobowościowo), sprawnie, krótko i treściwie. To zdecydowanie należy utrzymać.

I tu nowość tego spotkania - podział na trójki. W zamyśle celem trójek miało być zintensyfikowanie interakcji między uczestnikami, a to miało się przełożyć na większą porcję wiedzy dla pojedynczego słuchacza (który miał się stać aktywnym uczestnikiem). Odliczyliśmy do trzech i ostatecznie uformowały się 3 czwórki (hmmm...dlaczego nie podzieliliśmy grup na 4 trójki?!)


Sądzę, że to był hit sezonu. Praca w mniejszych grupach sprawiła, że ludzie musieli się poznać z innymi w grupie (wartość sama w sobie) oraz trudniej było utrzymać siebie w roli biernego słuchacza. Nie trzeba było być bacznym obserwatorem, aby zaobserwować zalety takiego podejścia. Wystarczy spojrzeć na zdjęcia.


Po podziale na grupy, kiedy to wszyscy się dobrze usadowili, oznajmiłem przerwę "obiadową". Postanowiłem tym samym rozruszać nasze informatyczne ciała i kolejny raz zmusić do interakcji między uczestnikami. Udało się! Po chwili uformowaliśmy koło, w którym każdy podzielił się swoimi doświadczeniami z wdrażania/użycia Scali w projektach. Szkoda, że nie mam zdjęcia z tego momentu. Trzeba było w tym wziąć udział, aby przekonać się, jak ważne są takie małe ruchy integracyjne.


Około 18:15 (tak, tak, uważny obserwator dostrzeże pewną, nieznaczną rozbieżność w czasie między tą relacją a stanem faktycznym) przeszliśmy do zadań.

I tu kolejna nowość, trzymanie się czasu na rozwiązywanie zadań. Włączyłem stoper i rozpoczęliśmy rozwiązywanie P11. Później było P12 i skończyliśmy na P13. Wymienialiśmy się rozwiazaniami za pomocą serwisu GitHub Gist. Dzięki uprzejmości MIM UW mieliśmy pełny dostęp do Internetu, więc wystarczyło poznać numer gista i można było omawiać rozwiązanie zadania. Jakoś tak czas nam upływał przy dyskusjach i ostatecznie jedynie 3 zadania udało nam się rozwiązać. Tutaj trzeba popracować nad sprawniejszą obsługą.


Kolejna edycja scalania 5 będzie specjalna, bo prowadzona podczas warsztatów warsjawa 12 października na MIM UWie. Zaczynamy o 9:30. Są jeszcze miejsce, więc gorąco zachęcam do udziału! Wystarczy napisać do mnie.