La programmazione paia è utilizzata anche per formare sviluppatori meno esperti e portarli alla velocità? [duplicare]

9

Ho familiarità con Programmazione Agile e Paia ( link ). Ho pensato che fosse stata utilizzata la programmazione in coppia se esisteva un requisito complesso, vale a dire che due set di occhi sono migliori di uno.

La Programmazione coppie è utilizzata anche per formare sviluppatori meno esperti e portarli alla velocità?

Inoltre, quanto spesso viene utilizzato per es. tutto il tempo i due sviluppatori lavoreranno insieme su uno schermo in modo permanente o forse un giorno a settimana? Ho letto un libro Agile, che parla di questo concetto ma non menziona la frequenza di utilizzo.

    
posta w0051977 09.09.2013 - 00:09
fonte

6 risposte

14

La programmazione delle coppie dovrebbe non essere utilizzata per formare sviluppatori inesperti o meno esperti.

Studi e meta-studi che supportano la programmazione di coppie a livello generale, concettuale, trovano quasi invariabilmente che i guadagni in termini di qualità e produttività superano solo il costo aggiuntivo quando entrambi i programmatori si trovano a circa lo stesso livello di competenza.

In realtà, questo è praticamente diventato una "regola" nelle impostazioni accademiche. Le università che raccomandano la pratica anche dichiarano esplicitamente che gli studenti dovrebbero trovare un partner con lo stesso livello di competenza . Non meglio, non peggio - lo stesso.

Nota che il "livello di abilità" qui è specifico per dominio e attività. Accoppiare un brillante sviluppatore dell'interfaccia utente con un brillante progettista di algoritmi o uno sviluppatore di database non è meglio che accoppiare un brillante sviluppatore dell'interfaccia utente con uno sviluppatore dell'interfaccia utente totalmente verde.

Gli studi (corroborati dalla mia esperienza personale) mostrano che gli sviluppatori inesperti (in alcune aree) imparano più velocemente quando accoppiati, e gli sviluppatori altamente qualificati possono cogliere molto malintesi e problemi di progettazione molto prima, annullando gran parte del tempo speso per il debugging e rielaborare.

Tuttavia, c'è un gradiente di quasi 10 volte la produttività per gli sviluppatori meno esperti rispetto a quelli più esperti. Accoppiare qualcuno altamente qualificato con qualcuno molto verde è molto simile ad un istruttore di guida con uno studente. Non hai una vera cooperazione, hai un autista e un passeggero, un maestro e un apprendista. Se l'apprendista "guida", il master è troppo impegnato a monitorare e correggere gli errori per ottenere il lavoro da lui svolto. D'altra parte, se il maestro "guida" e all'apprendista viene detto di guardare e imparare, il maestro è meno produttivo a causa delle interruzioni e l'apprendista non apprende molto efficacemente.

Questa è una situazione senza vincita. Se i nuovi sviluppatori devono essere addestrati, chiama un picche di picche e fai un treno . Oppure apprendili, fai in modo che "ombreggia" uno sviluppatore più esperto per un po '. Ma non chiamatelo "pair programming" e aspettatevi di ottenere buoni risultati. Questi si verificano solo quando entrambi i partner hanno set di abilità simili.

Nota: per coloro che non possono visualizzare lo studio, ecco un altro che fa affermazioni simili:

Valutazione della programmazione delle coppie in relazione alla complessità del sistema e alla competenza dei programmatori .

Per citare l'abstract:

The observed benefits of pair programming in terms of correctness on the complex system apply mainly to juniors, whereas the reductions in duration to perform the tasks correctly on the simple system apply mainly to intermediates and seniors.

L'associazione di un senior con un junior nega il vantaggio temporale applicabile agli anziani. C'è ancora un miglioramento nella correttezza rispetto a quello che normalmente i giovani dovrebbero produrre, ma non è dimostrato che sia migliore di quello che l'anziano produrrebbe da solo.

Tieni presente che questo è solo un singolo studio, mentre il primo studio è una meta analisi che comprende diversi studi diversi. È di gran lunga la migliore risorsa che ho trovato. Chiunque sia veramente interessato a conoscere la ricerca effettiva dovrebbe prendere in considerazione l'acquisizione di un abbonamento ACM, perché è lì che vengono pubblicati tutti questi studi.

    
risposta data 09.09.2013 - 03:00
fonte
8

Assolutamente in disaccordo con questa risposta .

In precedenza ho istruito gli sviluppatori junior e i nuovi joiners attraverso la programmazione pair. In una recensione, l'hanno trovato molto utile e stavano accelerando molto più velocemente rispetto a chi era rimasto da solo.

Durante la guida, mi hanno visto utilizzare una serie di scorciatoie all'interno di IDE che migliora significativamente la mia produttività. Quando guidavano li incoraggiai a usare le stesse scorciatoie - in pochi giorni erano già più produttivi.

Il test delle unità era un'altra area. Molti sviluppatori junior non avevano alcuna esposizione ai test unitari. Sono stato in grado di dimostrare loro come si scrive test, quali sono le nostre convenzioni di denominazione e che aspetto ha un buon test unitario. Quando stavo 'navigando' ero in grado di consigliare 'autista' mentre scrivevano test.

    
risposta data 16.09.2013 - 09:35
fonte
5

Non sono d'accordo con questa risposta .

