Powody programowania w parach

13

Pracowałem w kilku sklepach, w których kierownictwo przekazało mi pomysł programowania w parach albo mnie, albo innemu menedżerowi / programistowi, i wcale nie mogę się za tym wycofać. Z punktu widzenia programisty nie mogę znaleźć powodu, dla którego przejście na ten styl kodowania byłoby korzystne, ani jako kierownik małego zespołu nie widziałem żadnej korzyści.

Rozumiem, że pomaga to w podstawowych błędach składniowych i może być pomocny, jeśli musisz coś wymieszać, ale menedżerowie, którzy nie są w pętli programowania, wydają się postrzegać to jako sposób na powstrzymanie ich projektantów przed przejściem na Facebooka lub Reddita niż jako narzędzie do projektowania.

Jako ktoś bliski progu rozwoju, który najwyraźniej nie do końca rozumie z książki rzuconej po mojej stronie lub strony wiki na ten temat ... z wysokiego stanowiska kierowniczego, jakie są korzyści z programowania w parach w przypadku Scruma lub Agile środowiska?

Jeff Langemeier
źródło
2
Myślę, że jest to przydatne w bardzo szczególnych sytuacjach. Ale jako ogólny model programistyczny jest dość bezużyteczny.
Ryan Kinal
4
Może to zależeć od oprogramowania, które może pokolorować twój widok. Jeśli masz wiele małych widżetów i codziennie pracujesz nad różnymi niestandardowymi programami, prawdopodobnie nie będzie to przydatne. Jest to szczególnie opłacalne, gdy masz do czynienia z dużym systemem korporacyjnym, w którym programiści muszą uwzględnić kaskadę w całym systemie wynikającą z implementowanej przez nich funkcjonalności. Napisanie jednej klasy, która wpływa na dane używane w ponad 30 różnych miejscach, może być lepiej uzasadnione przez 2 osoby, które będą miały różne procesy umysłowe. To jest jak metoda Monte Carlo do wykrywania przed defektami.
Jimmy Hoffa,
@JimmyHoffa Tak więc głównym problemem jest to, że jeśli znajdziemy błędy, zanim zdążą przejść do testów akceptacyjnych, możemy znacznie skrócić czas tracony na przeglądy / testy kodu?
Jeff Langemeier,
3
@JeffLangemeier To właściwie coś więcej; Jeśli zauważysz wady w konstrukcji sekcji A1 podsystemu A przed napisaniem A1, nawet ze względu na naturalny dyskurs, który zachodzi między dwoma programistami w trakcie wdrażania podsystemu A, nie tylko oszczędzasz czas poświęcony na naprawę sekcji A1 oraz sekcje A5 i A7, które są zależne od A1 (lub znajdowanie błędów w tych zależnych sekcjach ze względu na kaskadę naprawiania A1), oszczędzasz czas, nie pisząc wcale tej złej sekcji. Skraca czas testowania tak, ale w ten sposób jeszcze bardziej skraca czas programowania.
Jimmy Hoffa
@MartinWickman To nie jest duplikat. W twoim połączonym naprawdę szukali minusów, mimo że tytuł prosił o plusy i minusy. W tym miejscu podano dokładniejszą odpowiedź profesjonalistów; do tego stopnia, że ​​dla społeczności korzystne jest posiadanie tego, nawet jeśli jest blisko drugiego.
Jeff Langemeier

Odpowiedzi:

25

Częściowo zależy to od tego, jak robisz programowanie w parach. W niektórych przypadkach sterownik pary pisze kod, podczas gdy drugi członek pary obserwuje i omawia szczegóły projektu i implementacji systemu. Kolejny przypadek programowania par obejmuje obie osoby piszące kod jednocześnie - jedna osoba pisze zaimplementowaną funkcjonalność, a druga aktywnie rozwija i pisze kod testowy na poziomie jednostki i integracji, ponownie omawiając szczegóły dotyczące projektu i implementacji systemu.

Niezależnie od rodzaju programowania par skutecznie służy jako ciągły przegląd kodu . Dwójka ludzi patrzy na kod, szukając błędów, zanim uciekną one do późniejszego środowiska testowania systemu / akceptacji lub pola. Masz również dwie osoby, które bardzo dobrze rozumieją określoną część systemu, aby służyć jako redundancja w celu zminimalizowania współczynnika autobusu . Zarówno wczesne wykrywanie defektów, jak i rozpowszechnianie wiedzy o systemie w zespole zmniejsza koszty budowy systemu.

