Програмиране по двойки – кога се прилага и какви са ползите от него?

11 юни
Алексей Мироненко e Senior Java разработчик в DataArt
Програмиране по двойки – кога се прилага и какви са ползите от него?
Алексей Мироненко e Senior Java разработчик в DataArt, който ръководи разпределени технически екипи от 8 години. Смята, че софтуерът обединява хората, а програмистите трябва да контролират работните процеси и кода, който създават, взаимодействайки си в екип. Програмирането по двойки се използва активно в проекта, по който Мироненко работи в момента. В тази статия той споделя своя опит относно това кога и как разработчиците могат да използват подобен подход и какви са ползите от него.

Програмирането по двойки (на англ. „Pair programming“)  е една от техниките, дефинирани от методологията за екстремно програмиране. Този подход е познат още от 80-те години, но сега е особено важен поради развитието на микросервизите и свързаните с това промени в комуникацията между разработчиците.

Основни принципи в програмирането по двойки

В основата на този тип програмиране стои това, че двама (понякога дори повече) разработчици едновременно решават обща задача, докато седят на една и съща работна станция. Тъй като има само една клавиатура, един от разработчиците играе водеща роля и се нарича „драйвер“. Другият разработчик се нарича „навигатор“ или „наблюдател“ и изпълнява навигационни функции. Наблюдателят определя посоката на работата на по-абстрактно ниво и постоянно следи кода, който колегата му пише.

Виждал съм екип от шестима души да работи върху код зад един монитор, но това със сигурност е необичайно. Дори и с този подход ролите не се променят много, тъй като все още има един драйвер (този, който използва клавиатурата и мишката), а останалите помагат за навигацията. Разбира се, ролите не са постоянни: членовете на екипа могат да заемат позицията на драйвер един след друг, когато е необходимо, в зависимост от текущата задача.

Съществува и вариант на сдвоени програми, известен като ping-pong, който е пригоден за тестово развитие. Що се отнася до мен, аз съм специалист в традиционния подход на програмирането по двойки, когато един създава кода, а друг насочва колегата си в ролята на навигатор.

Дистанционно програмиране по двойки

Тази вариация на програмирането по двойки включва отдалечена работа чрез инструменти, които се ползват за съвместно редактиране на кода. Проблемът тук е, че когато няма директен контакт между разработчиците, комуникационните умения стават по-важни. В този случай е по-трудно да не се загуби връзката и да сме сигурни, че човекът от другата страна получава достатъчно време за пряко взаимодействие с кода. По-лесно е, ако програмистите работят локално или използват споделяне на екрана. В противен случай страните могат да получат неприятно усещане за изоставане. Забавянето в мрежата също може да причини някои проблеми. Въпреки това, бихте могли да избегнете повечето от тях, като следвате сравнително прост етикет за комуникация от разстояние.

Кога се използва програмирането по двойки?

Трудно е да се дефинира случай, в който е наложително да се програмира по двойки. Въпреки това, горещо препоръчвам да използвате този подход, когато овладявате непозната за вас материя или работите с най-новите технологии, необходими за даден проект. Програмирането по двойки значително ускорява обмена на знания и позволява на човека от екипа, който знае малко повече в сравнение с другите, да прехвърли тази информация на всички едновременно, вместо да обучава всеки колега поотделно.

Вторият идеален случай за използване на програмирането по двойки е, когато създаваме нещо наистина важно. Тази техника ви позволява да не изпращате кода многократно на различни хора за преглед заедно със съпътстващи детайли, съдържащи сложните въпроси. Писането на кода заедно и след това - проверка заедно, би бил ефективен подход, спестяващ време и осигуряващ високо ниво на надеждност.

Доказано е, че програмирането по двойки значително повишава качеството на кода (според проучвания - около 15%), въпреки че този процент ще зависи преди всичко от самите разработчици и техния опит в прилагането на техниката. Мисля, че качеството на кода се увеличава главно, защото ние не само получаваме по-голям обем данни за анализ на кода, но и го правим на много по-ранен етап от процеса на разработка.

Кога програмирането по двойки няма да работи?

Трудно би било да използвате този подход за програмиране при осем часа непрекъсната работа, това е сигурно. Ако ви притискат срокове, програмирането по двойки също няма да работи с желаната от вас скорост. Но пък би било полезно за пренаписване на част от кода, за да се доведе до ниво, което да е приемливо за екипа.

Програмирането по двойки изисква доста усилия по отношения на комуникацията, така че може да се окаже неподходящо в ситуация, в която хората не обичат да работят активно в екип или са твърде свикнали с йерархията. Особеността на човешката комуникация е такава, че ако единият от двамата поеме ролята на лидер, другият (при условие, че няма конфликт) автоматично поема ролята на своеобразен подчинен, независимо от уменията и опита си. От гледна точка на проекта това е непродуктивно, а за да се избегне такъв ефект, равенството в екипа трябва да се поддържа.

Ползи

Важен положителен ефект от програмирането по двойки е възможността за минимизиране на броя на активните задачи. Екипът ще бъде по-концентриран, вместо да скача от една задача на друга, и в крайна сметка - ще спести време. По-малко задачи ще бъдат обработвани едновременно, но общото качество ще се увеличи и нито една от тях няма да остане незавършена. Всички знаем как понякога задача, която рутинно отнема 30 минути на ден, се губи в поток от други по-спешни неща и може да бъде отложена или забравена.

Принципите, заложени в програмирането по двойки, ви дават възможност за коректив в реално време. Ако вашият колега е достигнал до същото решение, до което и вие, това е сигурен знак, че сте на прав път. Всякакви съмнения и въпроси могат да бъдат изразени незабавно и всеки възникнал проблем може да бъде решен на момента. Увереността, която се изгражда по време на тясно сътрудничество, ви позволява да не се притеснявате, че мнението ви може да е погрешно или че отговорът на даден въпрос е твърде сложен.

Правила за комуникация

При този тип програмиране няма строги правила, но са валидни няколко прости общи препоръки:

  • не се страхувайте да говорите на глас;
  • бъдете учтиви и приятелски настроени;
  • не се дръжте като шеф, когато обяснявате нещо, нито пък като подчинен, когато питате.

Препоръчвам да следвате една простичка техника. Ако забележите, че човекът, който седи до вас, прави нещо погрешно, останете позитивни и бройте до 10. Прибързаната реакция може да осуети партньора ви. Напълно възможно е, стигайки до края на реда, той сам да забележи проблема, да се върне в началото и да коригира неточността. Ако това не се случи, тогава трябва да посочите грешката.

Разберете под каква форма вашият колега би искал да получи обратна връзка. Тази тема надхвърля програмирането по двойки и е свързана с междуличностни отношения, soft skills и работа в екип, но е много важна. Като цяло най-продуктивният подход за получаване на всякаква обратна връзка е приемането й като градивна.

Перспективи за растеж

Непрекъснатото усвояване на комуникационни умения прави разработчика, който участва в програмирането по двойки, добър техническа лидер в бъдеще. Да не говорим за факта, че интензивният обмен на информация е чудесна възможност за бързо израстване по отношение на технически познания. В допълнение, този подход ни дава ценна обратна връзка и възможност да обърнем внимание на незначителни недостатъци в кода.

Между другото, първите програмисти, работили с машината Eniac, са си партнирали по двойки. Те решили, че това е единственият начин да овладеят спецификите й бързо и определено този подход им е бил от полза.