Ho trovato che la programmazione di coppie, sia dello stesso livello o diversa per essere molto utile per molte ragioni.

L'ho sicuramente visto usato per addestrare programmatori meno esperti (per rispondere direttamente alla domanda).

Penso che funzioni perché:

  • trasmettere la conoscenza del programma e ciò che le varie parti significano e fanno è spesso fatto meglio attraverso il periodo di programmazione della coppia.

  • ci sono quasi sempre differenze nei livelli di abilità e di esperienza tra i programmatori a causa dell'esperienza, dello sfondo, ecc. Quindi "approssimativamente allo stesso livello" raramente si applica nella mia esperienza.

  • i buoni programmatori sanno sia imparare dagli altri e anche insegnare e trasmettere le proprie conoscenze attraverso l'accoppiamento.

  • un buon abbinamento spesso si traduce in ENTRAMBI le persone che passano il pareggio alla tastiera. La mia persona preferita con cui ho fatto coppia e che ho usato li chiamavo 'ach, I'm stuck (person 1)' in coppia con 'qui, dammi la tastiera fammi provare, ho un'idea (o l'energia per continuare !) '.

  • anche i migliori programmatori hanno bisogno di imparare il dominio su cui stanno lavorando e come sono rappresentati da codice e dati e la programmazione delle coppie è spesso un ottimo modo per farlo.

risposta data 16.09.2013 - 14:22
fonte
2

Uso PP nel mio lavoro in modo simile - con i nuovi arrivati (non necessariamente pragrammers inesperti) . Di solito questo è un periodo di una settimana. Dopo questo, solitamente vengono soddisfatti tutti gli obiettivi elencati di seguito.

Obiettivi:

  1. Il periodo di familiarizzazione di un nuovo arrivato con il codice base sarà notevolmente ridotto . Quando hai bisogno di un uomo per essere coinvolto nel tuo progetto e ottenere un risultato in due settimane, questo funziona perfettamente.
  2. Sei come gestore capirà come pensa un uomo . Questo ti aiuterà a trovare un approccio per lavorare con lui.
  3. I nuovi arrivati introdurranno una cultura di codifica del progetto.
  4. Un ragazzo inesperto vedrà come un esperto lavora durante la codifica. Questo aiuterà a capire dove migliorare.
  5. Un ragazzo esperto ti insegnerà un paio di suggerimenti utili.
risposta data 10.09.2013 - 22:16
fonte
1

La programmazione accoppiata è un'abilità in sé e i vantaggi della programmazione della coppia possono essere abbastanza diffusi e vari, a seconda di quando e come sono stati utilizzati.

L'ho usato quando gestivo un team di programmatori abbastanza inesperti come strumento di orientamento quando nuovi programmatori si uniscono al team. (Parliamo di ciò che sto facendo nel primo compito, mentre lo sto facendo, e poi parliamo di ciò che stanno facendo nel secondo compito quando lo fanno, e nel terzo compito parliamo della loro prevista implementazione e la revisione del loro codice. Obiettivo: orientare il codice e impostare le aspettative per il loro lavoro.

L'ho usato anche come tecnica di allenamento, in cui qualcuno viene introdotto a una nuova tecnica. In questo caso, sarebbero stati introdotti al concetto lontano dalla tastiera e dopo alcune ore o un paio di giorni dopo, avremmo accoppiato il programma alla fase di progettazione, e sarebbero stati il programmatore principale a fare l'implementazione, con me che fornivo una guida dove necessario - obiettivo: introdurre codice multi-threaded / richiami asincroni e produrre qualcosa di produttivo in un breve periodo di tempo.

    
risposta data 09.09.2013 - 16:07
fonte
1

Come per la maggior parte delle cose Agile, sento che la risposta è "dipende".

La persona meno esperta sta tentando di imparare una nuova lingua (o altre competenze di base) o ha già le competenze richieste e ha solo bisogno di imparare una nuova applicazione? Se stanno cercando di imparare una nuova lingua o abilità, direi che la mentorship potrebbe essere più appropriata. Se stai imbarcando qualcuno di nuovo nella squadra che ha le competenze, allora il modo in cui accoppiato sarebbe il modo in cui vado.

Sono d'accordo con il punto relativo alla non associazione di un master con un nuovo sviluppatore verde, tuttavia non sono d'accordo sul fatto che dovrebbero avere lo stesso livello di abilità. Penso che la chiave stia accoppiando persone che sono vicine allo stesso livello di abilità.

Per quanto riguarda la frequenza di utilizzo, penso che i membri del tuo team dovrebbero essere in grado di aiutarti con quello. Forse c'è una storia che è particolarmente complicata che gli sviluppatori vorranno accoppiare, altre volte potrebbe esserci una storia che è piuttosto semplice che qualcuno vuole fare da solo per avere il tempo di decomprimere.

Un ultimo pensiero, quando si accoppia, cerca di avere la persona meno esperta sulla tastiera. Se la persona più esperta guida, allora c'è una tendenza per quella persona a scrivere un bel po 'di codice, con la spiegazione di "Spiegherò che in un minuto, tieni duro". Se la persona meno esperta guida, la conversazione su cosa fare / come spostare il codice in avanti, tende a verificarsi in modo più tempestivo.

Cheers!

    
risposta data 10.09.2013 - 00:19
fonte

Leggi altre domande sui tag