Clean Code, dobre praktyki programowania obiektowego i wzorce projektowe

Najbliższe terminy tego szkolenia
Standardy JSystems
- Wszyscy nasi trenerzy muszą być praktykami i osiągać średnią z ankiet minimum 4.75 na 5. Nie ma wśród nas trenerów-teoretyków. Każdy trener JSystems ma bogate doświadczenie komercyjne w zakresie tematów z których prowadzi szkolenia.
- Wszystkie szkolenia mają format warszatowy. Każde zagadnienie teoretyczne jest poparte rzędem warsztatów w ściśle określonym formacie.
- Terminy gwarantowane na 100%. Jeśli jakiś termin jest oznaczony jako gwarantowany, oznacza to że odbędzie się nawet jeśli część grupy wycofa się z udziału. Ryzyko ponosimy my jako organizator.
- Do każdego szkolenia które wymaga jakiegokolwiek oprogramowania dostarczamy skonfigurowane, gotowe hosty w chmurze. Dzięki temu uczestnik nie musi nic instalować na swoim komputerze (i bić się z blokadami korporacyjnymi). Połączenie następuje przez zdalny pulpit lub SSH - w zależności od szkolenia.
Program szkolenia
- Dobry kod a zły kod
- Jak zdefiniować i zmierzyć jakość kodu
- Kliniczne objawy złego kodu
- Powody degradacji kodu
- Obrona przed pogarszaniem się jakości kodu
- Code review
- Analiza statyczna (SonarQube)
- Codzienna refaktoryzacja
- Podstawowe zasady w codziennej pracy developera
- Zasada skautów
- DRY (nie powtarzaj się)
- Zasada najmniejszego zaskoczenia
- KISS / YAGNI (rób tyle ile trzeba)
- Używanie zewnętrznych bibliotek / frameworków
- Iteracyjne tworzenie kodu
- Jak tworzyć dobry kod
- Nazewnictwo zmiennych, metod, klas
- Formatowanie
- Tworzenie czytelnych metod
- Tworzenie zrozumiałych klas
- Obsługa sytuacji błędnych; wyjątki
- Komentarze
- Warsztat - poprawa jakości istniejącego kodu
- Stworzenie testów
- Refaktoryzacja krok po kroku
- Dobre praktyki w programowaniu obiektowym
- Wysoka spójność
- Luźne powiązanie
- Polimorfizm zamiast sprawdzania typu
- Zasady SOLID
- Odwrócenie zależności
- Segregacja interfejsów
- Pojedyncza odpowiedzialność
- Zamknięcie na modyfikację przy otwarciu na rozszerzanie
- Zasada podstawienia Liskov
- Zaskakujące efekty przy dziedziczeniu
- Zastąpienie dziedziczenia kompozycją
- Ogólnie o wzorcach projektowych
- Czym jest wzorzec projektowy
- Zalety stosowania wzorców
- Klasyfikacja wzorców:
- kreacyjne
- strukturalne
- behawioralne
- Dostosowywanie istniejących rozwiązań
- adapter
- radzenie sobie z niekompatybilnym interfejsem
- fasada
- uproszczenie i redukcja interfejsu
- redukcja tzw. białego szumu przy integracji
- Drzewiaste struktury danych
- kompozyt
- proste zebranie wyniku operacji na całym drzewie
- odwiedzający (visitor)
- zebranie wyniku operacji na całym drzewie
- nie wymaga modyfikacji kodu elementów drzewa
- Tworzenie obiektów w ramach hierarchii
- prototyp
- kopiowanie elementów bez konieczności znania ich konkretnego typu
- fabryka
- ekstrakcja logiki tworzenia obiektu do oddzielnego bytu
- Ortogonalne hierarchie obiektów
- most
- redukcja ilości klas niezbędnej do zamodelowania hierarchii (suma zamiast iloczynu)
- budowniczy
- zapobieganie możliwości tworzenia niekompletnych obiektów
- wygodne i elastyczne API
- fabryka abstrakcyjna
- ekstrakcja logiki tworzenia grup obiektów do oddzielnego bytu
- Wielostronna komunikacja
- mediator
- redukcja (z kombinatorycznej do liniowej) ilości możliwych interakcji pomiędzy obiektami
- obserwujący
- całkowite przecięcie bezpośrednich powiązań między obiektami przy w pełni zachowanej komunikacji
- możliwość podejścia reaktywnego (akcje wykonują się tylko wtedy gdy są niezbędne - brak pustych przebiegów)
- Zarządzanie scenariuszami działań
- strategia
- potraktowanie algorytmu jak czarnej skrzynki i możliwość jego podmiany w zależności od zapotrzebowania
- metoda szablonowa
- redukcja ilości kodu w przypadku kilku algorytmów z dużym udziałem części wspólnej
- stan
- prostsze modelowanie systemu zachowującego się znacząco różnie w zależności od warunków wewnętrznych
- Upraszczanie algorytmów - dziel i zwyciężaj
- polecenie
- zamknięcie kilku działań w jednym obiekcie
- możliwość kolejkowania, planowania i cofania zadań
- łańcuch zobowiązań
- specjalizacja obsługi konkretnych żądań w konkretnym miejscu
- elastyczność - obsługujący nie muszą nic o sobie wiedzieć
- interpreter
- łatwość ewaluacji skomplikowanych wyrażeń
- Utrwalanie danych
- memento
- bezpieczne zapisywanie i odtwarzanie stanu obiektu z zachowaniem integralności
- pyłek (flyweight)
- optymalizacja pamięciowa przy przechowywaniu dużej ilości małych obiektów
Opis szkolenia
Szkolenie odbywa się na żywo z udziałem trenera. Nie jest to forma kursu video!Szkolenie przeznaczone jest dla programistów, chcących wyrobić w sobie nawyk pisania czytelnego i zrozumiałego dla innych kodu.
Skupiamy się nie tylko na czystym kodzie jako takim, ale pokazujemy również, jak dobrze pisać programy przy zastosowaniu paradygmatu programowania obiektowego.
Następnie w warunkach warsztatowych pokazujemy jak zastosować wybrane wzorce projektowe w realnych przypadkach i kiedy dla danego problemu można zastosować więcej niż jeden wzorzec.
Do uczestnictwa w szkoleniu wymagana jest podstawowa znajomość języka Java i biblioteki JUnit.
Prowadzący szkolenie:
Marcin Chrost
Jestem programistą z ponad 15-letnim doświadczeniem. W trakcie swojej kariery kilka
razy zmieniałem obszary, z którymi miałem do czynienia (poczynając
od niskopoziomowego programowania w C, poprzez fullstackowe zabawy
w RubyOnRails, aż do prawdziwego backendu w Javie).
Odkąd pamiętam, zawsze lubiłem dzielić się wiedzą z innymi i sprawiało to satysfakcję
obu stronom tego procesu. Dlatego naturalną konsekwencją było to, iż zostałem
kilka lat temu profesjonalnym trenerem IT.
Prowadzenie szkoleń pozwala mi również na każdorazowe powtórzenie i ugruntowanie
swojej wiedzy, co potem bardzo przydaje się w pracy projektowej. Natomiast to, co daje
mi największe zadowolenie jako trenerowi, to sytuacja gdy uczeń przerośnie mistrza -
wtedy wiem, że dałem z siebie wszystko, a moja praca przyniosła owoce.
Stanowisko robocze

