it-swarm.it

Quando funziona la programmazione in coppia? Quando evitarlo?

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é?

55
Paddyslacker

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

  • Le coppie lavorano su specifiche, design e complesso attività di programmazione - gli esperimenti indicano che non viene mostrato alcun miglioramento della qualità quando si lavora su semplici compiti in 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 sullo 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 XP spende in media circa il 60% della nostra programmazione di coppie di tempi di sviluppo. Il resto del tempo è dedicato allo sviluppo individuale. Non è raro esegui l'accoppiamento per creare un progetto iniziale, lavora da solo sul progetto per alcune ore, quindi torna insieme per completare 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. Qualsiasi cosa 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.

47
Michael

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

dove coppia programmazione 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 caverna 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ù di 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 hanno visto quello che ho visto, se mi mancava qualcosa, niente - 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 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. Si è presunto che la programmazione in coppia funzioni 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 ...

34
Will Sargent

Il mio team ha fatto la programmazione di 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 occasionalmente 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 proprie conoscenze, comunicare e lavorare come parte di un team. 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 della coppia aiuta anche a mantenere la qualità del codice (meno difetti) e la sanità mentale del codice (non solo fa ciò che intende, ma fa quello che dovrebbe ... idealmente senza andare in una tana di coniglio di più settimane 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 a programmare la coppia, probabilmente si gira fuori. O almeno si esaurisce.) Questo è ottimo per l'equilibrio tra lavoro e vita privata e aiuta anche l'organizzazione quando è importante avere un'inversione di tendenza rapida (in particolare un'inversione di tendenza 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 compito 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 sapere esattamente come spiegare cosa stavo facendo in un momento. Ci sono anche alcuni vantaggi nel lavorare singleton, essere in grado di andare su una tangente e fare alcuni refactoring selvaggi (valutati 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.)

10
user2348

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 citi 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 avrò 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.

4
Preets

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 far 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)

2
Amit Wadhwa

Buona notte

molte volte abbiamo discusso delle pratiche di Extreme Programming e del coppia di programmazione. 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 a quel tempo erano nello zona, uno stato mentale in cui potevano concentrarsi in modo efficiente sul codice e prendere decisioni piacevoli e creative.

La programmazione delle coppie sembra essere anche rischiosa se si presume che un programmatore si interrompa l'un l'altro. 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 di fondo è 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
Junior M

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 la stessa 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 ciascuno 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.

1
JB King