Minęła kolejna konferencja JDD, dwa dni prelekcji związanych z językiem Java, narzędziami dla developerów i zarządzaniu projektami. Cztery ścieżki, dużo uczestników, zróżnicowane tematy i poziom. Do tego ciekawe wnętrza Nowohuckiego Centrum Kultury i bonusowo wystawa malarstwa Beksińskiego.
Uwagi do samej konferencji
Miejsce konferencji, mimo dużej odległości od centrum Krakowa, było dobre: duże sale (w szczególności sala kinowo-teatralna), względnie szerokie korytarze, sporo miejsca do odpoczynku. Na pochwałę zasługuje także organizacja rejestracji uczestników, mimo przybycia na 20 minut przed otwarciem kolejka była krótka, a obsługa bardzo sprawna. Również aplikacja mobilna do obsługi konferencji (Eventory) spisywała się świetnie, oprócz agendy (na szczęście stabilnej) prezentowała aktualne powiadomienia od organizatora.
Zanim przejdę do podsumowania merytorycznego, kilka słów o organizacji – może to nie aż tak ważne jak same wykłady, ale warte wspomnienia. Pierwszym minusem była zawartość pakietu „startowego”, po pominięciu wszyskich ulotek partnerów została mi tylko skromna tekturowa podkładka pod kubek (fajna). Pamiętam że na poprzednich konferencjach było więcej gadżetów, w szczególności nieodzowny notatnik i długopis, choć te akurat na życzenie można było otrzymać w recepcji. Drugim rozczarowaniem był fakt że żeby otrzymać koszulkę z konferencji trzeba było zebrać w aplikacji mobilnej potwierdzenia odwiedzenia wszystkich stanowisk sponsorów :-(. Jestem świadom że sponsorzy płacą więc wymagają „atencji” uczestników, jednak ja wolałbym żeby nagrodą było coś innego, a koszulka była rozdawana bezwarunkowo. Na plus należało zaliczyć catering – ilość i atrakcyjność słodyczy była wręcz nadmiernie kusząca, na szczęście były też kanapki i jabłka. Lunche były wydawane sprawnie, jednak porcje mogłyby być większe ;-).
Widać było duży nacisk na międzynarodowość, bo wiele prelekcji było prowadzonych po angielsku, także przez polskich prelegentów. Jednak, co zaskakujące, ceremonie otwarcia i zamknięcia były prowadzone tylko w języku polskim, mimo że zawierały dużo istotnych informacji, jak organizacja imprezy integracyjnej – na miejscu zagranicznych gości poczułbym się nieco pominięty.
Poniżej podsumowanie ciekawszych prezentacji których słuchałem.
Sebastian Malaca: The answer is… it depends
Doświadczony prezenter, nieźle przedstawiony temat. Omówiono szereg decyzji które trzeba podejmować w projekcie i zespole z różnych perspektyw, a puenta była taka że na niczym nie należy się bezrefleksyjnie upierać, bo wszystko zależy od wielu czynników: wielkości, typu i etapu projektu, wielkości, sposobu pracy i doświadczenia zespołu, sytuacji politycznej (firmy). Z mojej perspektywy nie dowiedziałem się nic nowego ale chciałbym żeby taka prezentacja dotarła do wszystkich członków zespołów w firmie w której pracuję, w szczególności tych młodszych, postrzegających wszystko w białych i czarnych kolorach…
Jarosław Czub: Wprowadzenie do DL4J, czyli sieci neuronowe okiem developera
Trudny temat, a prezentujący (w mojej opinii) nie dostosował odpowiednio poziomu do uczestników oraz bardzo szybko mówiąc próbował przedstawić zbyt dużo informacji w dostępnym czasie. Przez to na samo użycie biblioteki DL4J w Javie zabrakło czasu. Na plus należy zaliczyć atrakcyjne animacje uczącej się sieci.
W międzyczasie sprawdziłem w sieci że przygodę z Deep Learing najlepiej byłoby zacząć od książki Deep Learning z 2016 roku lub jego polskiego tłumaczenia z Helion z 2018, jednak sama jej obszerność (900 stron) budzi respekt.
Patrick Kua (N26): Talking with Tech Leads
Patrick pracujący obecnie w „wirtualnym banku” jest autorem książki o takim samym tytule. Moim zdaniem to jedna z najlepszych prezentacji na tegorocznym JDD: dynamiczna, w 100% wypełniona treścią, bez odrobiny przynudzania, z idealnymi slajdami.
Prezentujący świetnie pokazał skąd się biorą liderzy techniczni, z jakimi rozterkami mają do czynienia i jak najlepiej w tej roli sie odnaleźć. W przeciwieństwie do naiwnego podejścia, w którym doświadczony programista może albo zostać „zamkniętym w piwnicy” ekspertem albo managerem który straci kontakt z technologią i wiarygodność w zespole technicznym, przedstawiony został trzeci wariant lidera technicznego. Lidera który 70-80% swojego czasu poświęca na pracę w zespole, kreowanie wizji i podejmowanie decyzji technicznych, zarządzanie ryzykiem i długiem technicznym, zbieranie i propagacją wiedzy. Tylko 20-30% czasu powinno być przeznaczane na „nietechniczną” resztę: spotkania z klientem, pomoc w zarządzaniu, organizacji, tworzeniu harmonogramów, itp.
Jako ważna rzecz został wymieniony system wsparcia od organizacji dla liderów technicznych w różnych aspektach, tak aby łatwiej wchodzili w tą rolę, rozwijali się w niej i nie tracili czasu na zadania które może robić ktoś inny.
Michał Kordas: Assuring top-notch code quality in the Java Universe
Dobra prezentacja uzasadniająca dbanie o jakość kodu i wiedzę zespołu, jednak dla mnie większość poruszanych tematów była znana i oczywista. Wartością było podpowiedzenie kilku nowych narzędzi do statycznej analizy i naprawiania kodu których wcześniej nie znałem i wydają się warte rozważenia:
- sonarlint – dodatkowy plugin do IntelliJ Idea z rozbudowanymi regułami,
- google-java-format – plugin do INtelliJ Idea formatujący kod „w locie”,
- Error Prone – kolejny plugin sprawdzający poprawność ale w czasie budowania, zarówno IntelliJ Idea ale także w gradle,
- spotless – sam poprawia błędy w czasie budowania,
- EditorConfig – zawiera podstawowe ustawienia interpretowane przez wiele edytorów (przyda się np. FED’om).
Ciekawym wątkiem było zróżnicowanie osób które zatrudnia się do zespołu podsumowane cytatem „We hired rockstars & ninjas, but now the office is just filled with smashed guitars and corpses.” i podsumowanie, że najlepiej kierować się zasadą KISSSSS: „keep it straightforward, small, short, and stupid simple, silly!” – to wygląda na rozwinięcie klasycznej zasady KISS zaadaptowanej na bardziej swojsko brzmiące BUZI: „Bez Udziwnień Zapisu, Idioto” :-).
Prowadzący miał pecha, bo w czasie jego prezentacji wystąpił szereg problemów technicznych: na początku migający projektor, później przerywające nagłośnienie…
Łukasz Koziel: Scaled Retrospective – improvements bigger than a Scrum Team
Doświadczony prezentujący, dobra, zwarta i ładnie poprowadzona prezentacja. Przedstawiony został mechanizm retrospektyw wyniesiony z poziomu jednego zespołu SCRUM do całości organizacji. W zasadzie jest to wzór procesu do wdrożenia w organizacji podobnej wielkości z zaleceniami na co zwrócić uwagę i czego unikać, niemal gotowy do implementacji.
Jacek Kunicki: How (Not) to Use Reactive Streams in Java 9+
Doświadczony i rzeczowy prowadzący treściwie i z przykładami z live-code’ing pokazał założenia i możliwości pakietu java.util.concurrent.Flow dostępnego od Javy 9 oraz dojście do prawidłowej implementacji metodą TDD przy pomocy testów z Technology Compatibility Kit.
Michał Gryko: Docker internals
Bardzo naturalnie i z pewnością poprowadzona prezentacja, w szczególności jak na osobę która pierwszy raz występuje na dużej konferencji. Było czuć duże doświadczenie i codzienną pracę z zagadnieniami DevOps. Poziom wiedzy był niemal „od zera”, więc większość wiedzy pamiętałem jeszcze z książki, jednak parę niansów było dla mnie nowością, w szczególności sposób oznaczania plików i folderów jako skasowane w wyższych warstwach obrazu.
Zbyszko Papierski (Dynatrace): Wzorce komunikacyjne w sieciach organicznych
Ciekawa prezentacja i dynamicznie poprowadzona, co było ważne jako że była w ostatnim slocie pierwszego dnia i o skupienie odbiorców było coraz trudniej. Z mojej perspektywy nie wniosła ona wiele nowego, jedynie potwierdziła moje dotychczasowe doświadczenie. Jednak warto zapamiętania i podkreślania przy każdej okazji są zasady podejmowania decyzji i organizacji związanych z tym spotkań zdefiniowane w Atlassian Playbook:
- wyznaczenie ról (Driver – zgłaszający, Approver – ten co podejmuje decyzje, Contributors – zainteresowani którzy będą prowadzić prace po decyzji, Informed – inni interesariusze którzy mogą się włączyć lub choćby powinni być poinformowani o decyzji),
- opis rozważanych opcji, razem z opcją „nic nie robimy”,
- plan działania: do kiedy decyzja ma być podjęta (np. 2-3 dni),
- danie szansy na przygotowania się osobom które myślą „poza spotkaniami”,
- samo spotkanie (jeżeli decyzja nie zapadła wcześniej).
Dzień 2:
Konrad Mrożek: Jak żyć bez Springa panie premierze?
Konrad rozważał czy da się stworzyć aplikacje bez najpopularniejszego stosu technologicznego Java 8, Spring Boot, Spring Data, Hibernate. Jako przykład została pokazana przykładowa implementacja. Ja pozostałem nieprzekonany, bo głównym wykazanym zyskiem może być szybkość uruchamiania, natomiast konsekwencją (pokazaną przez prowadzącego) jest użycie niestandardowego rozwiązania, konieczność podejmowania szeregu trudnych i potencjalnie nietrafionych decyzji, brak community do pomocy i wysoki próg wejścia dla nowych członków zespołu.
Sławomir Sobótka: Event Storming – skracanie dystansu pomiędzy IT a biznesem
Jedna z najlepszych prezentacji konferencji: super wprowadzenie, slajdy, angażowanie uczestników, wyważone żarty branżowe – jednym słowem show i zabawa. Z drugiej strony ambitny i ciekawy temat oraz praktyczne know-how jak można prowadzić analizę wymagań i przygotowanie projektu z klientem.
Oleh Dokuka: Refactor to Reactive with Spring 5 and Reactor 3
Temat podobny do poprzedniej prezentacji „How (Not) to Use Reactive Streams in Java 9+” Jacka Kunickiego, jednak zaprezentowany na obszerniejszym przykładzie refaktoringu działającej niereaktywnej aplikacji prezentującej wpisy z chata. Zadanie ambitne, bo prowadzący przedstawił 5 etapów refaktoringu omawiając commity w IDE, pokazując pomiędzy nimi że aplikacja nadal działa, jednak przez to miał trudność ze zmieszczeniem się w zadanym czasie. Na pochwałę zasłużył także za samo przygotowanie slajdów, atrakcyjne animacje bardzo dobrze tłumaczyły „reaktywność” wprowadzanych zmian.
Olga Maciaszek-Sharma (Pivotal): Creating and testing REST and Messaging
Przedstwienie koncepcji i sposobu implementacji kontaktów z użyciem biblioteki spring-cloud-contract do definiowania, zaślepiania (stubbowania) i testowania usług sieciowych. Prezentacja z konkretami, pewnością prowadzenia, z przykładami Live Code’ing i odpalaniu gradle/mvn – dużo wiedzy dla osób pracujących z mikrousługami i rozważającymi użycie tej biblioteki do organizacji testów.
http://github.com/OlgaMaciaszek – dużo przykładowego kodu na githubie autorki
Grzegorz Piwowarek: The Dark Side of Java 8
Atrakcyjnie poprowadzona prezentacja, fajne slajdy, dużo żartów i zaangażowanie uczestników w dyskusję. Grzegorz opowiedział o 5 sporych problemach w Javie 8 i sposobach w jaki sposób zostały rozwiązane i/lub można je ominąć w kolejnych wersjach JDK. Wnioskiem jest konieczność rozumienia drobnych niuansów które mogą znacząco wpłynąć na wydajność lub komfort pracy i fakt że warto się migrować do nowszych „małych” wersji.
Jarek Ratajski: Another year, another language
Jarek Ratajski, w nieodłącznym przebraniu mnicha, w świetny sposób przeprowadził uczestników przez historię powstawiania języków programowania na tle rozwoju samych komputerów. Wyjaśnił przyczyny powstania, użytkowników, zastosowania oraz zalety i wady poszczególnych języków: od Assemblera w 1947 do Scali w 2003. Ja bawiłem się świetnie, przypomniałem sobie pierwsze programy w Basic na Timex’ie w podstawówce, pascalu w liceum i asemblerze na studiach i – wreszcie – ustawiłem sobie to wszystko w czasie. Moim zdaniem powinna to być prezentacja obowiązkowa na pierwszym roku informatyki w liceum, ale także pierwszym roku studiów kierunków technicznych.
Tomasz Nurkiewicz: Reactive programming: lessons learned
Jedna z najlepszych prezentacji tej konferencji. Tomek, aktualny posiadacz tytułu Java Champion, przedstawił inne spojrzenie na reaktywne podejście do programowania. Odwołując się do doświadczenia w dużych projektach ale na bardzo prostych przykładach kodu, pragmatycznie przedstawił kwestie trudności tworzenia takiego oprogramowania oraz w jakiego typu projektach zysk będzie uzasadniał większe koszty. Prezentacja ta ciekawie domykała dwie inne prezentacje z tej konferencji o programowaniu reaktywnym pokazując jasno że nie jest to klucz rozwiązujący wszystkie problemy, a tylko jedna z dróg uzasadniona w bardzo konkretnych przypadkach. Technicznie bardzo dobra prezentacja, doskonałe slajdy, autorytet prowadzącego i świetny angielski – miło było słuchać.