:sparkles: PWA :sparkles:
Logo

Piotr Kowalski

Organizator WarsawJS , Trener, YouTuber

WRUG wrześniowy o nietestowaniu, pair-programmingu i spore.sh

Mateusz Nowakowski rozpoczyna serię WRUG po wakacjach!

Profil spotkania: wrug.eu/2015/09/14/spotkanie-wrzesniowe/.

Pierwsza prelekcja Marek Kirejczyk opowie o Pair programming.

Warsaw Ruby Users Group (WRUG)

Pair programming [PL] Marek Kirejczyk

First problem

Zespoły Agilowe powinny się same organizować.

I don't learn that much anymore

Gdy się nie rozwijamy to popadamy w depresje.

Good code review is hard Marek Kirejczyk

Co to jest pair programming?

  • 2 osoby siedzą przy jednym komputerze
  • pierwsza osoba - reaktor - fizycznie pisze
  • druga osoba - nawigator - przygląda się co napisała ta pierwsza
  • zadania w parach się zmieniają co kilkanaście minut

Myths - Kilka mitów o Pair programming

1. Zdublowane koszty

2 osoby kodujące razem wnoszą więcej do projektu, niż osobno.

2. Ma sens, ale gdy jest odpowiedni partner

Różne kombinacje przynoszą efekty.
Nie ma idealnej mieszanki!

3. Ludzie nie lubią pair programming

Błąd! Badania potwierdziły, że jest inaczej!
Developerzy lubią pair programming!

4. Pair programming jest tylko do nauki

Różne rodzaje parowania są efektywne.
Nie zawsze, nie wszystkie, ale większość przynosi dobry efekt.

5. Jeżeli będę pracował w parach to nikt mnie nie doceni

Rozwiązanie na docenianie jednostki?
Przypisanie ownerów do konkretnych modułów.

6. Nawigator, który tylko odnajduje syntax error

Dobre parowanie, ma wpływ na design kodowania. Marek Kirejczyk

Zachowania

1. Presja społeczna

Pary więcej spędzają kodując, niż na portalach społecznościowych.
Robią dużo mniej przerw.

2. Negocjacja

Negocjacja pomiędzy dwoma pomysłami, podejściami.
Jest to dużo lepsze, niż wzięcie pierwszego lepszego.

3. Pair review

Ciągle ktoś robi review kodu.

4. Pair learning

W parach uczymy się dramatycznie szybciej niż w pojedynkę.

5. Pair trust (zaufanie)

Para która pracuje razem, ma inny poziom zaufania, zna swoje zalety i wady.
Relacje są lepsze.

6. Pair courage

Para jest bardziej odważna.
Przekłada się to na modyfikację legacy code.

7. Pair debugging

Często jak się debuguje w parach, to czas spędzony na rozwiązaniu bugów,
jest to minimum z czasów spędzonych osobno.

Details

Rotacje!

Nowa para = nowe pomysły.
Aby pobudzić zaznacza się na macierzy

Ping pong pair programming

Najlepiej TDD: jedna osoba pisze niedziałający test, a druga minimalna ilość kodu aby kod przeszedł.

Gdy jest okey, to odwrócenie zadań.

Environment

Więcej miejsca przy biurku!

Types of pairs

  • junior & senior
  • extrovert & introvert
  • Back-end & Front-end - ludzie z chęcią chcą się nauczyć drugiej strony - taka para bardzo szybko realizuje zadania

Przy junior & junior - code review zawsze musi być robione przez seniora.
Większość badań skupia się na 1 sprincie.

Zespół bardzo przyspiesza ale to musi trochę potrwać.

Introducing pair programming at DaftCode

"Fajne, chcemy więcej" - taki był odbiór po realizacji programu pilotażowego.

Cały zespół Daftcode programuje w parach!

Wnioski

Parować się dużo i im szybciej tym lepiej!

Czas trwania prelekcji: 18:33 - 18:55 (10 min pytań)


Pisz kod tak, aby go nie testować [PL] Łukasz "detomastah" Pełszyński

Co to znaczy "pokrycie kodu testami"?

  • Wszystkie linie zostały przetestowane, ale nie oznacza, że program działa dobrze.

Stan programu

Stan wszystkich zmiennych, które program ma w pamięci

Wg. Millera ludzie mogę operować na max "9 obiektach" w swojej pamięci.
Średnio 7 obiektów.

Pamięć jako kolekcja FIFO

Co nam pomaga w dużej ilości stanów?

  • tworzenie abstrakcji - pomagają one ogarnąć ten chaos

Interakcja szeregowa

Interakcja sprzężona

Bardzo często występuje w programach.
Może wskazywać na naruszenie SRP (single responsibility principle) pojedyncza odpowiedzialność.
Problem z SRP: zasada DRY prowadzi do tworzenie super-obiektów, które możemy wkładać w różne miejsca.

Rozwiązanie problemu z SRP: celowa duplikacja kodu.
Umożliwia wyrwanie się ze spaghetti code.

Interakcja warunkowa

Każdy warunek tworzy nowe stany. Może wskazywać na brak interfejsów.

Interakcja asynchroniczna

  • czyli programy działające na wątkach!

Jak zaprogramować algorytm DFS?
Kto z tym zadaniem poradził sobie bez problemów?

Ogólne zalecenia

  • Zacząć samodzielnie myśleć
  • TRUST NO 1
  • Myśleć ekonomicznie
  • Dążyć do izolacji - łatwość podczas testowania
  • Stosować przetwarzanie wsadowe :smiley: - jedno przekazuje drugiemu, programy liniowe
  • Nie pozwalać błędom się ukrywać - z góry rzucać wyjątkami
  • W ostateczności - zmienić język

Czas trwania prelekcji: 19:07 - 19:32 (12 min pytań)

Pytania

Mutation test coverage - rozwiązuje problem 100 procentowego pokrycia kodu.
Więcej https://pl.wikipedia.org/wiki/Testowanie_mutacyjne

Rozwiązania z komentarzy: Można wymusić implementowanie interfejsu - wystarczy NoMethodError w jakiejś klasie.

Rozwiązania z komentarzy: Można pisać SRP i DRY.

Zarządzanie zmiennymi środowiskowymi przy użyciu spore.sh [PL] Marcin Wyszyński

Na HackerNews "pewien ktoś" opisał coś i się bulwersował, że go nikt nie rozumie. Marcin go zrozumiał i chce zaprezentować narzędzie opisane przez "tego kogoś".

Musimy korzystać z Heroku? Dlaczego, bo tak chce tego Heroku :smiley:

Różnica między develop a produkcją jest tylko w 1 zmiennej środowiskowej.
I to jest piękne!

spore.sh

  • serwer w Node.js
  • jest CLI
  • w root naszego projektu jest plik konfiguracyjny

Zasada UID

Komunikacja przez SSL i pobieranie konkretnej wartości po uid

Czy powinienem tego używać?

"Wasza decyzja.
Może warto spróbować"

Czas trwania prelekcji: 19:47 - 20:02 (7 min pytań)


Podsumowanie

Świetnie było się spotkać po wakacjach z ekipą z WRUGa.
Inny język = inne doświadczenia.

Dzięki sponsorom (Rebased i EL Passion) mogliśmy wymienić sobie żeton za produkt o równowartości 10zł.

Kolejne spotkanie już za miesiąc!

Tagi: wrug meetup

2 dni wcześniej napisałem: WarsawJS Meetup #13 - 1 urodziny :birthday: 1 tydzień i 5 dni później napisałem: IT Manager Meetup #2

Możesz osadzić kod wykorzystując: <pre><code class="{language}"></code></pre>