Párové programování

Otázky a odpovědi – Rozhovor s Marianem Schubertem

Těsně před začátkem pražského Coderetreatu jsem se ptal několika přítomných programátorů na jejich zkušenosti s párovým programováním. K mému překvapení byly minimální, v následné diskusi většinou zazněl názor, že v reálné práci “u nás ve firmě” tato technika použít nejde. Pak následoval vlastní Coderetreat, během něhož se muselo povinně pracovat v páru. Myslím, že řada přítomných radikálně změnila názor na praktickou použitelnost a efektivitu této techniky. Rád bych se tě, Mariane, jako velkého zastánce párového programování, zeptal na pár otázek, které mohou zajímat všechny vývojáře a team leadery, kteří si pohrávají s myšlenkou párové programování použít.

 

Martin: Jak bys několika slovy popsal, co vlastně párové programování je?

Marian: Párové programování je jedna ze základních technik XP (Extrémního Programování), při které sedí u jednoho počítače dva programátoři a pracují na jednom úkolu společně. Tomu, kdo programuje, se říká řidič a druhý má roli navigátora. Úkolem navigátora je přemýšlet o problému z většího odstupu, než je schopen samotný řidič. Ten naopak řeší konkrétní implementaci jednotlivých částí.

Martin: Jaké jsou podle tebe největší výhody práce v páru?

Marian: Jednou z výhod je již zmíněný odstup navigátora. Dost často se stane, že se v průběhu řešení komplikovaného problému řidič ztratí, případně zasekne. Někdy jde o malé záseky jako chybějící středník, obrácená podmínka, prohození parametrů. Myslím, že většina z nás programátorů zažila situaci, kdy jsme dlouho hypnotizovali nefunkční kus kódu, který jsme právě napsali. Rychlým řešením pro mě obvykle bylo požádání o pomoc kolegu. Již samotný akt vysvětlení (komunikace) problému někomu jinému mě často přivedl na cestu k řešení. Někdy zas stačil společný pohled do zdrojového kódu a chyba byla objevena v průběhu několika vteřin.

Právě rychlá a kvalitní zpětná vazba je během programování důležitá věc. Při párování stačí, když řidič řekne, co plánuje řešit nebo napíše kus kódu a navigátor mu může poskytnout jeho názor okamžitě. Největší výhodou to je v situacích, kde zná řidič několik potencionálních řešení nebo naopak nezná žádné, které by plně vyhovovalo.

Martin: Nemůžu si pomoct, to co popisuješ je z mého pohledu jen další aplikací Ashbyho zákona Law of Requisite Variety – řidič má vedle sebe kontrolní systém – navigátora… Na co by si měli dát programátoři při párovém programování pozor, hlavně v úplných začátcích?

Marian: Základem párování je již zmiňovaná komunikace. (více na téma komunikace ve článku Proč si nerozumíme). Pokud chce člověk s někým programovat v páru, musí s ním umět komunikovat. Zejména v začátcích bych doporučil párování jen s lidmi, se kterými si rozumím a jsem na stejné vlně. Jako u každé týmové aktivity je důležité mít schopnost akceptovat pohled, případně řešení toho druhého, minimálně v takové míře, že jsem ochoten zkusit jinou cestu.

Pozor by si měl dávat hlavně navigátor. Jeho role není být pouhým přísedícím, který kouká na to, jak ten druhý programuje. O tom, na čem se pracuje, by měl mít stejný nebo lepší přehled než řidič. Jeho úlohou je koukat dopředu a přemýšlet o práci v rámci většího celku, systémově. Ideální je když si navigátor udržuje seznam kroků, které jsou potřeba k dokončení úkolu. Řidič se pak může 100% soustředit na implementaci. Pokud se navigátor ztratí, případně neví, co dělá řidič, měl by to s ním okamžitě konzultovat. Jinak se z něj stává již zmíněný pouhý přísedící.

Martin: Hodně lidí si myslí, že párové programování sice přináší výhody jako je přenos zkušeností, zlepšení komunikace, ale považují ho za méně efektivní způsob práce. Jednoduše řečeno dva vývojáři dělají práci, kterou by mohl udělat jeden. Co si o tom myslíš ty?

Marian: Záleží, co si člověk představuje pod efektivitou práce při vývoji SW. Omezení párového programováni je to, že v jeden okamžik může psát na klávesnici jen jeden člověk. Programování ale není jen o psaní. Pokud by tomu tak bylo, pak bychom každý den vytvářeli tisíce řádek nového kódu.

Z mé zkušenosti větší část aktivity programátora tvoří pochopení zadání úkolu, zjišťování kde a jakým způsobem provést danou změnu a zároveň reagování na nově zjištěné skutečnosti, které získá pohledem do stávajícího kódu. Programování je vlastně řešení větších nebo menších záseků a to jde v páru mnohem lépe. Jejich výraznou eliminací pak pár získává prostor (a zároveň i sílu) dělat svou práci kvalitněji.

Důsledkem párového programování je i větší koncentrace na samotnou práci. Odpadá jakákoliv aktivita (email, FB, Twitter), která nesouvisí s úkolem, protože je jasné, že by byla pro toho druhého ztrátou času. Při intenzivním párování na to člověk vlastně ani nepomyslí.

Martin: Je nutné dělat code review na zdrojový kód napsaný párem?

Marian: V první řadě záleží na složení páru. Dva junioři určitě uvítají pohled seniora. Dále se může stát, že pár mění část softwarového systému, kterou zná lépe někdo jiný z týmu. V takovém případě dává smysl požádat konkrétního člověka o finální review. V neposlední řadě stojí za to, udělat review i v případě, když pár vytvoří základy nové funkcionality, na které bude stavět zbytek týmu. Pak dává smysl, aby se na to podívali všichni ještě před integrací do hlavní vývojové větve.

