Quando funziona la programmazione in coppia? Quando evitarlo?


51

Invece di accoppiare il programma in modo slavish continuamente, usiamo la programmazione della coppia in modo selettivo nel nostro team. Penso che funzioni meglio nelle seguenti circostanze:

  • Accrescere nuovi membri del team su un progetto (invece di lasciarli sfuggire alla documentazione o al codice da soli).
  • Avere persone junior e senior che lavorano insieme (aiuta a mostrare alcune delle abilità e dei trucchi degli sviluppatori più esperti, inoltre consente ai vecchi cani di imparare nuovi trucchi a volte).
  • Quando qualcuno sta cercando di rintracciare un difetto, spesso aiuta ad accoppiarsi con una nuova serie di occhi.

Quando utilizzare il programma di coppia e perché?

Quando evitare la programmazione delle coppie? Perché?


11
Cercare di comprendere il valore e la logica della chiusura di questa domanda tre anni dopo che gli è stata chiaramente data una risposta obiettiva con riferimenti alla ricerca empirica. Di tutte le pratiche comuni ad Agile, questa è una delle più ricercate e documentate. La formulazione della domanda deve essere modificata in qualche modo? Le aspettative / gli standard sono cambiati nei tre anni successivi alla sua pubblicazione?
Michael,

Risposte:


44

La ricerca compilata da Laurie Williams indica che la programmazione delle coppie funziona meglio sui team industriali quando

  • Le coppie lavorano su specifiche, progettazione e complesse attività di programmazione - gli esperimenti indicano che non viene mostrato alcun miglioramento della qualità quando si lavora su attività semplici in una coppia ma potrebbero esserci miglioramenti della velocità. Si noti inoltre che la coppia "programmazione" spesso include attività diverse dalla scrittura di codice.
  • Ogni individuo in un'associazione ha circa lo stesso livello di competenza - mentre la programmazione delle coppie è ottima per l'allenamento, le coppie sono più coinvolte quando si trovano allo stesso livello.
  • I ruoli ruotano regolarmente : la rotazione regolare aiuta a mantenere attivo il copilota mentre gli individui tendono a contribuire maggiormente quando guidano o sentono che stanno per guidare.
  • Le coppie ruotano regolarmente : i team hanno espresso conforto nel conoscere le diverse parti del sistema che stanno costruendo. La rotazione delle coppie aiuta con il trasferimento di conoscenze che riduce alcuni rischi nel progetto. In un ambiente accademico le coppie sono spesso assegnate, tuttavia l'industria è generalmente auto-assegnata spesso durante le stand-up. In entrambi i casi, la coppia è più efficace quando entrambe le persone sono partecipanti disponibili che vedono valore nell'attività di associazione.

Nella mia esperienza personale ho scoperto che il mio team XP spende in media circa il 60% della nostra programmazione di coppie di tempo di sviluppo. Il resto del tempo è dedicato allo sviluppo individuale. Non è raro accoppiarsi per creare un progetto iniziale, lavorare da solo sul progetto per alcune ore, quindi tornare insieme per finire parti difficili o difficili del codice.

Ho anche scoperto che la programmazione delle coppie è più efficace in blocchi da 1,5 a 2,5 ore circa. Qualcosa di molto meno tende a richiedere un sovraccarico eccessivo per l'installazione, mentre molto di più e le coppie tendono a diventare irritabili e stanche. Cranky e stanco significa che non stai comunicando bene e che potresti lasciare che i difetti scivolino nel sistema.


Ottima risposta Michael. Accettarlo da molte buone risposte in quanto aveva il giusto mix di esperienza personale e un ottimo collegamento con la ricerca.
Paddyslacker

Anche se, ironicamente, mentre il link ha funzionato quando hai pubblicato la tua risposta, ora è un 404, doh!
Paddyslacker

Ho corretto il collegamento ipertestuale nella tua risposta Michael, quindi tutto va di nuovo bene.
Paddyslacker

la parte "complessa" è molto importante. Se fai un banale lavoro di battitura, il tuo partner si annoierà molto rapidamente.
Dave O.

