Pair programming е една от по-скандалните практики в Extreme Programming. В нея двама програмиста работят заедно на един компютър. Клавиатурата е една и се предава от време на време. Подходяща метафора за това е двойката шофьор и навигатор. Диалогът е ключов – раждат се идеи, пречупват се през общия опит и резултират в код. Като практика, pair programming претендира за (1) по-добра ефективност, (2) по-високо качество и (3) по-малко дефекти.
За първи път правех pair programming през 2005. Това е страхотен начин на работа и горещо ви го препоръчвам. Има ред предизвикателства – да убедите мениджмънта, да се сработите с колегите и дори да си промените навиците (например никакъв IM). Ако се справите с това, резултати се виждат бързо.
Не целя да ви продам идеята или дори да ви обясня какво представлява. Искам само да разкажа защо ми харесва да работя така:
По-високо качество
Работата по двойки подобрява качеството. Това става по няколко начина. Първо, работи срещу мързела – ако ме домързи да напиша тест или да направя даден код ясен, човекът до мен ще ме сръчка. Второ, кодът се гледа от друг чифт очи – партньорът забелязва дефекти и предлага подобрения. Това е като code review в реално време.
Трето, подобрява консистентността на проекта. Всеки се ръководи от правила как да пише, които обикновено са неявни („така ми харесва повече“). Когато имаме разминаване, разговорът първо ги прави явни („аз предпочитам това, защото Х, ти онова, защото Y“), след което ги синтезира („нека в този проект да правим Z“). Резултатът – еднакъв подход.
Възможност за учене
Научавам малки и полезни трикове – „горещи клавиши“ на работната среда, нова shell команда, непознат метод или хитър номер във Vim. Запомням по-лесно, понеже ги виждам в контекст. Мога да питам, ако нещо е неясно. Така се научих на ред неща, сред които git, jQuery и Eclipse.
Ако съм нов в проекта, това е добър начин да навляза в него. Когато имам по-запознат програмист зад гърба си, мога да задавам въпроси или смело да правя промени. Дори да познавам проекта, така научам причините за взети решения по дизайна.
Има и по-тънък момент – сблъсквам с друг начин на мислене. Мога да наблюдавам подхода на партньора, да се опитам да го усвоя и в последствие да разширя собствения си с идеи от неговия. Не съм открил по-ефективен начин да ставам по-добър.
Социална дейност
Програмирането често е интровертно. Проблемите изискват внимателен анализ, разучаване, проба и грешка. Най-добре правя това сам. Но аз съм екстровертен – имам нужда от други хора, с които да взаимодействам. Така ангажирам по-голяма част от мозъка си.
Pair programming-а е ефективен начин да се почувствам част от екипа. Усещам, че преследваме обща цел заедно. Дава ми чувство за принадлежност. Мога да взаимодействам двупосочно с всички чрез човека, с когото работя в момента – ще ми предаде уроците от другите и ще предаде моите на тях.
И още – честият pair programming създава връзка между хората. Това сплотява екипа. Поглеждайки назад, чувствах се много по-добре в екипите, в които го практикувахме. Някои от хората ми липсват.
Обща култура
Един XP екип има нужда от обща култура. За да има колективната собственост, стилът на различните членове трябва да е подобен (или дори идентичен). Трябва да могат независимо да достигат до еднакви или сходни решения на проблемите. В идеалния случай, когато видя парче код, трябва да не мога да позная дали аз съм го писал.
Pair programming е необходим за такава култура. От една страна, той подпомага създаването ѝ – това става всеки път, когато двама стигнат до консенсус и изградят „правило“ за вбъдеще. Така тя се развива естествено и еволюционно. От друга, това е ефективен начин тя да се разпространява и утвърждава. След известно време, всеки от екипа може да каже „ние правим така“, „ние подхождаме така“ и „ние мислим така“. Дори извън екипа да прави, подхожда и мисли по различен начин.
Съгласен. Първият път, когато чух от теб за това си помислих, че е излишно. Но не съм работил в XP екип. Бяха ми възложили проект, по който да работя с още един колега. Имахме свободата да pair-ваме и това наистина даде резултат – както за по-добър код, така и за нас самите.
Просто е много яко – чувствам се като в училище, когато играехме игри заедно с един съучених, вкъщи на моят компютър и си помагахме с идеи и всеки допринасяше с уменията си в различни ситуации. (thumbs)
Съгласен. Но е много трудно да убедиш мениджмънта, че това ще даде добър резултат…