Getting Things
Programmed
@MichalBartyzel
@MichalBartyzel
• ~500 dni szkoleniowych
• 8 projektów doradczych
• 80+ klientów
• 40+ artykułów
• 3+ książki
• 3 dzieci
Co na wynos?
Co musi umieć developer?
Getting Things Programmed
Getting Things Programmed
# kolejkuj zadania
# OKREŚL PIERWSZĄ CZYNNOŚĆ
• Napisz test do CartService.findItem()?
• Napisz metodę testową?
• Przygotuj dane testowe?
• Zamokuj zależności klasy CartSercvice ?
• Sprawdź w dokumentacji, jak powinna działać usługa?
• Wydrukuj dokumentację usług?
# Zapisz zanim zakodzisz
public boolean peselIsValid(String pesel) {
//Czy pesel ma poprawny format?
//Oblicz sumę kontrolną peselu
//Sprawdź warunek modulo algorytmu pesel
}
public boolean peselIsValid(String pesel) {
if (!isNumber(pesel) || !hasValidLength(pesel)) {
return false;
}
//Oblicz sumę kontrolną peselu
//Sprawdź warunek modulo algorytmu pesel
}
# narysuj zanim zaarchitekcisz
HelloWorldInterjection interjection = new HelloWorldInterjection();
HelloWorldObject helloWorldObject = new HelloWorldObject();
HelloWorldMediator helloWorldMediator = new HelloWorldMediator(interjection, helloWorldObject);
interjection.setHelloWorldMediator(helloWorldMediator);
helloWorldObject.setHelloWorldMediator(helloWorldMediator);
System.out.println(helloWorldObject.helloWorld());
# narysuj zanim zaarchitekcisz
# narysuj zanim zaarchitekcisz
# narysuj zanim zaarchitekcisz
• Pattern-Oriented Software Architecture, Part 4
• Implementing Domain-Driven Desing
• Pattern-Oriented Software Architecture, Part 1
• Pattern-Oriented Software Architecture, Part 2
• Pattern-Oriented Software Architecture, Part 3
• Patterns of Enterprise Application Architecture
• Reactive Desing Patterns*
# nazywaj
# nazywaj
#Nazywaj
LocationManager 26 752
NetworkItem 10 955
TransferOperations 6 871
CalculatorsManager 4 325
MonitorManager 1 514
VTViewInvoker 48
ContactService 47
Address 34
DataRange 21
LoggedUserDetailsModel 13
# izoluj
#Izoluj
• Zacznij od testu jednego zachowania
• Napisz test mniejszego zachowania
• Przeczytaj Implementation Patterns
# pisz elegancko
if (!r.IsDataRangeDoNull() && !r.IsDataRangeOdNull()
&& ((r.DataRangeOd.Day != yearRow.Miesiac.Day
&& r.DataRangeOd.Day != yearRow.Miesiac.AddMonths(1).Day)
|| (r.DataRangeDo.Day != yearRow.Miesiac.Day
&& r.DataRangeDo.Day != yearRow.Miesiac.AddMonths(1).Day))) {
//...
}
#ZNAJDUJ CZAS NA RZECZY WAŻNE
Pilność i ważność (wersja oryginalna)
Getting Things Programmed
Ważne
Planuj
 Zarządzaj
 Zajmij się zanim staną się pilne
Zajmij się natychmiast
 Najlepiej osobiście
 Jest to zadanie typu „pożar”
Nieważne
Unikaj
 Ponieważ mają niewielką
wartość
Deleguj
 Rutynowe zadania