Do tego szkolenia każdy uczestnik otrzymuje dostęp do indywidualnej wirtualnej maszyny w chmurze. Ma ona zainstalowane i skonfigurowane wszystko co potrzebne do realizacji szkolenia. Maszyna będzie dostępna przez cały okres szkolenia.
Gdy na jakiś termin zgłosi się minimalna liczba osób, termin oznaczamy jako gwarantowany.
Jeśli jakiś termin oznaczony jest jako gwarantowany to oznacza to, że na 100% się odbędzie we wskazanym czasie i miejscu.
Nawet gdyby część takiej grupy zrezygnowała lub przeniosła się na inny termin, raz ustalony termin gwarantowany takim pozostaje.
Ewentualne ryzyko ponosimy my jako organizator.
Przejdź do terminów tego szkolenia

Sprawdź, co mówią o nas ci, którzy nam zaufali
Trenerzy kategorii Java










Programista i projektant z 13-letnim doświadczeniem, specjalizujący się w Javie i full-stack development. Pracował nad dużymi projektami korporacyjnymi w sektorach fintech oraz insurtech, zdobywając bogate doświadczenie w tworzeniu systemów rozproszonych oraz integracji opartej o API i zdarzenia.
Jako specjalista w dziedzinie Java i architektury oprogramowania, zajmował się również strategicznym rozwojem kompetencji technicznych w organizacji, będąc aktywnym rekruterem technicznym, trenerem oraz mentorem. Pasjonat współpracy z ekspertami domenowymi i klientami, z zamiłowaniem do prostoty i czytelności, z zainteresowaniem Domain Driven Design (DDD) oraz innymi podejściami inżynierii oprogramowania zorientowanymi na domenę biznesową.


Jestem programistą z ponad 15-letnim doświadczeniem. W trakcie swojej kariery kilka razy zmieniałem obszary, z którymi miałem do czynienia (poczynając od niskopoziomowego programowania w C, poprzez fullstackowe zabawy w RubyOnRails, aż do prawdziwego backendu w Javie). Odkąd pamiętam, zawsze lubiłem dzielić się wiedzą z innymi i sprawiało to satysfakcję obu stronom tego procesu. Dlatego naturalną konsekwencją było to, iż zostałem kilka lat temu profesjonalnym trenerem IT.
Prowadzenie szkoleń pozwala mi również na każdorazowe powtórzenie i ugruntowanie swojej wiedzy, co potem bardzo przydaje się w pracy projektowej. Natomiast to, co daje mi największe zadowolenie jako trenerowi, to sytuacja gdy uczeń przerośnie mistrza - wtedy wiem, że dałem z siebie wszystko, a moja praca przyniosła owoce.