U běžných úkolů, ale dodatečné review potřeba není, protože přináší jen malou přidanou hodnotu, pár může integrovat svou práci okamžitě po jejím dokončení.

Martin: V Netsafe Solutions, kde pracuješ, se páruje docela intenzivně. Udělali jste nějaká speciální opatření nebo změny, aby se vám v páru pracovalo lépe?

Marian: Dlouhou dobu nám vyhovovalo párování u běžných pracovních stanic, v poslední době ale zkoušíme experimentovat a proto jsme zřídili dedikované párovací stanice. Ty poskytují dostatek prostoru pro dvě klávesnice, dvě myši, velký monitor a psací potřeby. U běžných stanic měl klávesnici a myš jen řidič a to komplikovalo navigátorovi život v situacích, kdy bylo jednodušší vyjádřit myšlenku pomocí kódu než slovně. Tento nový setup nám dále umožňuje využití pokročilých technik jako je třeba Ping-Pong TDD.

Martin: Jsou situace, kdy bys párování nedoporučil nebo zakázal?

Marian: Pokud se najdou dva lidi, kteří chtějí párovat, tak podle mě nedává smysl něco zakazovat nebo nedoporučovat. Samozřejmě jsou i přímočaré úkoly, u kterých musí programátoři sami zvážit, jestli jim to dává smysl. Každý z nás má hlavu a nohy, takže pokud v půlce úkolu zjistí, že to smysl nedává, je na místě párování ukončit.

Martin: Ze své zkušenosti vidím, že jedním z největších problémů při vývoji software je obrovská míra nedorozumění v komunikaci mezi vývojáři a dalšími členy týmů. Pomáhá párování tento problém řešit?

Marian: Práce programátora je z tohoto ohledu opravdu náročná. Na jedné straně musí správně interpretovat zadání – na straně druhé musí transformovat to, co pochopil do kódu, kterému musí rozumět počítač a zároveň i zbytek týmu.

Ne vždy se jedno nebo druhé povede správně a párové programování určitě pomáhá v tom, že vyžaduje neustálou komunikaci mezi řidičem a navigátorem. Co člověk – to jiný výklad zadaného úkolu. V situacích, kdy se řidič s navigátorem neshodnou na pochopení zadání je potřeba kontaktovat zadavatele nebo ostatní členy týmu.

Pokud programátor pracuje sám, může se snadno stát, že si zadání vysvětlí po svém, a v dobré víře dodá něco úplně jiného, než očekával ten, kdo úkol zadal.

Martin: Stalo se ti při párování něco, co tě vyloženě překvapilo, ať už pozitivně nebo negativně?

Marian: Před dvěma, třemi léty jsem si tu techniku neuměl v praxi vůbec představit. Nejvíc mě proto překvapilo jak lehké je začít a to, že to funguje. Teď jsou dny, kdy nepáruji spíš výjimkou.

Martin: Co tebe osobně k té technice přivedlo a proč tě tak zaujala?

Marian: Vlastně za to může můj kolega, kterému se při code review asi desetkrát vrátil kód, na kterém pracoval. Nakonec rezignoval a požádal o pomoc. Já jsem se přihlásil a společně jsme ten úkol dotáhli do úspěšného konce. Radost z dobře odvedené společné práce nejspíš zapříčinila to, že jsme párové programování začali provozovat častěji a zhruba po roce jsme do toho zatáhli i další členy týmu.

Martin: Kdybys měl od zítřka přísný zákaz párování, jak by ses cítil?

Marian: Takový zákaz mi přijde stejně absurdní jako zakázat pomáhání jinému členovi týmu. Neumím si takovou situaci představit. Asi bych měl pocit, že pracuji na hodně podivném místě.

Martin: Porušil bys ten zákaz?

Marian: Spíš bych řešil, jak ten zákaz zrušit nebo bych uvažoval o změně zaměstnavatele.

Reklamy

3 thoughts on “Párové programování

  1. Pěkně řečeno. Škoda, že jste nezmínili technický aspekt. Jedna z překážek párového programování je i různé prostředí. Je neskutečná brzda, když přijdete ke kolegovy, který má jiný OS, IDE, klávesnici…

    V předchozí firmě jsme to měli dotažené až tak daleko, že jsme měli stejné pluginy v IDE, stejnou minor verzi OS (včetně updatů). Rostu z windows, když musím někam kliknout, abych mohl skrolovat. Jsou to maličkosti, které mě odvádějí od soustředění na úkol.

    • k3mper napsal:

      Dobrá připomínka. S prostředím máme podobný problém. Někdo používá Vim, někdo zas Emacs, Eclipse, Kate nebo PSPad. Možná to je téma na samostatný článek. Já jsem „bohužel“ ze sekce Vim/Emacs a hodně jsem u toho trpěl 🙂 Nakonec jsme zkusili mít otevřené stejné soubory ve dvou editorech. Funguje to dobře hlavně u Ping-Pongu, kde jeden z páru edituje produkční kód a druhý píše testy. Řeší to i problém klávesnice (CZ vs US). Tu fyzickou si nosím sebou.

  2. Martin Hruška napsal:

    Kde se dají sehnat firmy, které takhle pracují?

    Klidně bych šel i platově níž 🙂

Zanechat Odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

WordPress.com Logo

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit / Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit / Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit / Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Odhlásit / Změnit )

Připojování k %s

%d bloggers like this: