Szkolenia

Od kilku lat prowadzę szkolenia z Efektywnej Refaktoryzacji, Refaktoryzacji do Wzorców. W wolnym czasie przygotowuję kolejne ale wyłącznie takie, gdzie refaktoryzacja będzie ich ważną częścią (są to Test Driven Development oraz Working with Legacy Code). Szkolenia te zawsze składają się z części technicznej (live-refactoring) oraz motywacyjno-psychologicznej (gdyż umiejętności bez chęci i motywacji moim zdaniem nie wystarczą).

Obecnie w swojej ofercie posiadam dwa szkolenia. Każde w nim może być prowadzone na środowisku Eclipse lub IntelliJ. Warunkiem jest jednak uzgodnienie którego środowiska będzie używać cała grupa, gdyż niektóre rzeczy w środowisku Eclipse nie są zautomatyzowane i trzeba je zrobić ręcznie. Dodatkowo skróty klawiszowe w każdy srodowisku są inne.

  1. Efektywna Refaktoryzacja

    Refaktoryzacja to teoretycznie bardzo dobrze znana koncepcja. Praktycznie każdy o niej słyszał. Ale czy wiemy jak do niej podejść w praktyce? Czy za teorią często nie stoi chęć napisania danego kodu od nowa ponieważ już go nie lubimy albo już nie nadaje się nawet do przeczytania i szybkiego zrozumienia?
    To praktyczne szkolenie pokazuje jak podejść do refaktoryzacji w najmniejszych możliwych krokach, robiąc z niej naszą codzienną praktykę. Szkolenie ma za zadanie zmotywować programistów do wspólnej jak i samodzielnej pracy nad jakością kodu każdego dnia – co jest konieczne do dostarczenie kodu wysokiej wartości.
    Podczas szkolenia przedstawiona zostanie koncepcja piramidy refaktoryzacji

    • Zrozumienie Algorytmu
    • Ekstrakcja mniejszych metod
    • Ekstrakcja mniejszych klas
    • Zauważenie relacji pomiędzy klasami (i wyłaniających się wzorców projektowych)
    • Uporządkowanie architektury (pakietów)

    Szkolenie koncentruje się głównie na pracy z kodem źródłowym z wykorzystaniem wbudowanych zautomatyzowanych refaktoryzacji w narzędziach takich jak IntelliJ lub Eclipse. Kod źródłowy napisany jest w Javie. Trener wykonuje wszystkie przekształcenia refaktoryzacyjne na żywo, po czym uczestnicy mogą doświadczyć tego samego poprzez pracę z tym samym kodem na własnym laptopie. Pozostałe 25% czasu poświęcone jest na prezentację i dyskusję mające na celu zrobienia z refaktoryzacji codziennego nawyku każdego programisty / zespołu.
    Szkolenie to nie jest szkoleniem z architektury. Różne zespoły mogą mieć różne preferencje dotyczące rozwiązań architektonicznych. Celem jest nauczenie jak łatwo i szybko można zmieniać architekturę kodu z jednego podejścia do innego.

    Część 1

    1. Zapoznanie z prostym kawałkiem kodu który łatwo i szybko go można zrozumieć
    2. Dyskusja jak prosto i szybko można rozszerzać taki kawałek kodu metodą kopiuj-wklej równocześnie zmniejszając jego czytelność
    3. Podzielenie kodu na mniejsze części (metody, klasy, interfejsy) z użyciem podejścia Piramidy Refaktoryzacji
    4. Nauka wbudowanych automatycznych refaktoryzacji w środowisku IntelliJ lub Eclipse
    5. Zasady SOLID jako podstawy do podziału architektury na mniejsze części

    Część 2

    1. Zapoznanie z kodem z części 1 gdzie nowa funkcjonalność została dodana bez dokonania jakichkolwiek refaktoryzacji
    2. Przedstawienie kolejnej dodatkowej funkcjonalności którą chcemy dodać do projektu
    3. Dyskusja, że możemy to zrobić szybko ale dalej obniżając czytelność i jakość kodu
    4. Wykonanie “ekstrakcji punktów rozszerzenia” jako wynik “podróży refaktoryzacyjnej” z użyciem koncepcji Piramidy Refaktoryzacji
    5. Dostarczenie nowej funkcjonalności jako nowa implementacja “punktu rozszerzenia” z użyciem TDD

    Szkolenie jest bardzo intensywne i na podstawie doświadczeń (tj. przeprowadzenia go wiele razy) proponowane podejście do 2 dni po 4 godziny. Takie podejście pozwala także programistom na wrócenie do ich codziennych zajęć na pozostałą część dnia. Na życzenie szkolenie może także zająć 1 dzień (bardzo intensywny) lub zostać rozszerzone do dwóch pełnych dni.

    Poziom: początkujący lub średnio zaawansowany, aczkolwiek starsi programiści także wielokrotnie twierdzili że dowiedzieli się wielu nowych rzeczy którymi mogli się następnie podzielić w zespole.

    Podczas szkolenia nauczysz się jak zacząć od najmniejszych refaktoryzacji aby następnie zauważać wzorce projektowe które wyłaniają się z relacji pomiędzy mniejszymi klasami. “Refaktoryzacja do wzorców”  jest tematem drugiej części tego szkolenia.

  2. Refaktoryzacja do Wzorców

    Wzorce znajdziemy wszędzie wokół nas. Symbolizują coś powszechnego i użytecznego. Coś co się sprawdziło jako znane podejście do rozwiązania pewnej grupy problemów poprzez swoją efektywność oraz reużywalność.W 2015 roku Ralph Johnson (jeden z czterech autorów pierwszej książki o wzorcach projektowych) podczas swojego wystąpienia “21 lat wzorców projektowych” powiedział “mogliśmy wykonać naszą pracę lepiej, ale myślę, że wykonaliśmy ją całkiem dobrze”.

    Zwykle jednak wzorce nie są widoczne jako potrzebne w naszym kodzie od samego początku. Zapewne to dobrze bo same wzorce także wprowadzają dodatkowy poziom złożoności. Ale kiedy naszego kodu jest coraz więcej i coraz trudniej go zrozumieć, to zaczynamy myśleć w kategoriach “gdyby tylko w tym miejscu został użyty wzorzec strategii, fabryki, stanu zamiast sieci if-else lub switch…”.

    Podczas tego szkolenia uczestnicy zapoznają się z przykładowymi refaktoryzacjami do kilku znanych wzorców projektowych. Niemniej jednak aby było to do wykonania w rozsądnym czasie to przykłady w tym szkoleniu są już częściowo przygotowane na tę refaktoryzację.

    Refaktoryzacje przedstawione na szkoleniu prowadzą do następujących wzorców

    • (Fluent) Builder
    • Composite
    • Factory Method / Abstract Factory
    • Template
    • Bridge
    • Interpreter
    • State (jeżeli czas pozwala)


    Szkolenie to jest zaplanowane jako kontynuacja “Efektywnej Refaktoryzacji”. Wynika to z założenia że wstępne oczyszczenie kodu (brakujące testy, mniejsze metody i klasy) już zostało (częściowo) dokonane. Jest to konieczne gdyż w przeciwnym wypadku nie będziemy w stanie zauważać wyłaniających się wzorców projektowych z gąszczu kodu legacy.

    Uczestnicy szkolenia będą mogli doświadczyć jak wzorce projektowe mogą uprościć nasz kod, ale i także jak mogą go skomplikować jeszcze bardziej poprzez nieumiejętne ich użycie. To , że zastosowanie danego wzorca projektowego rozwiązuje obecne problemy, nie znaczy że rozwiąże także kolejne. Często może się stać w przypadku nowych wymagań obecna architektura stanie się utrudnieniem – szczególnie przy podejściu do architektury metodą kopiuj-wklej bez dalszych refaktoryzacji.

    To że wzorce projektowe wnoszą do projektów bardzo dużą wartość poprzez zmniejszenie złożoności (a może raczej zapanowanie nad nią) nie znaczy, że powinny być one stosowane od samego początku. Wynika to stąd, że użycie wzorców uprasza nasz kod dopiero od pewnego stopnia skomplikowania. Kiedy wzorce zostaną zastosowane zbyt wcześnie to same spowodują dodatkowe problemy. Stąd temat refaktoryzacji do wzorców projektowych jest bardzo ważny aby umieć je zastosować w odpowiednim momencie, kiedy jest to potrzebne.

    Szkolenie jest bardzo intensywne i na podstawie doświadczeń (tj. przeprowadzenia go wiele razy) proponowane podejście do 2 dni po 4 godziny. Takie podejście pozwala także programistom na wrócenie do ich codziennych zajęć na pozostałą część dnia. Na życzenie szkolenie może także zająć 1 dzień (bardzo intensywny).

    Poziom: początkujący lub średnio zaawansowany, aczkolwiek starsi programiści także wielokrotnie twierdzili że dowiedzieli się wielu nowych rzeczy którymi mogli się następnie podzielić w zespole.


Każde z wyżej wymienionych szkoleń może być prowadzone w wersji 2 dniowej (rozszerzonej) jak i jednodniowej.