Programowanie w parach. Czy warto?

Pair programming to nic nowego i zdążył już zdobyć wielu zwolenników. Ma też przeciwników, którzy twierdzą, że właściwie nie jest do niczego potrzebny. Co przemawia za wprowadzeniem w firmie tej metody pracy?


Programowanie w parach to jedna z praktyk programowania ekstremalnego (eXtreme Programming, XP), które coraz częściej zalicza się do zwinnych metodyk tworzenia oprogramowania. Kodowanie w parach od początku fascynuje badaczy. Już w 1998 roku John Noska przeprowadził eksperyment, z którego wynikało, że pary potrzebują o 30% mniej czasu na napisanie kodu niż pojedynczy programista, ale za to pracochłonność programowania w parach jest większa o 40%. Kilka lat później Laurie Williams z North Carolina State University opublikował badania dowodzące, że pracochłonność jest tylko o 20% wyższa niż u pojedynczego programisty, a do tego oprogramowanie powstaje o 40% szybciej. Z jeszcze innych badań wynikało, że oprogramowanie, które powstało w parach, ma o 15% mniej błędów, a 95% tak pracujących programistów jest bardziej pewnych swoich rozwiązań niż przy pracy samodzielnej. Najwyraźniej programowanie w parach ma swoje zalety, ale na początek klika słów wyjaśnienia.


Jak to działa?


Autor The Mythical Man Month, Fred Brooks, programował w ten sposób już na studiach w latach 50. W 1992 roku Larry Constantine opisał Dynamiczne Duo, które stosowane było pod koniec lat 80. w firmie Whitesmiths: przy każdym komputerze jeden z programistów pisał na klawiaturze, a drugi patrzył na monitor. 3 lata później programowanie w parach omawiał Jim Coplien w jednym z rozdziałów książki Pattern Languages of Program Design. W 2000 roku w artykule Pair programming and the mysterious role of the navigator Sallyann Bryant wprowadziła nazwy navigatora i drivera. 2 lata później pojawiła się pierwsza książka na ten temat - Pair Programming Illuminated Laurie Williamsa i Roberta Kesslera, a w 2015 roku James Coplien wydał Two Heads are Better than One na temat idei programowania w parach opisując, jak to wszystko się zaczęło.


Pair programming to nic innego jak wspólna praca dwóch programistów. Jeden z nich to driver, który jest głównym koderem, wklepuje linijki kodu, a drugi to nawigator. Jego zadaniem jest obserwowanie powstającego kodu, wyłapywanie błędów, zadawanie pytań i proponowanie własnych rozwiązań. Co kilkadziesiąt minut programiści zamieniają się rolami. Taki duet pracuje przy jednym komputerze. Co daje taki sposób tworzenia oprogramowania?


Zalety programowania w parach


Programowanie w parach to nie ekstrawagancja czy szalony eksperyment. Ten sposób pracy ma wiele zalet:


  • Eliminowanie głupich błędów, które potrafią być bardzo irytujące. Dwie osoby mają szansę szybciej je wyłapać dzięki navigatorowi, który powinien szczególnie uważać nawet na drobne pomyłki. To pozwala tworzyć lepsze oprogramowanie.
  • Nowe spojrzenie na problem. Czasem pojawia się podczas kodowania trudność, która wstrzymuje całą pracę, a poszukiwanie rozwiązania się przeciąga. Patrząc na kod z boku, navigator może wpaść na rozwiązanie szybciej niż driver.
  • Swoboda podczas kodowania. Czujemy się pewniej wiedząc, że ubezpiecza nas przychylna osoba. W takim tandemie można płynnie wymieniać się wiedzą.
  • Programowanie w parach to również doskonała okazja, aby rozwijać umiejętności komunikacyjne, rozwijać dobre praktyki interpersonalne, a tym samym nabywać nowe umiejętności miękkie.
  • Oszczędność czasu – przytaczane wyżej badania potwierdzają, że oprogramowanie jest szybciej wytwarzane.
  • Oszczędność pieniędzy – krótszy czas pracy i mniej błędów to mniej wydanych pieniędzy.
  • Lepsze poznawanie się członków zespołu – praca w parach niewątpliwie sprzyja nawiązywaniu kontaktu.
  • Budowanie zaufania pomiędzy współpracującymi programistami.

To jednak nie wszystko, ponieważ programowanie w parach to także doskonały sposób na przekazywanie wiedzy.


Mentoring dla kodera


Programowanie w parach można także traktować jako technikę mentoringu. To wręcz idealne rozwiązanie, jeśli chodzi o uczenie młodych adeptów programowania przez doświadczonych koderów. Osoba, która chce zdobyć wiedzę, siedzi przy klawiaturze i pełni rolę drivera, mentor jest navigatorem. Driver musi w tym przypadku samodzielnie szukać rozwiązania, a rola mentora sprowadza się do dawania wskazówek i przykładów. Co jakiś czas mentor może przejąć klawiaturę, napisać fragment kodu, przeanalizować go i wyjaśnić, ale nie należy z tym przesadzać. Driver powinien szukać sam rozwiązania korzystając z podpowiedzi. Programowanie w parach może przyspieszyć przekazywanie wiedzy, a także ułatwia wdrażanie nowych pracowników.


Rekrutacja


Programowanie w parach jest czasami wykorzystywane także w procesie rekrutacji. To jeden ze sposobów, aby sprawdzić umiejętności kandydata. Osoba szukająca zatrudnienia łączona jest w parę z doświadczonym programistą, siadają przy jednym komputerze. Kandydat otrzymuje do rozwiązania zadanie programistyczne, natomiast specjalista z rekrutującej firmy ocenia jego biegłość w programowaniu, posługiwaniu się określonymi narzędziami i technologiami. To pozwala szybko i gruntownie ocenić, czy kandydat ma wystarczającą wiedzę. W ten sposób można uzyskać więcej informacji niż przy teście umiejętności technicznych. Rekruter będzie mógł ocenić, jak kandydat potrafi się komunikować, czy gotowy jest prosić o feedback, czy umie przejąć inicjatywę w czasie pracy.


Pair programming dla wszystkich?


Oczywiście naiwnie byłoby myśleć, że programowanie w parach jest dla wszystkich. Nie jest z prostych powodów: nie każdy jest w stanie pokonać barierę intymną. Przyjmuje się, że to przestrzeń wokół nas w odległości do 45 cm. Ta strefa intymna zwykle zarezerwowana jest dla najbliższych nam osób, członków rodziny, dzieci. Naruszenie tej strefy przez kolegę z pracy może prowadzić do dyskomfortu, a nawet wywoływać różnego rodzaju reakcje obronne. To całkiem naturalne. Programowanie w parach jest oczywistym przykładem takiego naruszenia strefy intymnej. Dla niektórych programistów to duży problem i nie potrafią odnaleźć się w takiej sytuacji, nie wspominając już o produktywnej pracy. Dlatego pair programming najlepiej sprawdza się, gdy członkowie zespołu mają ze sobą silne relacje, są przyjaciółmi, a przynajmniej bardzo dobrymi kolegami i ufają sobie nawzajem.

Niestety, nie zawsze tak jest. Dlatego warto budować zaufanie w zespole również w kontekście programowania w parach, przygotowywać do tego psychicznie programistów. Osoby pracujące w parach muszą być zaangażowane, skupione na pracy, a nie na myśleniu „Ktoś zagląda mi przez ramię, kontroluje mnie”. Wtedy programowanie w parach nie ma sensu.