Niepilne Pilne
0 m-c 3 m-ce 6 m-cy 9 m-cy
Konsekwencje
Pilne ?
Ważne ?
Dług tech.
Działania
Przykład – refaktoryzacja
Getting Things Programmed
0 m-c 3 m-ce 6 m-cy 9 m-cy
Konsekwencje • Wzrasta metryka
CC
• Wzrasta metryka
LoC
• Testowanie jest
uciążliwe
• Młodsi
programiści
nabierają złych
nawyków
Pilne ? Nie
Ważne ? Nie
Dług tech. Niezauważalny
Działania Nic nie robimy
Przykład – refaktoryzacja
Getting Things Programmed
0 m-c 3 m-ce 6 m-cy 9 m-cy
Konsekwencje • Wzrasta metryka
CC
• Wzrasta metryka
LoC
• Testowanie jest
uciążliwe
• Młodsi
programiści
nabierają złych
nawyków
• Pojawiają się
Long Method,
GodClass
• Spada pokrycie
kodu testami
• Pojawiają się
żarty na temat
jakości kodu
Pilne ? Nie Nie
Ważne ? Nie Nie / Tak
Dług tech. Niezauważalny Możliwy ukrycia
Działania Nic nie robimy Nic nie robimy
Przykład – refaktoryzacja
Getting Things Programmed
0 m-c 3 m-ce 6 m-cy 9 m-cy
Konsekwencje • Wzrasta metryka
CC
• Wzrasta metryka
LoC
• Testowanie jest
uciążliwe
• Młodsi
programiści
nabierają złych
nawyków
• Pojawiają się
Long Method,
GodClass
• Spada pokrycie
kodu testami
• Pojawiają się
żarty na temat
jakości kodu
• Pojawia się
BigBullofMud
• Zauważane
dryfowanie
architektury
• Pierwsze
problemy
wydajnościowe
• Wzrasta ilość
błędów na
produkcji
Pilne ? Nie Nie Nie
Ważne ? Nie Nie / Tak Tak
Dług tech. Niezauważalny Możliwy ukrycia Spłata wymaga
świadomej
inwestycji
Działania Nic nie robimy Nic nie robimy Nic nie robimy
Przykład – refaktoryzacja
Getting Things Programmed
0 m-c 3 m-ce 6 m-cy 9 m-cy
Konsekwencje • Wzrasta metryka
CC
• Wzrasta metryka
LoC
• Testowanie jest
uciążliwe
• Młodsi
programiści
nabierają złych
nawyków
• Pojawiają się
Long Method,
GodClass
• Spada pokrycie
kodu testami
• Pojawiają się
żarty na temat
jakości kodu
• Pojawia się
BigBallOfMud
• Zauważane
dryfowanie
architektury
• Pierwsze
problemy
wydajnościowe
• Wzrasta ilość
błędów na
produkcji
• Użytkownicy
wyraźnie
zauważają spadek
wydajności oraz
błędu systemu
• Eskalacje ze
strony biznesu
• Konsekwencje
finansowe dla
sponsora
Pilne ? Nie Nie Nie Tak
Ważne ? Nie Nie / Tak Tak Tak
Dług tech. Niezauważalny Możliwy ukrycia Spłata wymaga
świadomej
inwestycji
Płacz i płać
Działania Nic nie robimy Nic nie robimy Nic nie robimy Łatamy na szybko
Przykład – refaktoryzacja
Getting Things Programmed
Zajmuj się zadaniami
ważnymi zanim
staną się pilne
Getting Things Programmed
Pilność i ważność (wersja dla programisty)
Getting Things Programmed
Ważne
Planuj
 Zajmij się zanim staną się pilne
Zajmij się natychmiast
 Najlepiej osobiście
Nieważne
Unikaj / Deleguj
 Krytycznie analizuj zadanie
 Usprawniaj środowisko pracy
Niepilne Pilne
8 technik na wynos
1. Kolejkuj zadania
2. Określ pierwszą czynność
3. Zapisz zanim zakodzisz
4. Narysuj zanim zaarchitekcisz
5. Nazywaj
6. Izoluj
7. Pisz elegancko
8. Znajduj czas na rzeczy ważne
Więcej Technik
Credits
• http://4.bp.blogspot.com/-eKjcKXtiV2k/VOpcueDSzHI/AAAAAAAADEk/ufBVoIp14HI/s1600/popeye-images-9.jpg
• http://andyshora.com/img/stacks-change.jpg

More Related Content

