<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sviluppo Agile &#187; Le pratiche XP</title>
	<atom:link href="http://www.sviluppoagile.it/category/base/pratiche-extreme-programming/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sviluppoagile.it</link>
	<description>Accogliere il cambiamento</description>
	<lastBuildDate>Tue, 03 Aug 2010 05:00:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Solidi ma agili con il pair programming</title>
		<link>http://www.sviluppoagile.it/solidi-agili-con-pair-programming</link>
		<comments>http://www.sviluppoagile.it/solidi-agili-con-pair-programming#comments</comments>
		<pubDate>Fri, 25 Apr 2008 01:00:00 +0000</pubDate>
		<dc:creator>Jacopo Romei</dc:creator>
				<category><![CDATA[Base]]></category>
		<category><![CDATA[Le pratiche XP]]></category>
		<category><![CDATA[coppia]]></category>
		<category><![CDATA[pair]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.sviluppoagile.it/?p=3</guid>
		<description><![CDATA[Il pair programming è la pratica diffusa in diverse metodologie di sviluppo agile che richiede a due programmatori di lavorare seduti uno accanto all'altro su una stessa macchina. Uno fa quello che l'altro non sta facendo. Uno scrive un test? L'altro pensa a come soddisfarlo. Uno scrive codice di una classe? L'altro cerca informazioni strategiche sul web. Sembra un spreco, ma non lo è. Il pair programming aiuta e, perché no, rende tutti più sereni, anche i manager! Vediamo come.]]></description>
			<content:encoded><![CDATA[<p>Il <strong>pair programming</strong> è la pratica diffusa in diverse metodologie di sviluppo agile che richiede a due programmatori di lavorare seduti uno accanto all&#8217;altro su una stessa macchina. Uno fa quello che l&#8217;altro non sta facendo. Uno scrive un test? L&#8217;altro pensa a come soddisfarlo. Uno scrive codice di una classe? L&#8217;altro cerca informazioni strategiche sul web. Sembra un spreco, ma non lo è. Il pair programming aiuta e, perché no, rende tutti più sereni, anche i <strong>manager</strong>! Vediamo come.<span id="more-3"></span></p>
<p>Nel mondo agile tipicamente la persona che scrive è chiamata <em>driver</em> mentre l&#8217;altra <em>navigator</em>. A me piace chiamarli rispettivamente <em>tattico</em> e <em>strategico</em>. Trovo che questi termini descrivano meglio il senso del ruolo proprio di ogni elemento della coppia: la <a title="Strategia" href="http://it.wikipedia.org/wiki/Strategia" target="_blank">strategia</a> è il coordinamento di certe azioni mirando ad un obiettivo più o meno lontano, <a title="Tattica" href="http://it.wikipedia.org/wiki/Tattica" target="_blank">tattica</a> è l&#8217;insieme di mezzi concreti utilizzato per raggiungere il singolo obiettivo intermedio. Quindi: il programmatore tattico scrive il codice, decide come renderlo elegante, leggibile, efficiente e decide, inoltre, come impiegare gli idiomi tipici del linguaggio per risolvere problemi <em>tattici</em> già incontrati; il programmatore strategico invece assiste questo processo pensando un passo più avanti, a come la classe che si sta scrivendo insieme si dovrà  interfacciare alle altre preesistemti e alle altre da scrivere ancora, a quali classi si dovranno ancora scrivere, a quali test automatici saranno utili e, fondamentale, a quali <em>design pattern</em> sarà  bene impiegare per risolvere problemi <em>strategici</em> già  incontrati.</p>
<p>La critica che più frequentemente proviene da chi non ha mai provato questa tecnica davvero appieno &#8211; perché chi invece l&#8217;ha attuata con sincera dedizione non la critica mai! &#8211; è quella dettata dalla pura intuitività: due persone, lavorando contemporaneamente allo stesso compito, non risolvono la metà  dei problemi nello stesso tempo? No, vediamo perché.</p>
<p>Se mi permettete di vedere per un momento la coppia di programmatori come un unico <em>essere programmante</em>, il punto fondamentale del pair programming può essere espresso non tanto nel tentativo di raddoppiare i picchi di intelligenza del programmatore che lavora da solo, quanto nel dimezzarne i picchi di idiozia. Con tutto il dovuto rispetto per tutti i programmatori nel mondo, a chi non è mai capitato di incappare in vicoli ciechi per ore, impegnati in tecnicismi di sterile produttività, in perversi <em>gold-plating</em> alla ricerca del Graal della perfezione del codice che non avrebbero mai più avuto riconoscimento in termini sia di gloria sia di denaro? Oppure più semplicemente a chi non è mai capitato di non vedere una soluzione a portata di mano per semplice distrazione o stanchezza? Programmare in coppia riduce il rischio che queste situazioni si ripropongano se non estremamente di rado.</p>
<p>Questa solidità si ripercuote in un miglioramento della qualità  del codice scritto, sia a livello locale sia a livello globale, di architettura. Tale miglioramento a sua volta abbassa il tempo speso nel debugging, recuperando molto &#8211; se non la totalità  &#8211; del tempo perso per l&#8217;assegnamento di due persone allo stesso task. La pratica del test-driven programming &#8211; di cui parleremo &#8211; entra in forte <em>risonanza</em> con la pratica del pair programming portando i team XP molto vicini all&#8217;ideale <strong>abolizione del debugging</strong>.</p>
<p>Abolire il debugging significa produrre di più. Non dimentichiamolo mai: fare debugging non è <strong>mai </strong>produttivo. Il debugging è sempre solo un costo.</p>
<p>Poco sopra ho scritto che il tempo recuperato con l&#8217;incremento di qualità  della scrittura del codice non è detto che compensi completamente il rallentamento dovuto alla duplicazione dell&#8217;assegnazione sviluppatori-task. Alla resa dei conti ci interessa solo sapere se una pratica ci permetta di risparmiare tempo in <em>assoluto</em> e in <em>pratica</em> e non solo in teoria o in presenza di fortunate condizioni coincidenti. Perché allora insistiamo nell&#8217;adottare una tecnica che forse, pur se poco, qualcosa ci fa perdere in termini di tempo? La risposta è semplice: per ottenere predittibilità .</p>
<p>La verità è che un processo industriale sano ottiene pochi vantaggi dalla possibilità  di essere rapidissimo se non può integrarsi con stime <em>attendibili</em> &#8211; seppur non necessariamente <em>esatte</em>. Il debugging è un&#8217;attività che, oltre a non essere produttiva, è completamente imprevedibile. Pertanto, ammesso e non concesso che il pair programming comporti un effettivo rallentamento dello sviluppo, possiamo tranquillamente stabilire che il costo di un rallentamento sufficientemente piccolo può essere accettato se in cambio si ottiene la possibilità  di ridurre l&#8217;impatto del debugging nella pianificazione e quindi di fare dei piani di precisione maggiore.</p>
<p>Concludendo, il <strong>pair programming</strong> è una pratica che offre un intero ventaglio di vantaggi nell&#8217;attuazione di una <strong>metodologia agile</strong> per lo sviluppo software. Tra questi abbiamo visto che troviamo anche la possibilità  di migliorare il planning dei nostri progetti con buona pace di <strong>manager, sviluppatori e clienti</strong>.</p>
<p>A presto con il prossimo articolo! Ciao!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sviluppoagile.it/solidi-agili-con-pair-programming/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.722 seconds -->