3
@DaveO .: Posso solo fare cose semplici usando la programmazione in coppia. Per compiti complessi devo pensare, e la programmazione in coppia è solo una fonte di distrazione (vedi la risposta di Will Sargent). Trovo ancora molto utile discutere problemi complessi con i colleghi, ma questo è diverso dallo scrivere l'intero codice insieme.
Giorgio,

29

La programmazione delle coppie ha funzionato per me in pochissime situazioni.

Dove la programmazione della coppia non riesce per me

La storia breve è che la programmazione in coppia non funziona per me come il modo principale di sviluppare software. Posso associare il programma per un giorno o forse una settimana, soprattutto se siamo concentrati su un problema particolare. Ma dopo? Ho finito. Crostini. Non voglio vedere nessuno, parlare con nessuno e ho bisogno di almeno un paio di giorni in una grotta fino a quando non sarò di nuovo in forma per la compagnia umana.

È una storia triste, ma la cosa divertente è che ora sono molto più felice di come è finita. Sono felicemente impiegato in un contratto in cui lavoro da casa o da un bar, e ho fatto nuove amicizie ed esplorato più San Francisco di quanto avessi mai pensato possibile. Ho una bicicletta e un laptop e, purché rispetti le mie scadenze e controlli regolarmente il codice, il mio tempo è il mio.

Elencherò i grandi problemi che ho con la programmazione della coppia in anticipo e ti fornirò i dettagli e gli aneddoti in seguito.

  1. Focus diviso.
  2. Nessuna sperimentazione
  3. Nessuna nota alta.
  4. Nessun orgoglio nella proprietà.
  5. Nessuna via d'uscita...

... Ho chiesto ai miei colleghi se vedevano quello che vedevo, se mi mancava qualcosa, qualsiasi cosa - non vedevo come potesse funzionare, come la gente potesse continuare a farlo. Dissero che stavo bene, che ci volle solo del tempo per sistemarmi e adattarmi. Che all'inizio è stato difficile per tutti.

Alla fine, mi sono ritirato in me stesso. Tra il mal di testa accecante, l'insonnia e il martellante, insoddisfatto bisogno di scrivere codice, ho smesso di rispondere all'input. Potrei fissare uno schermo e non vedere nulla. Qualcuno potrebbe parlarmi inaspettatamente e io non li sentirei. Stavo soddisfacendo i requisiti di base del mio lavoro, ma non ero lì. Avevo esaurito tutto quello che avevo appena mostrato per la giornata. Ho iniziato a controllare il mio iPhone mentre l'altro partner stava scrivendo.

Alla fine - appena tre mesi dopo, e per la prima volta in assoluto - sono stato licenziato per non essere stato in forma di squadra durante la programmazione di coppia.

Non da solo

Ho scritto questo non solo per capirlo, ma anche per poterne parlare. C'è stata una presunzione secondo cui la programmazione in coppia funziona per la maggior parte delle persone ed è molto più semplice e veloce di quanto sarebbe la programmazione in solitario. Questo può o non può essere il caso, ma come pratica a lungo termine, la programmazione di coppia non funziona per me. Ci sono molte altre persone che accoppiano la programmazione per entrambi. Anche noi contiamo ...


2
Anch'io. Praticamente solo nel rilevamento dei difetti e anche in questo caso è più brainstorming e filosofia della programmazione reale.
hplbsh,

4
+1 Risposta perspicace. A volte sembra che i sostenitori della programmazione delle coppie si dimentichino di noi solitari e introversi. E per coincidenza, molte persone interessate alla programmazione sono anche introverse ...
Andres F.

6
@AndresF .: Oltre ai solitari e agli introversi ci sono anche persone che sono indipendenti e hanno solo bisogno del loro spazio per organizzare i loro pensieri. Per diffondere la conoscenza tra i membri del team, le revisioni del codice sono efficaci almeno quanto la programmazione in coppia.
Giorgio,

2
@Giorgio Concordato. In realtà supporto la programmazione parziale delle coppie: affrontare alcuni problemi difficili in coppia. Ma alcuni sostenitori pensano che dovrebbe essere usato la maggior parte delle volte per la maggior parte delle attività di programmazione, con cui non sono d'accordo.
Andres F.

