O čem je párové programování?

Když se řekne párování, někteří vidí dva lidi ztrácet čas u jednoho počítače, když by mohl každý dělat něco jiného. Jiní zase vidí dva lidi, kteří daný úkol zvládnou za polovinu času. Pravda může být v obou případech, ale oba případy jsou velmi vzácné. Častokrát je to někde mezi a pravá podstata párování leží jinde, než ve snaze mít úkol hotov rychleji.

Párování je především o investici do budoucna. O investici do kódu, lidí a týmu celkově.

Většinou všichni začnou řešit především, jak párování pomůže kódu, aniž si jsou plně vědomi dalších výhod. I já tak kdysi začal. A jak tedy pomůže kódu? Především tak, že ho vidí dva lidi po celou dobu vývoje. Tím se odstraní problém code review, kdy se při revizi už programátor kouká na výsledek a ne na průběžný tok myšlenek. Programátor může opomenout některý edge case, který bude při review o sto řádcích ještě více zahrabán, ale při programování to druhého hned trkne do očí.

Během párování jsou totiž dva. Jeden, který píše, a druhý, který diktuje aka driver. Běžný muž nezvládne dvě činnosti naráz :-) a tak se může plně věnovat psaní anebo přemýšlení nad všemi dopady okolo. Jinými slovy během psaní algoritmu těžko budete přemýšlet jaké to bude mít následky pro současný či dokonce budoucí kód. Častokrát dostanu nápad, zamyslím se, napíšu kód, pak se na výsledek podívám a zjistím, že jsem si neuvědomil jeden podstatný detail a musím lehce poupravit. V tom lepším případě, v horším až o pár dnů později po review, kde musím upravit mnohem víc věcí, které jsem na tom postavil. A na takové momenty tu je driver – mám instantní feedback na to, co dělám.

Dalo by se říct, že párování je velmi poctivé review. Ano, ale tím to zdaleka nekončí. Mnohem zajímavější je investice do lidí. Jeden z nejčastějších modelů párování je jeden zkušený a jeden méně zkušený programátor. Nemusí to znamenat nutně pouze junior a senior, i junior může mít roli toho zkušenějšího. Jde vždy o konkrétní dovednosti pro dokončení konkrétního úkolu, například programovací jazyk, framework, databáze, část aplikace, … A v této dvojici ten zkušenější v dané oblasti předává znalosti tomu druhému.

V takovém spojení samozřejmě úkol nebude hotov rychleji. Zkušenější programátor by to zvládl sám rychleji. Jenže ten druhý by sbíral zkušenosti sám mnohem déle. Tím je snad očividné, že z pohledu týmu se jedná o jasnou výhodu, investici. Navíc investice není ani tak velká – stejně by se dělalo code review. Při sečtení času psaní kódu, review a případné úpravy vs. párování nebude nijak velký rozdíl. Dokonce párování pomáhá i tomu zkušenějšímu. Programátoři nutně potřebují trénovat (sebe)prezentaci, protože spoustu skvělých lidí selhává při sdílení super nápadů či technologií. Plus nikdo ještě nesežral Šalamounovo hovno, nikdo neví vše a správně. Každý může mít malý nápad, který úplně změní pohled na věc.

Sám nespočítám všechny případy, kdy jsem po dlouhé době zjistil, jak se věci vlastně skutečně mají. Například dlouhou dobu jsem měl o některých technologiích mylné představy a přistupoval k nim za špatný konec. Všechno nakonec sice fungovalo a review prošlo. Kdybych však pároval a řekl moje myšlenky někomu nahlas, opravil by mne mnohem dřív a mohl jsem si ušetřit v některých případech spoustu času.

I z toho důvodu je někdy velmi výhodná kombinace senior a senior. Například jsme v práci měli úkol a byli jsme dva s lehce různými názory, jak to udělat. Vyžádal jsem si párování a tím se vše vyřešilo. Než se dlouze dohadovat, rovnou sednout a diskutovat při každém kroku. Doiterovali jsme do nějakého řešení uprostřed a i když tam budeme po odstupu času ještě ladit nějaké detaily, výsledek je mnohem lepší než kdyby dělal kdokoliv z nás sám.

Abych to shrnul, párování je investice. Díky párování se mnohem rychleji zaučí nováčci v týmu. Rychleji celý tým nasbírá spoustu potřebného know-how v týmu. Corové věci budou mnohem vyšší kvality. Nebude potřeba review, párování je totiž nejkvalitnější review. Rychleji lze vyřešit problém – kolikrát jste se už zasekli u řešení (nejen) bugu a potřebovali pomoc? Naučíte se různé postupy, tooly a zkratky, na které byste jinak nenarazili. Naučíte se prezentovat a učit. Samé pozitivní věci!

P.S.: Pokud nejste po půl dne párování naprosto vyřízení, děláte to blbě. Párovat nelze celý den, párujte klidně složité úkoly půl dne a pak sami odpočívejte u jednoduchých až primitivních úkolů.

6 responses
Párové programování nejlépe ukáže, zda je tým kompatibilní. Není snadné ukázat vlastní chyby, nechat si cizího člověka vlézt do svého osobního prostoru, vysvětlovat nechápajícímu ignorantovi. Tým, kde může párově programovat každý s každým je neexistující zázrak a vůbec netuším, jak se k němu dobrat.
@Martin: Ano, to je pravda. Posledně (http://blog.horejsek.com/parove-programovani-do...) jsem sdílel vtípek, že pokud se mají programátoři rádi, párují, pokud ne, dělají review. Skrývá se v něm i hodně pravdy. :-) Podle mne nemá smysl se snažit o každý s každým (myšleno v globálním měřítku). Důležité aby to fungovalo téměř každý s každým v týmu. A pokud tam je někdo, s kým nikdo nechce párovat, pak otázka, zda do týmu patří.
Hezky napsáno. Ještě bych doplnil, že úspěšné párování se velmi pozitivně projeví také v zapojení méně aktivních členů týmu a tím dále zvyšuje výkonnost týmu a kvalitu výstupu. Práce s dlouhodobou, účinnou pracovní motivací - kam týmová práce bezesporu patří - je jedno z témat, nad kterým by se management (resp. ten kdo rozhoduje o investici do týmu) měl zamýšlet velmi seriózně a kontinuálně, protože tím může zabránit podstatné části migrace zaměstnanců.
@Jiří Huml: Souhlasím, díky za doplnění. :-)
"Vyžádal jsem si párování a..." Vau, to uz zamestnavatelia umoznuju? alebo je to len na dohode v teame a s nadriadenym? Osobne niektore kriticke opravy alebo zlozitejsie algoritmy by vacsinou stali za parove programovanie a to uplne bezne. V praci sice parovo neprogramujeme ale ked som podstaveny pred zlozity problem tak to bezne prediskutujem s kolegom a v tedy nas (alebo staci ak mna) napadne celkom zaujimave riesenie alebo riesenie co som si myslel ze bude dobre tak vyvratim ze je nanic a ze to musi byt uplne inak. podla mna aj toto sa da povazovat za isty druh paroveho programovania, nemyslis? A z inej strany (sice sa uz nejedna o parove programovanie), obcas ak som na projekt sam je tiez zaujimave raz naprogramovany kod nechat tym istym clovekom ale s odstupom casu refaktorovat, dat mu na to trebarz polovicny cas ktory investoval do vyvoja aby ho len spravil lepsi. mam pocit ze za kazdym razom co do kodu sahnem prepisem ho takmer cely ale za kratsi cas a pritom vysledok je o vela lepsi a mam z danej prace aj lepsi pocit ,-)
Jo, i diskuze je taková forma párování. :-) I každý se odstupem času zlepšujeme, ale to bych úplně nenazval párováním. Protože párování by ti mělo ušetřit čas na začátku – kdy už při vývoji diskutuješ s další osobou a hledáte to nejlepší možné řešení, aby se neztrácel čas složitým refaktorem, hledáním bugům atp. Což párovat sám se sebou za několik měsíců úplně nesplňuje. :-))