PPTX
Dwa sposoby na pisanie aplikacji bez błędów
PDF
Evolving architecture 4 Confitura 2017
PDF
Refactoring - Jak pozostać przy zdrowych zmysłach, redukując dług
PDF
[QE 2017] Daniel Pokusa - Architektura, która ewoluuje
PDF
Evolving architecture 4 QualityExcites 2017
PDF
eXtreme programming
PDF
Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania o...
PDF
JDD2015: Z czym mierzą się zespoły? - Michał Bartyzel
Dwa sposoby na pisanie aplikacji bez błędów
Evolving architecture 4 Confitura 2017
Refactoring - Jak pozostać przy zdrowych zmysłach, redukując dług
[QE 2017] Daniel Pokusa - Architektura, która ewoluuje
Evolving architecture 4 QualityExcites 2017
eXtreme programming
Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania o...
JDD2015: Z czym mierzą się zespoły? - Michał Bartyzel

Similar to Getting Things Programmed (20)

PDF
Evolving architecture @ 4Developers 2017
PDF
[chamberconf] Z czym mierzą się zespoły?
PPTX
[PL] Jak programować aby nie zwariować?
PDF
Krzysztof Kaczmarek - 10 rzeczy, które chciałbym wiedzieć 10 lat temu
PDF
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
PPTX
Podstawy testowania oprogramowania INCO 2023.pptx
PPTX
Jak sprzedać refaktoryzację? Nordea Bank AB Case
PDF
JDD 2016 - Michal Bartyzel, Lukasz Korczynski - Refaktoryzacja Systemu eBanko...
PDF
4developers utrzymanie bezpieczenstwa
PDF
Mity, które blokują Twoją karierę
PPTX
[4developers] Utrzymanie bezpieczeństwa aplikacji produkcyjnych na przykładac...
PPTX
Utrzymanie bezpieczeństwa aplikacji produkcyjnych na przykłdach
PDF
PHPCon Poland 2015 - Jak stać się lepszym programistą - Jerzy Zawadzki
PPTX
4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...
PDF
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
PDF
SkładQA 2018 - Daniel Dec
PDF
Lilianna Poradzińska, Białystok kwiecień 2013
PPTX
[PL] Jak programować aby nie zwariować
PDF
KICK ME
PDF
Senior software engineer afterlife
Evolving architecture @ 4Developers 2017
[chamberconf] Z czym mierzą się zespoły?
[PL] Jak programować aby nie zwariować?
Krzysztof Kaczmarek - 10 rzeczy, które chciałbym wiedzieć 10 lat temu
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
Podstawy testowania oprogramowania INCO 2023.pptx
Jak sprzedać refaktoryzację? Nordea Bank AB Case
JDD 2016 - Michal Bartyzel, Lukasz Korczynski - Refaktoryzacja Systemu eBanko...
4developers utrzymanie bezpieczenstwa
Mity, które blokują Twoją karierę
[4developers] Utrzymanie bezpieczeństwa aplikacji produkcyjnych na przykładac...
Utrzymanie bezpieczeństwa aplikacji produkcyjnych na przykłdach
PHPCon Poland 2015 - Jak stać się lepszym programistą - Jerzy Zawadzki
4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
SkładQA 2018 - Daniel Dec
Lilianna Poradzińska, Białystok kwiecień 2013
[PL] Jak programować aby nie zwariować
KICK ME
Senior software engineer afterlife
Ad

More from Michał Bartyzel (17)