4
@AndresF .: Sono d'accordo con te. "Programmazione di coppie parziali" o, usando parole meno alla moda, "discutere insieme qualche problema difficile quando necessario" è un approccio molto ragionevole, usato non solo per la programmazione, ma anche quando si impara a scuola, ecc. Tuttavia, non considero questa pratica un proiettile d'argento che dovrebbe essere usato tutto il tempo.
Giorgio,

10

Il mio team ha fatto la programmazione in coppia sin dalla sua nascita, molto prima che io lavorassi lì, come parte di un negozio per lo più "programmazione estrema". La programmazione della coppia è lo stato predefinito ; le persone vanno davvero singleton solo se c'è un numero dispari, o di tanto in tanto per le indagini, specialmente quelle che coinvolgeranno scherzi con attrezzature ostili e tenteranno di farlo funzionare.

"Junior / senior" non è l'unica strada da percorrere. "Intermedio / junior" è utile; aiuta il ragazzo di livello intermedio a sintetizzare le conoscenze ottenute costringendolo a comunicarlo a qualcun altro. Le sfide "intermedie / intermedie" due persone lavorano insieme per condividere le loro conoscenze, comunicare e lavorare come parte di una squadra. E anche se hai due ragazzi davvero senior, è probabile che abbiano diverse aree di competenza e che possano venire con approcci diversi. Gli aspetti della condivisione della conoscenza non finiscono quando qualcuno è vagamente "al passo con i tempi" su un progetto. Piuttosto, la programmazione di coppia è l'epitome di un'organizzazione di apprendimento . Nuove tecniche e buone pratiche si diffondono rapidamente.