Rozpowszechnianie wiedzy nie ogranicza się tylko do wiedzy technicznej zespołu. W zależności od tego, kim jest para, może pozwolić na przepływ informacji między starszym członkiem firmy do nowego członka na temat innych rzeczy wykraczających poza projekt - stylu kodowania, kultury firmy, oczekiwań i tak dalej. Może również pozwolić komuś, kto jest bardziej zaznajomiony z technologią lub narzędziem, na dzielenie się swoją wiedzą na temat tej technologii lub narzędzia w zastosowanych warunkach rzeczywistych.

Jak już wspomniałeś, pomaga to programistom skupić się na bieżących działaniach . Oprócz przepływu wiele osób rzadziej przeszkadza wielu osobom pracującym nad czymś niż jednej osobie nad czymś pracującym. Jeśli przechodzisz przy czyimś biurku, a on pracuje sam, ale musisz z nim porozmawiać, możesz zapukać i porozmawiać z nimi. Jest to mniej prawdopodobne, jeśli zobaczysz, że dwie lub więcej osób współpracuje lub prowadzi dyskusję - nie będziesz ich przerywać. Przerwy kosztują czas, a spędzanie więcej czasu oznacza wyższe koszty. W najlepszym interesie firmy leży maksymalizacja wydajności pracowników.

Istnieją jednak pewne wyzwania, które należy pokonać, aby programowanie w parach było wykonalne. Rozważ takie rzeczy, jak starcia osobowości lub wybranie par, aby właściwie rozpowszechniać wiedzę. Zastanawia się również, kiedy dokładnie obrócić pary. Programowanie parami wykonane przypadkowo prawdopodobnie nie będzie skuteczne jako zaplanowane. W zależności od składu zespołu parowanie ludzi może nie być skuteczne.

Thomas Owens
źródło
+1 za świetną odpowiedź. Nadal bardzo nie lubię tego pomysłu, ale dobrze prezentujesz jego zalety.
Lubię cięcie pana wysięgnika, to wyjaśnienie sprawia, że ​​jest to wykonalne.
Jeff Langemeier,
9
Wolę model hybrydowy, w którym parowania są bardziej ad hoc oparte na bieżących potrzebach. Są też chwile, kiedy praca w pojedynkę jest bardziej wydajna, a chwile, kiedy praca z partnerem jest lepsza. Bycie zmuszonym do stałych par wydaje mi się arbitralne i nieelastyczne.
jfrankcarr
Bardzo dobra odpowiedź. Jestem również programistą w zwinnym zespole i często się parujemy. Na początku byliśmy również sceptyczni, myśleliśmy, że praca w pojedynkę to najlepsza droga. Następnie, w pewnym momencie ewolucji zespołu, narzuciliśmy programowanie w parach. Żaden kod produkcyjny nie został zatwierdzony, jeśli nie został zaprogramowany jako para. Było to sztuczne egzekwowanie koncepcji parowania, ale bardzo pomogło zespołowi. Wreszcie, po tym, jak wszyscy przyzwyczailiśmy się do tej techniki i nawzajem zmieniliśmy swój styl i współpracujemy doraźnie, głównie gdy implementacja jest bardziej złożona lub podatna na błędy.
Patkos Csaba
@ jfrankcarr, nikt nawet nie sugerował stałych par; Nie jestem pewien, skąd pomysł na ten pomysł. (Zauważ, że w odpowiedzi wyraźnie wspomniano „kiedy zamieniać pary”.) Nasz zespół stwierdził, że naprawdę złym pomysłem jest utrzymywanie tych samych dwóch osób w parach przez dłużej niż jeden dzień lub dwa; zaczynasz wpadać w rutynę. Niektóre zespoły zmieniają się co półtorej godziny (link PDF).
Joe White
3
  1. Mniej błędów w końcowym kodzie (wydajność)
    Nie całkowicie zastępuje recenzje kodu, ale jest bardzo skuteczny, jeśli chodzi o szybkie rozpoczęcie pracy. Istnieją badania, które wskazują w tym kierunku.

  2. Szybsze ukończenie (skuteczność)
    Wskazuje na to szereg badań. Jeśli chodzi o złożone funkcje, 2 głowice są po prostu bardziej skuteczne. Do tego niezbędne jest doświadczenie w parowaniu.

