• Viorel Bota

Pair Programming

Ce este “Pair programming”


“Pair programming” este o tehnică prin care doi dezvoltatori lucrează la același calculator pentru a implementa soluția necesară. Unul dintre ei este cel care scrie codul la tastatură, iar cel de-al doilea dezvoltator urmărește logica implementării și oferă indicații privind codul care trebuie scris.


Sunt mai multe stiluri de aplicare a tehnicii, iar rolurile diferă în funcție de stil.


“driver - navigator”

Dezvoltatorul cu rol de driver este cel care scrie codul. El se concentrează pe codul pe care îl scrie și descrie pașii pe care îi face în timpul implementării.

Navigatorul este cel care urmărește implementarea codului în timp ce ține cont de contextul în care codul va fi executat și oferă indicații de implementare.

Ideea acestui stil este că unul dintre dezvoltatori se poate concentra pe detalii în timp ce altul urmărește vederea de ansamblu. Astfel împreună cei doi pot implementa un cod mai bun decât ar putea să o facă fiecare din ei pe cont propriu.


“ping - pong”

Stilul acesta se aplică în combinație cu “Test Driven Development”. Unul

din dezvoltatori va scrie testul iar cel de-al doilea dezvoltator va scrie implementarea necesară pentru a face testul să treacă.

Partea de îmbunătățire a codului (refactoring) o pot face împreună.


“Strong-Style Pairing”

“Strong paring” este un stil folosit pentru a ajuta la transferul cunoștințelor de la un dezvoltator mai experimentat la altul cu mai puțină experientă. De exemplu pentru a ajuta la introducerea unui coleg nou în echipă.

În acest scenariu persoana cu mai puțină experiență este cea care scrie la tastatură iar cea cu mai multă experiență urmărește cum se integrează noul cod în soluția existentă.


“Tour guide”

Implementarea acestui stil presupune ca un dezvoltator cu mai multă experiența să scrie codul în timp ce dezvoltatorul cu mai puțină experiență se concentrează pe înțelegerea codului și conceptelor.

Pentru a beneficia de avantajele lucrului în pereche este important ca cei doi membri să adreseze și să discute eventualele întrebări pe care le au, indiferent de diferența de experiență dintre cei doi.


Beneficii


Revizuirea codului în timp ce este scris

Unul din avantajele evidente ale acestei tehnici este că revizuirea codului se face în timp real pe măsură ce este scris. Practic dezvoltatorul care nu scrie la tastatură poate identifica eventualele erori de programare instantaneu și poate discuta cu programatorul care scrie la tastatură moduri de a corecta eroarea.

Deoarece la finalul sesiunii de lucru codul scris de echipă este deja revizuit acesta poate fi încărcat direct pe pe ramura (branch) “main” sau “master” a proiectului, aplicând astfel modelul de dezvoltare numit “Trunk based development”.


Reducerea numărului de erori generate

În 1999, Laurie Williams a derulat la universitatea din UTAH un experiment în cadrul căruia o treime din studenți trebuiau să rezolve individual o serie de probleme iar restul de două treimi trebuiau să rezolve aceleași probleme aplicând tehnica “pair programming”. Rezultatele studiului demonstrează o creștere de 15% a timpului consumat de studenții care au lucrat în echipă dar și o reducere cu 15% a numărului de erori generate.

Studiu mai arată că soluțiile propuse de studenții care au lucrat în echipă aveau în medie mai puține linii de cod decât soluțiile propuse de studenții care au lucrat individual. Concluzie ce pare evidentă, având în vedere că numărul de erori este o funcție a numărului de linii de cod.

Articolul “The effectiveness of pair programming: A meta-analysis” (vezi referințe) prezintă rezultatele unei analize a datelor colectate din 18 studii care analizau eficiența tehnicii “pair programming”. Una din concluziile prezentate de articol este că pentru probleme complexe tehnica “pair programming” reduce numărul de erori introduse de programatori. Această îmbunătățire poate fi cel mai bine observată atunci când tehnica se aplică perechilor de programatori juniori.


