Z dumą sponsorowaliśmy tegoroczną odsłonę GeeCON w Krakowie. To były 3 dni pełne wiedzy i inspiracji. Przeczytajcie relację z konferencji.
GeeCON to konferencja skupiona wokół technologii Java oraz JVM, ze szczególnym akcentem na języki dynamiczne – Groovy czy Ruby. Spotkania podczas konferencji to pole do wymiany doświadczeń na temat nowoczesnych metodologii tworzenia oprogramowania.
Dzień pierwszy
David Moore - Platform and Product Evolution at Sabre
Tegoroczną konferencję rozpoczęliśmy od zagadnienia, z którym każdy programista prędzej czy później się spotka w swojej zawodowej karierze. Chodzi o pracę nad kodem, który odziedziczymy po programistach, którzy już opuścili firmę, w której pracujemy. Taki stary kod, którego szczegółów implementacyjnych już nikt nie zna, jest bardzo trudny w utrzymaniu i ewentualnym wprowadzaniu zmian.
David Moore podzielił się z nami swoimi doświadczeniami z tego typu problemami. Wykład ten był doskonałym źródłem wiedzy dla osób, które spotkają się z odziedziczonym kodem. Wszystkie tezy zostały poparte przykładami z rzeczywistych systemów, co było ekstremalnie przekonywujące. Wystąpienie było szczególnie interesujące dla młodszych programistów, ale jestem przekonany, że również doświadczeni koderzy wynieśli z niego sporo przydatnych informacji.
Matt Raible - Building a PWA with Ionic, Angular and Spring Boot
Matt Raible był kolejnym prelegentem, którego miałem okazję posłuchać. Przedstawił się nam jako fanatyk Javy oraz wielki fan van’ów marki VW. Po nietypowym wprowadzeniu starał się pokazać inny sposób projektowania aplikacji, które będą działać na wszystkich urządzeniach, niezależnie od rozmiaru aplikacji.
Kluczowym tutaj elementem, było rozpoczęcie projektowania aplikacji od małych ekranów (np. małego ekranu smartfonu). Dopiero w drugiej kolejności developer powinien zwracać uwagę na dostosowanie strony do pełnych rozmiarów, które użytkownicy zobaczą na komputerze. W ten sposób jeden design strony, będzie funkcjonalny wszędzie.
Dodatkowo pokazane zostały narzędzia, które wspomagają to podejście. Czyli Ionic wspierany przez Angular’a oraz Spring Boot’a. Już od jakiegoś czasu technologiczne trendy wieszczą “czas mobile” zdaje się zatem, że deweloperzy również podchodzą do tego coraz poważniej.
Milen Dyankov - What's NOT new in modular Java?
Modularność Javy jest cechą, którą zachłannie wykorzystujemy jako programiści. Jednak łatwo zapomnieć się i wtedy kończymy z bardzo rozbudowaną aplikacją, której każdy poszczególny moduł złączony jest z masą innych. Sprawia to, że aplikacja jest niemal niemożliwa do zarządzania.
To była teza, która była motywem przewodnim tej konferencji. Jednak nie skończyło się tylko na jej postawieniu. Prowadzący pokazał nam narzędzia: OSGI oraz nowość w Javie czyli JPMS. Wszystko to miało na celu wskazanie nam technik, które umożliwią napisanie uporządkowanej aplikacji. Takiej, którą łatwo się zarządza oraz takiej, którą łatwo można będzie zmodyfikować w przyszłości.
Alexander Gallego - Distributed Stream Processing Over Thousands Of Datacenters
Wykład o procesowaniu w rozproszonych systemach, zgodnie z oczekiwaniami słuchaczy poruszał tematy złożoności w takich systemach. Trudności z tego wynikające są zmorą wszystkich programistów zajmujących się tymi problemami.
Rozczarowaniem dla słuchaczy było zapewne, że nie usłyszeliśmy tak naprawdę o żadnych konkretnych rozwiązaniach tych problemów. Fakt, poruszone problemy były realne i zgodne z tym co każdy z nas pracując nad rozproszonymi systemami o dużej skali napotyka, jednak zabrakło rozwiązań albo chociaż sugestii co z nimi robić.
Dzień drugi
Jakub Marchwicki, Jarosław Pałka - Stages of maturity on the way to microservices
Wykład Jakuba i Jarosława został przeprowadzony w wyjątkowo oryginalny sposób. Była to raczej dyskusja, która była próbą odtworzenia ich poprzednich dyskursów w tym temacie. W ten sposób słuchacze zostali poprowadzeni poprzez ich tok rozumowania, który doprowadził do wniosków, przedstawionych w prezentacji.
Głównym celem było zniechęcenie nas do korzystania z mikrousług. Prowadzący pokazywali nam założenia tej techniki, jednak bazując na swoich doświadczeniach wskazywali zagrożenia, które czekają na programistów na poszczególnych etapach.
Świadome i rozsądne korzystanie z mikrousług, było wnioskiem, z którym pozostawili nas prowadzący. Mikrousługi są techniką dającą wielkie możliwości, ale jednocześnie trudną pod względem wydajnościowym i programistycznym. Co za tym idzie powinny być wykorzystywane w sytuacjach, gdy jest to naprawdę wskazane. Obecnie programiści często korzystają z nich ponieważ są „modne”.
Marcin Grzejszczak - Consumer-Driven Contracts to enable API evolution
Tak zwane kontrakty, o których mówił Marcin Grzejszczak podczas swojego wystąpienia, mają na celu wykluczenie potencjalnych błędów podczas integracji systemów poprzez API. Metodyka ta ma na celu odwrócenie sposobu pisania testów do interfejsów za pomocą, których aplikację się z sobą komunikują.
Zazwyczaj to strona kliencka w komunikacji piszę sobie testy do swoich metod. Odwrócenie zaproponowane w tej metodologii, polega na tym, że strona serwera definiując komunikację pomiędzy systemami, jednocześnie piszę testy. Strona klienta wtedy testuje swoją część komunikacji za pomocą tych testów.
Cała prezentacja została zakończana analizą rzeczywistego przykładu opartego o tą metodykę. Oraz przykładami kodu źródłowego takich kontraktów.
DuyHai Doan - Big Data 101, all the foundations you need to bootstrap a new project in 2017
Prelekcja o dużych ilościach tak naprawdę poruszała temat bazy danych Cassandra i użycia jej w tego typu aplikacjach. Dla tych którzy zastanawiają się nad użyciem tej właśnie bazy danych, wykład DuyHai Doan’a był idealnym przykładem pracy nad nią.
Prowadzący pokazał nam problemy, na które natrafi każdy kto będzie próbował zastosować tę bazę. Dodatkowo bardzo dokładnie je przeanalizował, wskazując kiedy daną bazę należy stosować, a kiedy jest to niewskazane.
Andrew Sorensen - Sound Synthesis in the Computational Crucible
Na koniec drugiego dnia, organizatorzy przygotowali ciekawostkę w postaci występu Andrew Sorensen, który w swojej pracy łączy programowanie oraz muzykę. Andrew występuje jako DJ, a swoją muzykę tworzy poprzez język programowania. Podczas występów na żywo publiczność może obserwować kod źródłowy na ekranach.
Podczas wykładu mogliśmy posłuchać występu na żywo oraz obserwować jak tworzony jest kod, który przetwarzany był na muzykę. Był to zdecydowanie najbardziej oryginalny wykład podczas całej konferencji. Zainteresowanych odsyłam do materiału video.
Dzień trzeci
Henning Schwentner - Value types - The Next Big Thing for Java
Wykład Henninga Schwentner’a był ciekawostką omawiającą zagadnienie, które dopiero pojawi się w przyszłej wersji Javy (10). Niezwykle interesującym było pokazanie przez prowadzącego składni, która jeszcze nie została do końca ustalona i jest jeszcze w fazie rozwoju. To zdecydowanie rzuca nowe światło na sposób w jaki ewoluują duże języki programowania.
Głównymi zagadnieniem były typy, które wskazują na konkretną wartość, a nie zmienną. Jest to nowość zaczerpnięta z innych języków. Motywacją dla wprowadzenia takiej funkcjonalności była oczywiście wydajność, czyli oszczędzanie miejsca na inicjalizację wielu zmiennych o tej samej wartości, podczas gdy będzie można wskazywać z wielu miejsc na tę samą wartość.
Jakub Kubryński - JPA beyond copy-paste
Tezą tego wykładu, było nieświadome korzystanie przez developerów z narzędzia JPA. Ponieważ JPA ułatwia i upraszcza pracę developera, wielu z nas zapomina o optymalizacji i zakłada, że narzędzie zrobi wszystko za nich. Nie jest to prawdą i poznaliśmy przykłady problemów na które można się natknąć.
Tematy, które zostały poruszone:
- różnice pomiędzy set, bag i list.
- Problem N+1 podczas wyciągania danych poprzez lazy
- Różnice pomiędzy persist/merge
- Optymistic locking
- Hashcode number in ID problem
- Flush modes
Wszystkie te tematy były dobrymi przykładami, jak łatwo ulegamy ułatwiającym życie framework’om, które sprawiają, że mamy mniej pracy, jednak podczas nieprzemyślanego wykorzystywania, mogą one negatywnie wpłynąć na końcową wydajność aplikacji.
Jakub Marchwicki - Java9 and REPL. Forget debugging, welcome joy and productivity
REPL czyli interaktywne środowisko programowania, które pojawi się wkrótce w nowej wersji Javy, było tematem tej prelekcji. Prowadzący zaprezentował nam możliwości tego narzędzia w formie dema.
Takie interaktywne środowiska znane są doskonale programistom z innych języków. Zwłaszcza z tych stosunkowo młodych, które powstały niedawno oraz języków skryptowych. Ta nowa funkcjonalność, która pojawi się w najbliższej wersji javy, może znacząco ułatwić eksperymentowanie z tym językiem. Eliminuje to potrzebę żmudnego kompilowania i testowania aplikacji, a umożliwia lekką „zabawę” z krótkimi kodami. Funkcjonalność ta w połączeniu z wyrażeniami lambda i stream’ami z poprzedniej wersji Javy daje naprawdę duże możliwości.
Avishai Ish-Shalom - Actionable Exceptions
Podczas swojego wystąpienia Avishai Ish-Shalom podzielił się z nami spostrzeżeniami na temat nadużywania przez developerów mechanizmu wyjątków w swoich aplikacjach. Po krótkim przedstawieniu czym zajmuje się zawodowo oraz jaki gatunek whisky preferuje podczas programowania, zaczął uświadamiać nam jak często rzucamy wyjątek w sytuacji, gdzie wystarczyłoby użyć instrukcji warunkowej.
Spostrzeżenia te oraz wnioski poparte były danymi z analizy kodów części aplikacji znajdujących się na github’ie. Wykazał ona, że w zdecydowanej większości developerzy nie przejmują się łapaniem błędów i sensownym rozwiązaniem problemu. W większości są one logowane albo gaszone.
Wykład ten poruszył temat, który naprawdę umyka praktycznie każdemu programiście. Było to prelekcja, która zdecydowanie otworzyła oczy wielu z nas na nieprawidłowe wykorzystanie jednej z najczęściej stosowanych technik w języku Java.
Rod Johnson (Creator of Spring) - Simplification and Automation in Java: Yesterday, Today and Tomorrow
Ostatnim wykładem podczas tegorocznego GeeCON’a była prelekcja Roda Johnson’a. Jednego z twórców najpopularniejszego framework’u w Javie, czyli Spring. Główną ideą Spring’a jest konwencja ponad konfigurację.
Dokładnie ta teza była motywem przewodnim prelekcji. Idea ta jest rozwijana w projekcie Atomist, który został zaprezentowany w formie dema podczas prezentacji. Narzędzie to umożliwia łatwe automatyzowanie budowania aplikacji. Idea znana z framework’u Spring, czyli konwencja ponad konfigurację, została tutaj rozwinięta. Dzięki temu powstało narzędzie, w którym jeżeli pójdziemy zgodnie z konwencją, możemy bardzo małym nakładem pracy zautomatyzować nasze procesy.
A Wam jakie prelekcje z tegorocznej edycji GeeCON’a najbardziej zapadły w pamięć? Co uważacie za przydatne? A może coś Was rozczarowało? Zapraszamy do dyskusji w komentarzach!