(uwaga: jest to Twój sposób na menedżera: rozsądna finansowo decyzja, ponieważ uzyskujesz większą wydajność dzięki niższej liczbie błędów i bardziej efektywną dzięki szybszemu ukończeniu)

  1. Nauczanie juniorów
    Możesz dodać juniora bezpośrednio do bardziej doświadczonego programisty. Jeśli masz grupę absolutnie początkujących, łatwo jest pozostać w pobliżu i pozwolić im, jako parom, ustalić podstawy. Trzymaj się i udzielaj rad. Koncepcja jest najwyraźniej bardzo stara i wynika z kunsztu.
Sebs
źródło
3

Szybka odpowiedź: większość korzyści i kosztów jest opublikowana w Wikipedii, jednak spójrzmy na to z nieco innego punktu widzenia.

Chciałbym wspomnieć o konkretnych przypadkach korzyści związanych z programowaniem par, które dotyczą środowiska programistycznego agile / scrum, zaczerpniętych z postu na blogu :

Sukces lub porażka oprogramowania zależy od jego jakości, a programowanie w parach bezpośrednio poprawia jakość na wiele sposobów. Kiedy dwóch programistów współpracuje ze sobą, jakość wzornictwa poprawia się, gdy para rozwija krótki, prosty i łatwy w utrzymaniu kod z mniejszą liczbą błędów. Błędy są poważnym problemem jakościowym przy tworzeniu oprogramowania; z dwoma zestawami oczu piszących kod, wychwytuje się więcej błędów, zmniejszając w ten sposób koszty rozwoju. Błędy znalezione na późnym etapie procesu programowania są często kosztowne do naprawienia. Wczesne wykrywanie usterek oprogramowania zapobiega i pomaga zapobiegać trudnym problemom na drodze. Często pojawia się złożoność programowania, a dwa umysły pracujące nad rozwiązaniem problemu razem mogą zobaczyć więcej opcji i wyciągnąć wnioski szybciej niż jeden.

w podsumowaniu:

  • Promuje komunikację w zespole
  • Promuje efektywny transfer wiedzy na temat aplikacji
  • Promuje odpowiedzialność za podejście do projektowania
  • Daje lepszy, łatwy w utrzymaniu kod
  • Pomaga wyeliminować błędny kod na wczesnym etapie
  • Zwiększa produktywność zespołu, ponieważ członkowie zespołu będą mieć niepodzielną uwagę podczas kodowania
  • Poprawia umiejętności komunikacji i współpracy członków zespołu
  • Buduje koleżeństwo w miejscu pracy
  • Sprawia, że ​​praca jest przyjemniejsza
Jusubow
źródło
When two developers work together design pattern quality improves-> to zdanie w ogóle nie ma sensu. Przynajmniej nie ma większego sensu niż When two bakers work together wheat quality improveslub When two race drivers work together asphalt quality improves.
fresnel
To cytat z bloga, na który możesz spojrzeć. Jednak moim zamiarem było położenie większego nacisku na projekt techniczny i jakość kodu, z pewnym rodzajem odpowiedzialności, ponieważ każdy programista stara się być dumny z tworzonego kodu.
Yusubov
2

Programowanie parami ma kilka zalet:

  • Dwaj programiści mogą współpracować przy projektowaniu, potencjalnie tworząc lepszą architekturę / kod - dwie pary oczu mogą dostrzec błędy
  • Wiedza instytucji jest lepiej zachowana - jeśli jeden programista odejdzie lub jest niedostępny, drugi powinien móc kontynuować pracę bez znacznej utraty wydajności
  • Jest to jeden ze sposobów szybkiego szkolenia nowych programistów - połącz ich z doświadczonym członkiem zespołu programistów, a będą oni mogli poznać bazę kodu z perspektywy weterana zespołu
  • Lepsza dyscyplina - sparowani programiści prawdopodobnie będą produktywni przez dłuższy okres czasu, ponieważ jeden lub drugi może przejąć kontrolę nad gwałtownymi ruchami. Potencjalnie uciążliwe zadania, takie jak testy jednostkowe, mogą być pomijane rzadziej niż w przypadku twórców solo.

Wikipedia ma również ładne podsumowanie kosztów i korzyści związanych z wpisem na wiki .

JW8
źródło