Acumularea de cunoștințe

În cadrul unui alt experiment făcut de Laurie Williams, un grup de studenți a învățat să dezvolte aplicații web lucrând toate exercițiile prin tehnica “pair programming”. La finalul cursului, profesorii au remarcat numărul scăzut de întrebări adresate, de studenți, cadrelor didactice. Chestionați despre cauza numărului mic de întrebări, studenții au indicat faptul că reușeau să clarifice majoritatea întrebărilor în cadrul echipelor din care făceau parte.


Un alt aspect important de menționat este că prin rotirea dezvoltatorilor care fac parte dintr-o pereche, membrii echipei pot schimba între ei diverse perspective, evitând astfel fixarea pe o singură idee și corectând din mers înțelegeri eronate asupra soluției pe care o dezvoltă.



Eficiența


Ca proces de dezvoltare

Dacă vorbim despre aplicarea tehnicii în cadrul unor companii trebuie să punem în balanță și costurile aplicării unei astfel de metode. Este rentabil din punct de vedere economic ca doi programatori să lucreze la rezolvarea aceleași probleme?

Articolul, menționat anterior, “The effectiveness of pair programming: A meta-analysis” concluzionează că tehnica nu este universal eficientă și că rezultatele sunt puternic influențate de experiența participanților la studiu dar și de complexitatea problemei care trebuie rezolvată.

Alte publicații citate de articolul menționat în paragraful anterior indică faptul că beneficiile aduse de aplicarea tehnicii “pair programming” se datorează discuțiilor care au loc implicit ca rezultat a aplicării tehnicii și nu formatului care definește tehnica, adică doi dezvoltatori care lucrează la același calculator.


Ca tehnică de învățare

Dacă privim tehnica “pair programming” ca o unealtă de învățare, rezultatele studiilor privind eficiența nu par să fie mai concludente.

În articolul “Evaluating Effectiveness of Pair Programming as a Teaching Tool in Programming Courses” (vezi referințe) autoarea prezintă rezultatele mai multor studii care au comparat notele studenților care au lucrat în echipe cu cele ale studenților care au lucrat individual. Deși sunt studii care arată că studenții care au lucrat în echipă au luat note mai mari există și studii care arată că nu există o diferență între media notelor luate de studenții care au lucrat în echipă și cei care au lucrat individual.



Concluzii personale și direcții viitoare


În ceea ce mă privește, folosesc de mai bine de doi ani folosesc tehnici derivate din “pair programming” ca parte a procesului meu de învățare și ocazional folosesc tehnica în viața profesională.

Cred că tehnica poate fi o parte importantă a unui process de învățare dacă vine ca o completare a unor pași de studiu individual. Practic după ce studiezi un anumit subiect poți să-l aprofundezi aplicând tehnica de pair programming.


În articolele care urmează plănuiesc să detaliez alte tehnici și concepte pe care le putem folosi alături de “pair programming” ca parte a procesului de învățare.



Referințe:


On Pair Programming - Birgitta Böckeler and Nina Siessegger


The Different Styles of Pair Programming - Angela Catalino


https://trunkbaseddevelopment.com/


Llewellyn’s strong-style pairing


The costs and benefits of Pair Programming - Alistair Cockburn, Laurie Williams


Code Red: The business impact of low code quality


The effectiveness of pair programming: A meta-analysis - Jo Erskine Hannay, Tore Dybå, Erik Arisholm, Dag I. K. Sjøberg


Remote Pair Programming - Janet Hughes, Ann Walshe, Bobby Law and Brendan Murphy


Evaluating Effectiveness of Pair Programming as a Teaching Tool in Programming Courses - Silvana Faja


Experimenting with Industry’s “Pair-Programming” Model in the Computer Science Classroom - Laurie A. Williams, Robert R. Kessler