Programowanie w Parach – Hot Or Not?
Grudzień 11, 2008
Mój kolega z byłej ławki Marek Goldmann poruszył dosyć ciekawy aspekt metodologii Extreme Programming, którym jest
programowanie w parach. Programowanie w parach jak i inne elementy metodologii Extreme Programming są często pomijane w trakcie implementacji metodologii zwinnych w większości firm. Prowadzi to najczęściej w późniejszej fazie projektu do utrudnień związanych z jego realizacją. Dowodem na to jest wypowiedź Jima Shorea na jego blogu. W porównaniu do innych aspektów Extreme Programming przyznaje, że nie poświęciłem wystarczającej uwagi praktyką związanych z programowaniem w parach. Wydaje mi się, że jest tak głównie, dlatego, że jako pracownik jestem przekonany o tym, że większość firm nie wprowadzi programowania w parach ze względu na koszty, z którymi się to wiąże. Zresztą jestem ciekaw ile firm w Polsce stosuje przynajmniej po części inne elementy Extreme Programming takie jak Test Driven Development czy Continuous Integration?
Jako, że żadne rozwiązanie nie jest złotym środkiem na wszystkie problemy, nie śmiem twierdzić, że wprowadzenie programowania w parach rozwiąże całkowicie większość problemów. Pewne zalety jednak są widoczne natychmiastowo. Przede wszystkim zwiększona wykrywalność błędów, która jest jednym z głównych powodów stosowania programowania w parach. Ostatnimi czasami miałem możliwość pracowania wspólnie z kolegą przy tworzeniu skryptów automatyzacji buildu i deployementu aplikacji, nad którą pracujemy. Mimo, że niektóre z opisywanych wymagań w poście Marka nie były spełnione, jestem przekonany, że nie był to czas zmarnowany. Poza wykryciem wielu bugów i wielu problemów, które pojawiłyby się w późniejszej fazie uzyskaliśmy bardzo ważny dla nas cel. Mianowicie to, że nie tylko jedna osoba jest teraz w stanie zarządzać i wprowadzać zmiany w powstałych skryptach. Czyli, mogę śmiało stwierdzić, że powstała pewna współwłasność kodu.
Powracając do wpisu Marka. W komentarzach pojawiła się ciekawa uwaga dreamera:
„Zapomniałeś wspomnieć o b. ważnej moim zdaniem rzeczy: między partnerami w parze nie powinno być zbyt dużej różnicy w doświadzczeniu/wiedzy/umiejętnościach – w przeciwnym razie przepływ wiedzy będzie minimalny (jeśli wogóle jakiś będzie) a obie osoby będą pracowały poniżej swoich możliwości – co ogólnie prowadzi do frustracji…”
Nie zgodzę się do końca z tą wypowiedzią, dlatego że dobór takiej pary może z sobą nieść również dużo zalet. Osoby pracujące przez dłuższy czas przy jednym projekcie mogą się szybko „wypalić”, przez co ich produktywność się zmniejszy lub mogą w ogóle zrezygnować z pracy. Źródłem tego problemu najczęściej jest brak dalszego rozwoju. Rozwiązaniem wówczas może być właśnie programowanie w parze z osobą mniej doświadczoną najlepiej nową w zespole. Mimo, że osoba bliska „wypalenia” w takiej parze pełni role mentora sama ponownie przechodzi proces nauczania, co daje jej poczucie rozwoju. Można by się pokuśić o stwierdzenie, że przy zastosowaniu takiego rozwiązania „upieczemy dwie pieczenie na jednym ogniu”: nowa osoba będzie poznawać nieznane jej dotychczas zagadnienia, a jednocześnie nie będzie przestoju w dalszej realizacji zadań w projekcie.
Jedną z praktyk, która moim zdaniem może dobrze zadziałać w sytuacji gdy między osobami występuje duża różnica umiejętności jest ping pong programming. W sytuacji tej osoba A bardziej doświadczona pisze test nadając pewien tok myślenia drugiej osobie B w parze, która jest odpowiedzialna za stworzenie implementacji. W trakcie gdy za „sterami” usiądzie osoba B starająca się doprowadzić kod do takiej postaci by test przeszedł, osoba A jako nawigator może koncentrować się na definiowaniu kolejnych testów i nadzorem kodu pisanego przez partera.
Metody te nie zawsze mogą przynieść zamierzony efekt, dlatego, że nie każda osoba musi chcieć pracować w parze. W tej sytuacji nie należy narzucać rozwiązań na siłę. Warto też pamiętać o tym by osoby w zespole nie pracowały w tej samej parze nie dłużej niż jeden dzień, gdyż może to doprowadzić do wielu efektów ubocznych.
W celu bardziej dogłębnego zapoznania się z praktyką programowania w parach polecam wysłuchanie podcastów zamieszczonych na stronie agiletuning.pl. Jako, że nie mam dużego doświadzenia z tą praktyką chętnie chciałbym usłyszeć o waszych przeżyciach i rozmyśleniach związanych z tym tematem.
Entry Filed under: Programowanie. Tagi: Pair Programming, XP.
4 Comments Add your own
Leave a Comment
Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed



1.
dreamer_ | Grudzień 11, 2008 at 10:58 am
Moja wypowiedź wynikała wyłącznie z mojego dotychczasowego doświadczenia z programowaniem w parach — jeżeli próbujemy łączyć programistów o zbyt rozstrzelonych umiejętnościach to (pomimo hipotetycznych zalet takiego rozwiązania) po prostu nie zadziała — ze względów czystko ludzkich (mniej doświadczony programista nie będzie nadążał za starszym, a starszy będzie powstrzymywał się od pisania w „swoim tempie”, żeby młodszy coś jednak załapał — a na końcu obaj będą wkurzeni).
Przykłady:
łączenie w pary senior developera z kilku-kilkunastoletnim doświadczeniem ze stażystą; łączenie w pary programistów zajmujących się zupełnie odmiennymi aspektami aplikacji; łączenie w pary developerów na dwie różne platformy lub pracujących w dwóch zupełnie odmiennych środowiskach, etc…
2.
Marek Goldmann | Grudzień 12, 2008 at 11:02 am
@Romek
Uważam, że odsetek firm pracujących całkowicie Agile jest bardzo, bardzo mały (nieufność do metodologii?!). Więcej firm będzie starało się wprowadzić jedną, dwie praktyki. Najpopularniejszą będzie pewnie wspomniana przez Ciebie Contiuous Integration, jednak zaskoczony bym był, gdyby okazało się, że wiele firm stosuje tego typu rozwiązanie — jestem realistą
Duże różnice w umiejętnościach, to naprawdę może być poważny problem w przypadku stosowania pair programming. Należy pamiętać, że nie ma dwóch programistów, którzy byli by na tym samym „poziomie”. Różnice zawsze będą występowały — mniejsze lub większe. Zdolność ludzi do porozumienia się (wymagany czynnik przy pair programming) jest często przeceniana — wystarczy spojrzeć na kłótnie polityków
Przykład być może przejaskrawiony, ale oddaje sens. Dlatego też nie naciskałbym, aby nowa (mniej doświadczona) osoba w zespole musiała pracować na 100% jak reszta. Z biegiem czasu (na pewno prędzej niż później) zdobyłaby wymagane umiejętności wymagane do pełnej współpracy.
Reasumując — różnice w parach zawsze będą występowały, nie można zmuszać nikogo do programowania w parze z osobą niedoświadczoną (i vice versa) — musi to być autonomiczna decyzja pary.
@dreamer_
Dokładnie takie osoby miałem na myśli w drugim akapicie!
3. ALT.NET a programowanie w parach « !FrAgile Thinking | Grudzień 16, 2008 at 8:40 am
[...] został także temat ping pong programming, o którym pisałem także w poprzednim poście. Jak widać z wypowiedzi, wiele osób chwali sobie wykorzystanie tej praktyki w celu nauczania w [...]
4.
Bogusław | Grudzień 16, 2008 at 8:19 pm
Witam kolegę
Jeżeli chodzi o programowanie w parach, to w firmie testowaliśmy takie rozwiązanie jak programowanie w parach. Nie było trudno gdyż w firmie pracuje nas dwóch programistów. Co do poziomu wiedzy, to powinien być podobny jeżeli chcemy w miarę sprawnie pracować. I przykładowo praca nad konkretnym problemem wyglądała tak, że omawialiśmy co chcemy zrobić, chwilę dyskutowaliśmy nad rozwiązaniem po czym jeden z nas pisał kod. W trakcie pisania kumpel zadawał pytania jeżeli czegoś nie wiedział i ogólnie jeżeli któryś z nas się „walnął” to od razu można było pomyłkę skorygować. Pisaliśmy na przemian w cyklach po pół godziny i raczej taka sesja programowania w parze nie trwała dłużej jak 1,5 godziny. Stosowaliśmy też taką praktykę że jeżeli napotkaliśmy na problem, który jest bardziej złożony to dzieliliśmy się robotą i każdy zajmował się odrębną częścią.
Oczywiście w trakcie programowania pisaliśmy testy jednostkowe.
Wnioski końcowe:
1. trzeba mieć dobry humor żeby kodować w parach;
2. umieć się dogadać, wzajemnie dopasować;
3. gdy trwa zbyt długo, może być męczące
4. nie każdy problem nadaje się na rozwiązanie go taką metodą.