<?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>Gabriele Lana &#187; lean</title>
	<atom:link href="http://www.gabrielelana.it/archives/category/lean/feed" rel="self" type="application/rss+xml" />
	<link>http://www.gabrielelana.it</link>
	<description>on Agile Methodologies and Programming</description>
	<lastBuildDate>Fri, 07 May 2010 14:12:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Reframing In The Agile World</title>
		<link>http://www.gabrielelana.it/archives/64</link>
		<comments>http://www.gabrielelana.it/archives/64#comments</comments>
		<pubDate>Mon, 17 Sep 2007 22:57:51 +0000</pubDate>
		<dc:creator>Gabriele Lana</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[extreme]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.gabrielelana.it/archives/64</guid>
		<description><![CDATA[Ho appena finito di leggere un articolo del venerabile Paul Graham, autore di libri quali &#8220;Hackers and Painters&#8221; e &#8220;On Lisp&#8221; (libro da me molto ambito, ma alquanto difficile da avere)
L&#8217;articolo indica alcune pratiche che possono essere utilizzate dai programmatori per &#8220;mantenere un programma nella propria testa&#8221;, inizialmente sia l&#8217;obiettivo dell&#8217;articolo che alcune delle pratiche [...]]]></description>
			<content:encoded><![CDATA[<p>Ho appena finito di leggere un <a href="http://www.paulgraham.com/head.html">articolo</a> del venerabile <a href="http://www.paulgraham.com/">Paul Graham</a>, autore di libri quali <a href="http://www.amazon.com/o/ASIN/0596006624">&#8220;Hackers and Painters&#8221;</a> e <a href="http://www.amazon.com/o/ASIN/0130305529">&#8220;On Lisp&#8221;</a> (libro da me molto ambito, ma alquanto difficile da avere)</p>
<p>L&#8217;articolo indica alcune pratiche che possono essere utilizzate dai programmatori per &#8220;mantenere un programma nella propria testa&#8221;, inizialmente sia l&#8217;obiettivo dell&#8217;articolo che alcune delle pratiche proposte mi hanno un po&#8217; disorientato in quanto in apparente netto contrasto con quanto dettato dalle metodologie Agili: <em>&#8220;Se Paul Graham è un mito, e ha ragione, allora hanno torto le metodologie Agili?&#8221;</em> No, hanno ragione entrambi, i principi che stanno alla base sono gli stessi, come al solito tutto torna :-)</p>
<p><span id="more-64"></span>Prendiamo per esempio una delle pratiche più forti fra quelle proposte: <strong>&#8220;Keep rewriting your program&#8221;</strong>; come dargli torto? Capita spesso che durante la scrittura di un programma un programmatore arrivi ad un momento in cui la sua conoscenza attuale del problema e della relativa soluzione non sia più rispecchiata dal codice, riscrivendolo potremmo inserire nel codice tale conoscenza e quindi otterremmo del codice migliore. D&#8217;altra parte molti conosceranno la <a href="http://en.wikipedia.org/wiki/Second-system_effect">&#8220;Sindrome del secondo sistema&#8221;</a> e sapranno quindi che la maggior parte delle riscritture dei progetti software risulta fallimentare. <em>&#8220;Come è possibile che entrambe queste evidenze empiriche siano vere? Come risolvono la questione le metodologie Agili?&#8221;</em></p>
<p>Cos&#8217;è il <strong>refactoring</strong> se non un&#8217;attività di continua riscrittura del codice? Kent Beck spiega perchè eXtreme Programming è eXtreme: tutte quelle pratiche che hanno dimostrato nel tempo di essere valide sono state portate all&#8217;estremo. La revisione del codice funziona? Bene, revisioniamo il codice sempre! = Pair Programming. La riscrittura di programmi porta a dei programmi con un design migliore? Bene, riscriviamo i nostri programmi continuamente! = Refactoring</p>
<p>Attraverso la pratica del refactoring possiamo trasformare (riscrivere) continuamente il nostro codice affichè rispecchi nella maniera migliore possibile la conoscenza che attualmente abbiamo del dominio del problema e della sua soluzione. Continuamente! Il trucco è sempre quello: se un&#8217;attività è rischiosa, difficile, costosa, ma potenzialmente di grande valore, quello che dobbiamo fare non è evitarla o prevenirla, ma trovare un modo per renderla meno rischiosa, meno difficile e meno costosa, mantenendone il valore inalterato (pensate per esempio alla Continuous Integration)</p>
<p>Al solito ci sono pratiche a corollario che portano il codice ad essere rappresentazione della nostra conoscenza:</p>
<ul>
<li>Unit Tests: come specifica eseguibile del comportamento dei componenti del nostro software</li>
<li>Acceptance Tests: come specifica eseguibile delle funzionalità esibite dal nostro software</li>
<li>Shared Code: fare in modo che il nostro codice sia leggibile a tutti i componenti del team (lo considero un super set di <strong>&#8220;Write rereadable code&#8221;</strong> dell&#8217;articolo di Graham)</li>
<li>Domain Driven Design: sviluppare un linguaggio di dominio (Ubiquitous Language) all&#8217;interno del codice. Questa pratica potrebbe essere portata all&#8217;estremo scrivendo un&#8217;interprete per un <span alt="Domain Specific Language">DSL</span> (Graham come Lisper a questo proposito ne sa qualcosa)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielelana.it/archives/64/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