La programmazione in coppia aiuta anche a mantenere la qualità del codice (meno difetti) e la sanità mentale del codice (non fa solo quello che intende, ma fa quello che dovrebbe ... idealmente senza andare giù un coniglio di più settimane- buco facendo la cosa sbagliata, o due diverse cose giuste che entreranno in conflitto selvaggiamente). Aiuta i programmatori a mantenere la concentrazione: qui nel cuore della Silicon Valley, sede della settimana lavorativa di 80 ore, possiamo lavorare per sole 40 ore settimanali perché stiamo programmando intensamente per otto ore al giorno, cambiando le cose a vicenda. (Inoltre, se si andasse più a lungo facendo la programmazione in coppia, probabilmente si gira fuori. O almeno si esaurisce.) Questo è ottimo per l'equilibrio tra lavoro e vita privata e aiuta anche la tua organizzazione quando è importante avere un'inversione di tendenza rapida (in particolare un'inversione a bassa latenza).

Non è tutto, completamente, 100% di pesche e panna; Trovo che la programmazione di coppia sia occasionalmente un ostacolo alla mia applicazione di processi cerebrali intuitivi che sono utili su alcuni problemi. Più di recente, in un'attività di perdita di memoria, ho trascorso un po 'di tempo con e senza coppie; senza uno, mi sentivo più libero di scherzare e provare esperimenti senza davvero sapere esattamente come spiegare cosa stavo facendo in ogni momento. Ci sono anche alcuni vantaggi nel lavorare singleton, essere in grado di andare su una tangente e fare alcuni refactoring selvaggi (apprezzati nella metodologia XP) per un capriccio.

Tutto sommato, i benefici superano di gran lunga i costi e l'abbinamento ha funzionato in modo spettacolare per noi: dalla fase di avvio all'acquisizione da parte di una società più grande e alla nostra successiva integrazione. (A proposito, la programmazione di coppia ci ha aiutato a mantenere una continuità culturale attraverso l'espansione e nonostante un piccolo turnover).

(Sviluppiamo un'appliance software in Perl, ~ $ 4.000- $ 40.000 prezzo di listino.)


4

Non ho mai lavorato in un'impostazione "Abbina programmazione" e tuttavia posso affermare di aver fatto parte delle tre circostanze che hai elencato. Lo scenario che menzionate sembra più "programmazione regolare" con le fasi di aiuto / addestramento introdotte. Non abbiamo fatto tutto questo prima che la "programmazione in coppia" fosse nata? Combina la programmazione, suppongo che richiederebbe un approccio più impegnato in cui il processo di condivisione all'interno di una squadra non si ferma nel momento in cui affronti il ​​compito immediato o il problema a portata di mano. Ma allora questo è quello che "penso" non quello che "conosco".

Personalmente per la programmazione in coppia, mi piacerebbe lavorare in un team in cui ho la possibilità di apprendere e condividere le mie conoscenze. Un team sbilanciato in cui tutti quelli con cui lavori è molto più avanti di te, o molto al di sotto della pari può diventare abbastanza poco interessante. Inoltre, avrei paura di lavorare con persone che sono stabilite nelle loro credenze e difficili da convincere.


Hai ragione, potremmo risolvere le circostanze che ho citato senza la programmazione in coppia, ma usiamo le tecniche di programmazione in coppia di una persona che guida l'altra osservandola e spegnendola a intervalli regolari. Questo è un po 'più formale del semplice aiuto / addestramento. Molti negozi XP fanno molto più programmazione di coppie di questa - mi chiedo quale sia stata la quantità "giusta" di accoppiamento per le persone.
Paddyslacker

Sì, anche a me piacerebbe sentire le persone che hanno lavorato con PP per lunghi periodi di tempo. Posso capire come i consulenti che lavorano con più aziende o team possano trarre vantaggio dalla PP, ma questi incarichi durano in genere per un paio di mesi. Sarebbe interessante sapere come funziona la PP in una tipica società di software in cui i progetti durano generalmente più di un anno.
Preimposta il

2

Abbiamo sperimentato la programmazione di Pair nel nostro team negli ultimi mesi. Mi sento abbastanza utile quando stai lavorando a qualcosa di nuovo (nuova tecnologia, nuova funzionalità ecc.) In quanto puoi rimbalzare rapidamente le idee con un'altra persona del team e farle convalidare / invalidare. Inoltre, una revisione paritaria fianco a fianco aiuta a tenere fuori i bug.

Un altro compagno di squadra ha provato a utilizzare la programmazione di coppia con un test per eseguire ATDD ed erano abbastanza soddisfatti dei risultati (secondo i suoi calcoli un aumento del costo di sviluppo del 20% ha portato a una riduzione di circa il 50% nei tempi di test)


1

Buona notte

molte volte abbiamo discusso delle pratiche di Extreme Programming e della programmazione in coppia . Indietro nel tempo, siamo in grado di capire che la programmazione è un'attività solista perché i programmatori avevano bisogno di concentrazione e isolamento. I programmatori in quel momento erano nella zona , uno stato mentale in cui potevano concentrarsi efficacemente sul codice e prendere decisioni piacevoli e creative.

La programmazione delle coppie sembra essere anche rischiosa se si presume che un programmatore si interrompa a vicenda. D'altra parte, è più difficile interrompere due programmatori che lavorano insieme. Sulla programmazione Solo, ad esempio, sarà più facile essere interrotti, quindi è quasi impossibile per un programmatore solo rimanere nella "zona".

La qualità del codice è un'altra quando la linea limite è dietro l'angolo. Le persone avranno sempre fretta, saranno una coppia programmatori o un programmatore solista: non applicheranno alcune buone pratiche e dimenticheranno solo i test unitari.

Attaccherei con la programmazione di coppia. Perché quando si tratta di rischi, quando un programmatore non c'è più, avrai sempre un altro ragazzo a documentare il processo e insegnare a tutti gli altri come funziona.


1

Lavorare su qualcosa di complessità non banale tende ad essere un buon candidato per la programmazione di coppie in modo che più persone capiscano il codice piuttosto che un solo sviluppatore che conosca una parte della base di codice. Un altro caso è quello in cui qualcuno vuole trasferire alcune abilità. Un esempio qui potrebbe essere avere qualcuno che è veramente bravo nei test unitari con qualcuno che non ha familiarità con il concetto e quindi aiuta a prendere l'abitudine iniziale su qualcosa.

Per quanto riguarda dove evitare la programmazione di coppie, grugnire attività di lavoro che siano semplici dove sarebbe meglio dividere il lavoro in due gruppi e lasciare che ogni sviluppatore faccia parte del lavoro separatamente per portare a termine il lavoro. Alcune attività possono richiedere solo un bel po 'di digitazione, ma non sono così grandi che vale la pena passare qualche ora a cercare di trovare un modo migliore per farlo come potrebbe essere fatto se ogni sviluppatore adotta un approccio di forza bruta per pochi ore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.