Pair Programming: il principio del doppio controllo nello sviluppo di software
Lo sviluppo di un nuovo software è una vera impresa. A seconda dell'entità del programma, bisogna tener conto di svariate eventualità, funzioni e criticità. Persino agli sviluppatori esperti può capitare di disorientarsi. Per rendere la programmazione quanto più efficiente possibile garantendo al contempo un codice senza errori, negli ultimi anni e decenni sono stati sviluppati moderni metodi di lavoro: Scrum e Kanban, ad esempio, mirano a migliorare l'intero sistema.
Il pair programming è un po' meno ambizioso: in questo caso gli sviluppatori lavorano sempre in due su un codice. Come funziona questo metodo di lavoro e quali sono i suoi vantaggi?
Che cos'è il pair programming?
Il metodo del pair programming è utilizzato prevalentemente nello sviluppo agile di software e richiesto concretamente nell'extreme programming (XP). Nel pair programming due persone lavorano sempre contemporaneamente allo stesso codice, nella migliore delle ipotesi sedute una accanto all'altra. Una scrive il codice, l'altra lo controlla in tempo reale. Nel frattempo si ha uno scambio continuo: i due sviluppatori discutono le problematiche, trovano possibili soluzioni, sviluppano idee creative.
Di norma ai due collaboratori spettano due ruoli diversi: il programmatore detto pilota scrive il codice. Il cosiddetto navigatore, invece, lo controlla. Una delle regole del pair programming è che i due si scambino regolarmente (e a breve intervalli) i ruoli. Si evita così una differenza gerarchica: i due hanno infatti uguali diritti e possono anche tranquillamente subentrare nel ruolo dell'altro.
Anche il luogo di lavoro va idealmente adeguato ai requisiti del pair programming. Entrambi i collaboratori devono avere a disposizione mouse, tastiera e monitor; gli schermi però devono visualizzare la stessa cosa.
Più insolito è invece il cosiddetto pair programming remoto. In questo caso i due programmatori non sono seduti uno accanto all'altro, ma si trovano in luoghi completamente diversi. Perché il metodo funzioni, servono soluzioni tecniche speciali. Nonostante la distanza, i due colleghi devono poter comunicare direttamente tra di loro, accedere al codice e visualizzare le modifiche in tempo reale.
Pair programming – best practices
Nella pratica, spesso a collaborare sono due sviluppatori con un livello di esperienza diverso: in questo modo, un programmatore molto esperto può trasferire direttamente il know-how al collega più giovane. Quest'ultimo, a sua volta, può avere idee più fresche da mettere a disposizione del progetto.
Anche la collaborazione tra due colleghi provenienti da campi diversi può dare buoni frutti: se ad esempio un programmatore classico collabora con un designer, i due possono offrirsi supporto reciproco con la rispettiva competenza.
Il pair programming ha senso soprattutto nei progetti più grandi. Infatti, con grandi quantità di codice da modificare regolarmente, il principio del doppio controllo risulta particolarmente efficace. Si ha così la sicurezza che nel codice sorgente si trovi sempre la versione migliore possibile di un segmento: di conseguenza, scende la necessità di interventi correttivi successivi e cala il numero degli errori. Il controllo successivo di un codice sorgente molto lungo richiede molto tempo e impegno, per cui è più vantaggioso evitare il più possibile gli errori a monte.
In più, anche all'interno di un progetto, non è necessario che collaborino sempre gli stessi colleghi. Anzi, è un vantaggio riassortire regolarmente le coppie. Così ogni componente del team avrà una buona conoscenza dell'intero codice sorgente. Inoltre, in questo modo il successo di un progetto non dipenderà solo ed esclusivamente da singole persone. In caso di assenza di una persona, poi, non ci saranno ripercussioni sull'intero progetto, visto che tutti gli altri possono prendere il posto del collega assente.
Vantaggi e svantaggi del pair programming
Che si tratti di programmazione o di un altro progetto, lavorare in due assicura numerosi vantaggi. Due teste sono meglio di una: il rischio di errori si riduce al minimo con il pair programming. Mentre una persona scrive, l'altra tiene sempre sotto controllo il codice e si concentra nell'individuare eventuali errori. Spesso è difficile trovare i propri errori. Un collega, invece, scova molto più velocemente le incongruenze.
Anche la creatività derivante dalla comunicazione è un grande vantaggio: lo scambio continuo tra i due programmatori dà vita a idee che non sarebbero nate lavorando da soli. Lo scambio comunicativo tra i due collaboratori consente anche di trovare soluzioni migliori ai problemi, più rapidamente. Perché se una persona da sola si accontenta della prima opzione trovata, nel pair programming la sua decisione deve essere sempre giustificata davanti al collega, che potrebbe avere una visione diversa del problema e non essere quindi d'accordo con la soluzione proposta. Dalla discussione che ne deriva spesso nascono idee che portano a un codice decisamente migliore.
Un buon codice è alla fin fine un codice agile: l'esperienza dimostra che il codice sorgente che risulta dal pair programming è spesso più breve e quindi più efficace. Un vantaggio che si traduce nell'utilizzo di meno risorse per la manutenzione e il rimaneggiamento.
Come detto, questa tecnica può essere utilizzata anche per permettere ai lavoratori esperti di trasmettere le proprie conoscenze ai più giovani. Così si approfitta non solo del vantaggio effettivo del pair programming, vale a dire la creazione di codici di alta qualità, ma il metodo può assolvere anche a scopi di formazione.
Si tratta però di un processo che richiede molto tempo: è vero che due programmatori lavorano più velocemente insieme che non da soli, ma è anche vero che non lavorano velocemente quanto due programmatori che lavorano ognuno per conto proprio. Ciò significa che con questo metodo i progetti procedono più lentamente oppure che bisogna impiegare più personale, con un conseguente aumento dei costi. I sostenitori del pair programming partono dal presupposto che il maggiore lavoro richiesto all'inizio sarà ripagato in seguito: perché il codice risultante contiene meno errori e nel complesso è strutturato meglio, pertanto gli interventi di manutenzione saranno molto meno.
Un altro possibile svantaggio è che il pair programming è sì indicato per il team building, ma solo quando i due colleghi possono lavorare bene insieme. I due programmatori devono lavorare a strettissimo contatto, tanto che i problemi personali tra i due possono rallentare l'avanzamento del progetto o dare luogo a una vera e propria escalation. Pertanto in questo metodo i collaboratori non vanno abbinati a caso. L'ideale è poter collaborare ogni volta con un collega diverso, ma può funzionare solo quando c'è una grande armonia in tutto il team.
Il pair programming può facilitare lo sviluppo di software, ma affinché questo metodo risulti vantaggioso, ci vogliono le risorse e la volontà di collaborare in modo costruttivo.