W niedzielę o 19:00 skończyliśmy 3 dniowy hackathon zorganizowany w firmie e-point i dla jej pracowników, którego celem było zapoznanie się „w boju” z najpopularniejszym frameworkiem do pisania aplikacji w języku Java – Spring4. Pomysł wziął się stąd, że na co dzień pracujemy z własnym frameworkiem OneWeb i nie jesteśmy na bieżąco z tym co się dzieje „na zewnątrz” – jak ktoś to ładnie ujął, jesteśmy izolowani jak Japonia… Biznesowym celem było napisanie aplikacji do obsługi naszej firmowej biblioteki.
Pierwszego dnia, w piątek, większość dnia spędziliśmy na prezentacjach, kiedy to kolega Piotrek wprowadzał nas „teoretycznie” w nowe narzędzia i technologie: środowisko programistyczne IntelliJ Idea, środowisko budowania aplikacji Gradle, framework Spring4 oraz Hibernate. Resztę pierwszego dnia oraz połowę drugiego spędziliśmy na „poskramianiu” Spring oraz Hibernate, tak aby można było w końcu zobaczyć strony aplikacji generowane danymi z bazy. Resztę czasu spędziliśmy na dodawaniu kolejnych ekranów i funkcji i to był dopiero naprawdę efektywny okres.
Podsumowując hackathon jednym zdaniem, to fajnie spędziliśmy czas i dużo się nauczyliśmy ale cel biznesowy nie został zrealizowany. Ilość problemów „wieku dziecięcego” spowodowała że straciliśmy masę czasu na osiągnięcie zdolności bojowych i na implementacje kolejnych ekranów aplikacji zostało zbyt mało czasu.
Pod koniec dnia trzeciego zrobiliśmy sobie retrospektywę podsumowującą nasze prace.
Wyniki retrospektywy
Pozytywy, to co nas „napędzało”:
- Pozytywne nastawienie i praca grupowa – bez stresu i przymusu – wszyscy pracowali tak jak wcześniej zadeklarowali, mimo niedogodności nikt nie marudził…
- Bezpośrednia komunikacja – siedząc w jednym pokoju obok siebie wzajemnie sobie pomagaliśmy oraz konsultowaliśmy pomysły.
- Wspólne obiady (na koszt firmy…) i rozmowy kuluarowe.
- Poznawanie nowych technologii:
- Spring 4: ładny MVC, automatyczne rozwiązania (jeżeli działały…), szybkie i proste tworzenie kontrolerów, użycie annotacji do konfiguracji (szczególnie mapowania URL i parametrów oraz bezpieczeństwo),
- Thymeleaf – nowe narzędzie do tworzenia szablonów HTML – szybkie i bezproblemowe wpięcie w Spring, ładna składnia wymuszająca myślenie „divami” i działanie jako zwykły HMTL,
- Gradle: ładna i zwarta składnia, proste uruchamianie, integracja z IntelliJ Idea,
- użycie IntelliJ Idea, aczkolwiek widać było minusy wersji „community”.
- Dobre przygotowanie hackathonu: model bazy z danymi testowymi, prototyp, user stories i zaczyn aplikacji (choć – jak się okazało – za mały…)
Problemy:
- Brak JRebel i konieczność restartów serwera Tomcat po każdej zmianie w kodzie Java.
- Problemy z kleszczeniem się uruchomień Gradle: jeżeli działał tomcat, to nie można uruchomić nic innego, np. clean.
- Dużo czasu spędzonego przez brak wygenerowanych klas POJO annotowanych dla Hibernate – hibernate-tools nie działało, a poratowanie się narzędziem z Idea Ultimate wprowadziło wiele błędów: Collection zamiast Set, nieprawidłową obsługa typów TEXT z PostgreSQL, masowanie błędów utrudniając ich analizę, brak odwzorowania relacji wiele-do-wielu powodujący cykle.
- Dużo czasu spędzonego na walce z uruchomieniem JBoss 5 (nieudanego, bo Spring4 usunął wsparcie dla mechanizmu VFS) i JBoss 7.
- Zbyt mała wiedza wejściowa o Spring4:
- brak dobrej wstępnej konfiguracji,
- magiczne nieoczywiste rozwiązania,
- dziwny i nieoczywisty sposób zabezpieczania kontrolerów annotacją @secured,
- brak jednoznacznych wzorców dotyczących specyficznych rozwiązań, np. czy filtrowanie/pagerowanie/sortowanie tabeli ma być zapisywane w URL, modelu czy sesji,
- zbyt dużo konfiguracji Spring zostało napisane w XML zamiast przy pomocy błogosławionych annotacji,
- brak klasy bazowej dla kontrolerów ze wspólnymi annotacjami.
- Użycie dbm-plugin z maven1 do inicjalizacji bazy danych który nie działał pod Windows, przez co część osób nie miała dostępu do danych testowych.
- Nie zdążyliśmy napisać testów jednostkowych.
- Niższa wydajność developowania na wolniejszych laptopach vs. firmowych stacjach roboczych.
Zagrożenia:
- Brak implementacji autoryzacji przez firmowy LDAP/IMAP.
- Brak komponentów wizualnych w Thymeleaf.
Pomysły, idee na przyszłość:
- Szkolenie mogłoby być wcześniej niż sam hackathon żeby dać szansę na przetrawienie wiedzy.
- Powinniśmy lepiej poznać Spring 4 żeby użyć pewnych rozwiązań czy idei we własnym frameworku:
- mniej zależne obiekty i łatwiejsze pisanie testów,
- konfiguracja przez annotacje.
- Trzeba się motywować do zdobywania nowej wiedzy.
- Powinniśmy wdrożyć Gradle w całej firmie i zapomnieć o maven1.
- Vertabelo powinno umożliwić generowanie POJO z annotacjami dla Hibernate, w tym dodawanie specjalnych metainformacji do modelu – killer-feature biznesowy.
- Projekt powinien być tak udostępniony żeby móc go developować dalej z domu.
- Kiedy robimy kolejny hackathon? 🙂
Moje prywatne podsumowanie
- Budowanie aplikacji i deployowanie na serwer aplikacyjny jest bardzo niewdzięczną pracą: długotrwałą i wymagającą cierpliwości w rozwiązywaniu dużej ilości błahych problemów – przez to że dałem się w to wpędzić straciłem wiele czasu, który mógłbym przeznaczyć na kodowanie.
- IntelliJ Idea wcale nie jest tak bardzo lepsza od poczciwego Eclipse: ciężko się jest przesiąść i poznać wszystkie odpowiedniki umożliwiające efektywną pracę a obiecywana „inteligencja” wcale nie jest taka super. Jednak miałem zbyt mało czasu żeby obiektywnie poczuć plusy.
- Hibernate ma te same problemy które pamiętam sprzed 8 lat, ciągle dostaje się problemy z LazyInicialization :-). Cieszę się że na co dzień używam naszego OR-mappingu którego prostota jest najmocniejszą zaletą.
- Kiedy robimy kolejny hackathon żeby dokończyć aplikacje? 🙂
Dodam od siebie:
+ latwosc pisania testow do kontrolerow – prawdziwe TDD,
+ mockito i assertj,
+ atmosfera,
+ istnieje mozliwosc organizowania hackatonu w wiekszej sali firmowej,
– potrzeba wdrozeniowca/hostingowca by przygotowac wdrozenie,
– brak spotkania organizacyjnego przed, by podzielic sie tematami do opracowania,
– szkielet aplikacji nie powinien byc demem a opierac sie na jakims prostym CRUDzie,
– repo do trzymania kodu na jakims prywatnym githubie dostepnym spoza firmy.
Calosc oceniam bardzo na plus! Chetnie bede uczestniczyl w kolejnej edycji. Dzieki za organizacje.