PDF
Developer prowadzi szkolenia
PDF
[PL, 2017] Conversation Patterns for Software Professionals
PPTX
Od codziennej higieny do strategicznej refaktoryzacji
PPTX
Kanban na lodówce
PPTX
[Geek Girls Carrots] Agile being
PPTX
Co jest czym w obszarze miękkim?
PPTX
[JUG, PL] Strategiczna refaktoryzacja
PDF
[Agile2014] Conversation Patterns for Software Professionals
PDF
[Pl] conversation patterns for software professionals
PPTX
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
PPTX
Szybko czy dobrze. jak współpracować z biznesem i nie dać się zwieść pozornym...
PPTX
Conversation patters for ubiquitous language
PDF
[33rd] x driven-y niczego nie zmienią
PDF
[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów
PDF
Diagram sekwencji
PDF
xUnit - narzędzie do testowania
PDF
Wzorce kreacyjne GoF
Developer prowadzi szkolenia
[PL, 2017] Conversation Patterns for Software Professionals
Od codziennej higieny do strategicznej refaktoryzacji
Kanban na lodówce
[Geek Girls Carrots] Agile being
Co jest czym w obszarze miękkim?
[JUG, PL] Strategiczna refaktoryzacja
[Agile2014] Conversation Patterns for Software Professionals
[Pl] conversation patterns for software professionals
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
Szybko czy dobrze. jak współpracować z biznesem i nie dać się zwieść pozornym...
Conversation patters for ubiquitous language
[33rd] x driven-y niczego nie zmienią
[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów
Diagram sekwencji
xUnit - narzędzie do testowania
Wzorce kreacyjne GoF
Ad

Getting Things Programmed

  • 2. @MichalBartyzel • ~500 dni szkoleniowych • 8 projektów doradczych • 80+ klientów • 40+ artykułów • 3+ książki • 3 dzieci
  • 4. Co musi umieć developer?
  • 8. # OKREŚL PIERWSZĄ CZYNNOŚĆ • Napisz test do CartService.findItem()? • Napisz metodę testową? • Przygotuj dane testowe? • Zamokuj zależności klasy CartSercvice ? • Sprawdź w dokumentacji, jak powinna działać usługa? • Wydrukuj dokumentację usług?
  • 9. # Zapisz zanim zakodzisz public boolean peselIsValid(String pesel) { //Czy pesel ma poprawny format? //Oblicz sumę kontrolną peselu //Sprawdź warunek modulo algorytmu pesel } public boolean peselIsValid(String pesel) { if (!isNumber(pesel) || !hasValidLength(pesel)) { return false; } //Oblicz sumę kontrolną peselu //Sprawdź warunek modulo algorytmu pesel }
  • 10. # narysuj zanim zaarchitekcisz HelloWorldInterjection interjection = new HelloWorldInterjection(); HelloWorldObject helloWorldObject = new HelloWorldObject(); HelloWorldMediator helloWorldMediator = new HelloWorldMediator(interjection, helloWorldObject); interjection.setHelloWorldMediator(helloWorldMediator); helloWorldObject.setHelloWorldMediator(helloWorldMediator); System.out.println(helloWorldObject.helloWorld());
  • 11. # narysuj zanim zaarchitekcisz
  • 12. # narysuj zanim zaarchitekcisz
  • 13. # narysuj zanim zaarchitekcisz • Pattern-Oriented Software Architecture, Part 4 • Implementing Domain-Driven Desing • Pattern-Oriented Software Architecture, Part 1 • Pattern-Oriented Software Architecture, Part 2 • Pattern-Oriented Software Architecture, Part 3 • Patterns of Enterprise Application Architecture • Reactive Desing Patterns*
  • 16. #Nazywaj LocationManager 26 752 NetworkItem 10 955 TransferOperations 6 871 CalculatorsManager 4 325 MonitorManager 1 514 VTViewInvoker 48 ContactService 47 Address 34 DataRange 21 LoggedUserDetailsModel 13
  • 18. #Izoluj • Zacznij od testu jednego zachowania • Napisz test mniejszego zachowania • Przeczytaj Implementation Patterns
  • 19. # pisz elegancko if (!r.IsDataRangeDoNull() && !r.IsDataRangeOdNull() && ((r.DataRangeOd.Day != yearRow.Miesiac.Day && r.DataRangeOd.Day != yearRow.Miesiac.AddMonths(1).Day) || (r.DataRangeDo.Day != yearRow.Miesiac.Day && r.DataRangeDo.Day != yearRow.Miesiac.AddMonths(1).Day))) { //... }
  • 20. #ZNAJDUJ CZAS NA RZECZY WAŻNE
  • 21. Pilność i ważność (wersja oryginalna) Getting Things Programmed Ważne Planuj  Zarządzaj  Zajmij się zanim staną się pilne Zajmij się natychmiast  Najlepiej osobiście  Jest to zadanie typu „pożar” Nieważne Unikaj  Ponieważ mają niewielką wartość Deleguj  Rutynowe zadania Niepilne Pilne
  • 22. 0 m-c 3 m-ce 6 m-cy 9 m-cy Konsekwencje Pilne ? Ważne ? Dług tech. Działania Przykład – refaktoryzacja Getting Things Programmed
  • 23. 0 m-c 3 m-ce 6 m-cy 9 m-cy Konsekwencje • Wzrasta metryka CC • Wzrasta metryka LoC • Testowanie jest uciążliwe • Młodsi programiści nabierają złych nawyków Pilne ? Nie Ważne ? Nie Dług tech. Niezauważalny Działania Nic nie robimy Przykład – refaktoryzacja Getting Things Programmed
  • 24. 0 m-c 3 m-ce 6 m-cy 9 m-cy Konsekwencje • Wzrasta metryka CC • Wzrasta metryka LoC • Testowanie jest uciążliwe • Młodsi programiści nabierają złych nawyków • Pojawiają się Long Method, GodClass • Spada pokrycie kodu testami • Pojawiają się żarty na temat jakości kodu Pilne ? Nie Nie Ważne ? Nie Nie / Tak Dług tech. Niezauważalny Możliwy ukrycia Działania Nic nie robimy Nic nie robimy Przykład – refaktoryzacja Getting Things Programmed
  • 25. 0 m-c 3 m-ce 6 m-cy 9 m-cy Konsekwencje • Wzrasta metryka CC • Wzrasta metryka LoC • Testowanie jest uciążliwe • Młodsi programiści nabierają złych nawyków • Pojawiają się Long Method, GodClass • Spada pokrycie kodu testami • Pojawiają się żarty na temat jakości kodu • Pojawia się BigBullofMud • Zauważane dryfowanie architektury • Pierwsze problemy wydajnościowe • Wzrasta ilość błędów na produkcji Pilne ? Nie Nie Nie Ważne ? Nie Nie / Tak Tak Dług tech. Niezauważalny Możliwy ukrycia Spłata wymaga świadomej inwestycji Działania Nic nie robimy Nic nie robimy Nic nie robimy Przykład – refaktoryzacja Getting Things Programmed
  • 26. 0 m-c 3 m-ce 6 m-cy 9 m-cy Konsekwencje • Wzrasta metryka CC • Wzrasta metryka LoC • Testowanie jest uciążliwe • Młodsi programiści nabierają złych nawyków • Pojawiają się Long Method, GodClass • Spada pokrycie kodu testami • Pojawiają się żarty na temat jakości kodu • Pojawia się BigBallOfMud • Zauważane dryfowanie architektury • Pierwsze problemy wydajnościowe • Wzrasta ilość błędów na produkcji • Użytkownicy wyraźnie zauważają spadek wydajności oraz błędu systemu • Eskalacje ze strony biznesu • Konsekwencje finansowe dla sponsora Pilne ? Nie Nie Nie Tak Ważne ? Nie Nie / Tak Tak Tak Dług tech. Niezauważalny Możliwy ukrycia Spłata wymaga świadomej inwestycji Płacz i płać Działania Nic nie robimy Nic nie robimy Nic nie robimy Łatamy na szybko Przykład – refaktoryzacja Getting Things Programmed
  • 27. Zajmuj się zadaniami ważnymi zanim staną się pilne Getting Things Programmed
  • 28. Pilność i ważność (wersja dla programisty) Getting Things Programmed Ważne Planuj  Zajmij się zanim staną się pilne Zajmij się natychmiast  Najlepiej osobiście Nieważne Unikaj / Deleguj  Krytycznie analizuj zadanie  Usprawniaj środowisko pracy Niepilne Pilne
  • 29. 8 technik na wynos 1. Kolejkuj zadania 2. Określ pierwszą czynność 3. Zapisz zanim zakodzisz 4. Narysuj zanim zaarchitekcisz 5. Nazywaj 6. Izoluj 7. Pisz elegancko 8. Znajduj czas na rzeczy ważne