<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>JP's Web Place</title>
	
	<link>http://rejex.wordpress.com</link>
	<description>"Simplicity is prerequisite for reliability." (E. W. Dijkstra)</description>
	<lastBuildDate>Sat, 26 May 2012 07:21:34 +0000</lastBuildDate>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain="rejex.wordpress.com" port="80" path="/?rsscloud=notify" registerProcedure="" protocol="http-post" />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>JP's Web Place</title>
		<link>http://rejex.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://rejex.wordpress.com/osd.xml" title="JP's Web Place" />
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/JPsWebPlace" /><feedburner:info uri="jpswebplace" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://rejex.wordpress.com/?pushpress=hub" /><feedburner:emailServiceId>JPsWebPlace</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Presentazione “Linux Embedded: un’esperienza da dev” – 30/05/2012 @BGlug</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/ep12wtrHChg/</link>
		<comments>http://rejex.wordpress.com/2012/05/19/presentazione-linux-embedded-unesperienza-da-dev-30052012-bglug/#comments</comments>
		<pubDate>Sat, 19 May 2012 18:57:08 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[presentazione]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[BGlug]]></category>
		<category><![CDATA[Linux Embedded]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=12476</guid>
		<description><![CDATA[È davvero un bel po&#8217; che non tocco questo blog, ma non sono sparito. Anzi, ricomparirò in persona al Bergamo Linux User Group (BGlug) fra un paio di settimane per una presentazione sul mondo dell&#8217;embedded, visto con gli occhi di uno sviluppatore Linux. Ovviamente siete invitati tutti: accorrete numerosi, vi aspetto! Linux Embedded: un&#8217;esperienza da [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12476&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>È davvero un bel po&#8217; che non tocco questo blog, ma non sono sparito. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Anzi, ricomparirò in persona al <a href="http://bglug.it/"><em>Bergamo Linux User Group</em></a> (<em>BGlug</em>) fra un paio di settimane per una presentazione sul mondo dell&#8217;<em>embedded</em>, visto con gli occhi di uno sviluppatore Linux.</p>
<p>Ovviamente siete invitati tutti: accorrete numerosi, vi aspetto! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<blockquote><p><strong><font size="+1"><em>Linux Embedded: un&#8217;esperienza da dev</em></font></strong></p>
<p><a href="http://bglug.it/2012/05/19/linux-embedded/" title="BGlug - annuncio ufficiale"><img src="http://rejex.files.wordpress.com/2012/05/linux-embedded-bglug-presentazione.png?w=300" width="300" alt="Linux Embedded - Presentazione - BGlug - 30/05/2012" /></a></p>
<p><strong>Chi</strong>: incontro aperto a tutti<br />
<strong>Luogo</strong>: sede del <a href="http://bglug.it">BGlug</a> (<a href="http://bglug.it/2012/05/19/linux-embedded/">annuncio</a> e <a href="http://maps.google.com/maps?f=q&amp;hl=it&amp;q=largo+rontgen,+bergamo,+italy&amp;ie=UTF8&amp;om=1&amp;ll=45.691043,9.643679&amp;spn=0.01292,0.04343&amp;z=15">mappa</a>)<br />
<strong>Quando</strong>: mercoledì 30/05/2012, 21:30+<br />
<strong>Quanto</strong>: prevista un&#8217;ora circa, più eventuale fase Q&amp;A</p></blockquote>
<br />Filed under: <a href='http://rejex.wordpress.com/category/linux/'>Linux</a>, <a href='http://rejex.wordpress.com/category/presentazione/'>presentazione</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/bglug/'>BGlug</a>, <a href='http://rejex.wordpress.com/tag/linux/'>Linux</a>, <a href='http://rejex.wordpress.com/tag/linux-embedded/'>Linux Embedded</a>, <a href='http://rejex.wordpress.com/tag/presentazione/'>presentazione</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/12476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/12476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/12476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/12476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/12476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/12476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/12476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/12476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/12476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/12476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/12476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/12476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/12476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/12476/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12476&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/05/19/presentazione-linux-embedded-unesperienza-da-dev-30052012-bglug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2012/05/linux-embedded-bglug-presentazione.png" medium="image">
			<media:title type="html">Linux Embedded - Presentazione - BGlug - 30/05/2012</media:title>
		</media:content>
	<feedburner:origLink>http://rejex.wordpress.com/2012/05/19/presentazione-linux-embedded-unesperienza-da-dev-30052012-bglug/</feedburner:origLink></item>
		<item>
		<title>“Il lavoro va rubato!”</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/2rxfzUkuQOk/</link>
		<comments>http://rejex.wordpress.com/2012/04/02/il-lavoro-va-rubato/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 06:25:40 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=12305</guid>
		<description><![CDATA[La prima regola che mi è stata impartita sul mondo del lavoro dai miei genitori, ben prima di affacciarmi in esso, è stata: &#8220;Il lavoro va rubato!&#8221; È un&#8217;affermazione forte, tramandata da chissà quante generazioni nella mia famiglia ed il succo è tutt&#8217;altro che immorale ed illegale: il lavoro sarà anche un diritto, ma va [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12305&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>La prima regola che mi è stata impartita sul mondo del lavoro dai miei genitori, ben prima di affacciarmi in esso, è stata:<br />
<blockquote><em>&#8220;Il lavoro va rubato!&#8221;</em></p></blockquote>
<p>È un&#8217;affermazione forte, tramandata da chissà quante generazioni nella mia famiglia ed il succo è tutt&#8217;altro che immorale ed illegale: il lavoro sarà anche un diritto, ma va conquistato e mantenuto, perchè irrimediabilmente ce n&#8217;è e ce ne sarà sempre poco rispetto alle nostre aspettative.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>In realtà, credo, il &#8220;diritto al lavoro&#8221; si concretizza nella possibilità di lavorare, non nella singola istanza/lavoro in sè.</em></td>
</tr>
</table>
<p></p>
<p>Considerando che questo modo di ragionare mi è stato inculcato verso la fine degli anni &#8217;80 e gli inizi dei &#8217;90, un periodo relativamente florido e spensierato, direi che ha avuto pure un che di profetico, visti i tempi.</p>
<p><span id="more-12305"></span></p>
<p><font size='+1' color='#005197'>Cosa significa davvero?</font></p>
<p>Sbagliare ci sta: ogni giorno facciamo scelte sulla base di molti fattori e, non essendo indovini, è normale scommettere sul cavallo perdente, anche quando ci viene spacciato per un campione.</p>
<p>Quello che invece non è tollerabile, a mio modo di vedere, è chi non solo non scommette per principio su di sè, ma passa il suo tempo ad invidiare e magari offendere il prossimo perchè ha ottenuto il benchè minimo successo, qualunque cosa identifichi questo termine. Non parliamo poi se qualcuno fallisce: si sprecano i </p>
<blockquote><p><em>&#8220;Te l&#8217;avevo detto!&#8221;</em></p></blockquote>
<p>Viceversa, ammiro profondamente chi non si accontenta quando sa di poter migliorare, di poter costruire qualcosa.</p>
<p>&#8220;<em>Rubare il lavoro</em>&#8221; non è semplicemente sottrarlo a qualcun altro, quanto <strong>rendersi importanti, indispensabili</strong> nel proprio piccolo, nonostante il <em>mantra</em> che recita che:</p>
<blockquote><p><em>&#8220;Tutti sono utili, nessuno è indispensabile.&#8221;</em></p></blockquote>
<p>Ci sono molti modi per arrivare a questa condizione, ma il primo è quello più banale e faticoso: impegno. Nessuno, salvo problemi economici irrisolvibili, si priverà mai volontariamente di un collaboratore serio e competente. Perchè i collaboratori seri e competenti non sono un peso ma un guadagno deambulante. E ce ne sono sempre troppo pochi in circolazione.</p>
<p>Aggiungo anche che la competenza talvolta basta a perdonare pecche vistose. Ho perso il conto delle volte che ho sentito frasi come:</p>
<blockquote><p><em>&#8220;È un rompiscatole e non è facile stargli vicino, però il suo lavoro lo fa veramente bene e quindi&#8230;&#8221;</em></p></blockquote>
<p>Detto questo, ci sono però due punti che mi preme sottolineare.</p>
<p><font size='+1' color='#005197'>Il buonismo non è una virtù</font></p>
<p>Mi attirerò le ire di molti, ma buonismo e lavoro non vanno d&#8217;accordo. La frase secondo cui il lavoro è un diritto è corretta finchè non la si usa come scusa per pretendere qualcosa da qualcuno, sia esso lo Stato o l&#8217;imprenditore del caso.</p>
<p>Per quanto generalmente solidarizzi con chiunque si trovi in difficoltà lavorative e quindi economiche, davvero non mi riesce di provare empatia per chi pretende qualcosa a priori, ad esempio chi esige un lavoro per il semplice fatto si aver concluso una certa scuola o università. Non sopporto chi si lamenta dello Stato che non gli mette davanti un lavoro in stile manna dal cielo. Rido di chi pensa e pretende che siano le aziende a dover cercare lui/lei e non viceversa. Mi infastidisce chi è in grado di lamentarsi soltanto.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Sistema efficace per zittire i petulanti e lamentosi di turno. Chiedere loro:</p>
<blockquote><p>D&#8217;accordo, ma cosa hai fatto per migliorare la tua situazione?</p></blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p>Più di tutto quanto però non sopporto i &#8220;poverino&#8221; qui ed i &#8220;poverino&#8221; là, usati come un <em>amen</em> a chiudere tutte le lamentazioni. Col buonismo non se ne esce anche perchè, diciamocelo, alla lunga diventa stucchevole e &#8220;sa di tappo&#8221;.</p>
<p>Più di una volta mi sono trovato in situazioni in cui un tizio, il lamentoso di turno, riceveva sistematicamente la più becera solidarietà <em>di plastica</em> da chi gli stava accanto, invece che un qualche &#8220;scappellotto&#8221; verbale per farlo riflettere e, possibilmente, svegliare.</p>
<p>Come un re che, perfino nei momenti peggiori del suo comando, continua a ricevere gli onori dei cortigiani. Mi dicono che ciò sia una forma particolare di diplomazia, che consiste nel non infierire su una persona &#8220;<em>che ha già tanti problemi</em>&#8221; o, più semplicemente, nel lasciare l&#8217;incombenza a qualcuno di più intimo, rasentando il <a href="http://rejex.wordpress.com/2011/02/21/sullapatia-bystander-effect-algoritmo-dello-struzzo-ecc/"><em>bystander effect</em></a>.</p>
<p>Sciocchezze, dico io! Un amico o un conoscente fidato di una persona non ha bisogno di compiacerla, ma piuttosto ha il <strong>dovere morale</strong> di dire quello che gli altri non vogliono ammettere, consigliando per il meglio. Meglio se in privato, cioè faccia a faccia, ovviamente.</p>
<p><font size='+1' color='#005197'>L&#8217;invidia non ti fa guadagnare punti</font></p>
<p>Invidia non è solamente un sentimento negativo e statico verso qualcosa o qualcuno, reo di avere &#8220;ingiustamente&#8221; qualcosa più di noi. Invidia non è solo provare rancore verso qualcun altro usando la propria situazione come metro di paragone. L&#8217;invidia purtroppo è anche dinamica, ossia si può tradurre in una serie di atteggiamenti e azioni volti non a migliorare la propria situazione quanto a rovinare quella dell&#8217;obiettivo di turno.</p>
<p>Ebbene, con l&#8217;invidia non si va da nessuna parte. Aldilà del rischio che ogni azione di &#8220;vendetta&#8221; fallisca miseramente e torni indietro come un boomerang, ma proprio non riesco a capire perchè molta gente invece di investire tempo e risorse nel migliorare sè stessi, ne spenda molte di più per rompere le uova nel paniere a qualcun altro.</p>
<p>Un po&#8217; come quegli studenti che progettano gli stratagemmi più improbabili per copiare quando nello stesso tempo potrebbero benissimo prepararsi ed evitarsi tutti i sotterfugi. Probabilmente per loro studiare è ben più noioso che inventarsi qualche numero alla MacGyver, però il discorso rischio/ricompensa parla decisamente contro le loro astuzie. Eppure c&#8217;è molta gente in gamba che si vota a questa causa: dimostrare di essere migliori, con l&#8217;imbroglio.</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/12305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/12305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/12305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/12305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/12305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/12305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/12305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/12305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/12305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/12305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/12305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/12305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/12305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/12305/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12305&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/04/02/il-lavoro-va-rubato/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2012/04/02/il-lavoro-va-rubato/</feedburner:origLink></item>
		<item>
		<title>Sulla propria attendibilità…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/k_G28v-2Y-k/</link>
		<comments>http://rejex.wordpress.com/2012/03/26/sulla-propria-attendibilita/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 06:25:52 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Brontolo]]></category>
		<category><![CDATA[Opinioni]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=12420</guid>
		<description><![CDATA[Ogni volta che una persona apre bocca e formula un ragionamento, espone il suo parere a quello di chi sta attorno, con le conseguenze del caso. Parere non è verità, dal momento che siamo esseri limitati e, se anche fossimo depositari di una qualche Verità, probabilmente non saremmo in grado di esprimerla mantenendone la purezza. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12420&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ogni volta che una persona apre bocca e formula un ragionamento, espone il suo parere a quello di chi sta attorno, con le conseguenze del caso. Parere non è verità, dal momento che siamo esseri limitati e, se anche fossimo depositari di una qualche Verità, probabilmente non saremmo in grado di esprimerla mantenendone la purezza. In sostanza: nessuno è perfetto.</p>
<blockquote><p><em>&#8220;L&#8217;opinione è un&#8217;idea che possedete voi, mentre la convinzione è un&#8217;idea che possiede voi.&#8221; (<a href="http://it.wikiquote.org/wiki/John_Garland_Pollard">John Garland Pollard</a>)</em></p></blockquote>
<p>Quello che però differenza una semplice opinione di un individuo da quello di un altro è la sua <strong>attendibilità</strong>.</p>
<p><span id="more-12420"></span></p>
<p><font size='+1' color='#005197'>Ciarlatani astenersi</font></p>
<p>Se restringiamo il campo all&#8217;ambito professionale, l&#8217;attendibilità di un parere è un riflesso della credibilità di chi lo propone. Il peggio a cui un professionista può andare incontro è essere smentibile o, peggio, smentito da qualcuno che sia più attendibile. Il passo da &#8220;credibile&#8221; a &#8220;ciarlatano&#8221; è tremendamente breve, specie se lo si paragona alla fatica che si fa per diventare &#8211; o passare per &#8211; &#8220;autorevole&#8221;.</p>
<p>Mi permetto di riassumere alcuni punti banali:</p>
<ol>
<li>Ogni cosa che dici può essere usata contro di te, nel momento meno opportuno;</li>
<li>A parità di tutto, i pensieri messi per iscritto sono reperti duri da smentire;</li>
<li>Più testimoni, più diffusione, più probabilità di essere smentiti: sulla Rete il &#8220;diritto all&#8217;oblio&#8221; è solo una chimera;</li>
<li>Mentire può pagare sul breve periodo, ma &#8220;coprire&#8221; qualche balla detta in passato diventa via via sempre più difficile;</li>
<li>Le persone possono anche rispettare i titoli &#8211; accademici e professionali &#8211; che porti, ma quelli delimitano anche il tuo contesto di attendibilità: se spari un&#8217;idiozia in un campo che non ti compete, non puoi nasconderti dietro ad alcun titolo;</li>
<li>Se non sai, taci!</li>
</ol>
<p>Ripensandoci, non mi pare siano così <em>banali</em>. Altrimenti non si spiegherebbero gli individui propensi a formulare sentenze su tutto lo scibile umano, i cattivi consiglieri di professione, i professionisti seriali delle gaffe sulla Rete, eccetera eccetera.</p>
<p><font size='+1' color='#005197'>La tipologia peggiore</font></p>
<p>Se c&#8217;è una tipologia di individui che non sopporto proprio sono quelli che non si accorgono di formulare pareri a caso su materie che ignorano del tutto ma con l&#8217;atteggiamento di chi la sa lunga. Temo che sotto ci sia una qualche forma di competitività estrema, che fa straparlare.</p>
<span style="text-align:center; display: block;"><a href="http://rejex.wordpress.com/2012/03/26/sulla-propria-attendibilita/"><img src="http://img.youtube.com/vi/-8ZytNgvBak/2.jpg" alt="" /></a></span>
<p>Forse questa clip, presa da <a href="http://it.wikipedia.org/wiki/The_Big_Bang_Theory">The Big Bang Theory</a>, vi apparirà artificiosa, estrema, iperbolica. Eppure ogni tanto c&#8217;è qualcuno che, ragionando per &#8220;estensione&#8221;, crede di conoscere ogni cosa nel suo campo&#8230; e anche fuori o, per essere precisi, fa di tutto perchè gli altri lo credano.</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/brontolo/'>Brontolo</a> Tagged: <a href='http://rejex.wordpress.com/tag/brontolo/'>Brontolo</a>, <a href='http://rejex.wordpress.com/tag/opinioni/'>Opinioni</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/12420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/12420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/12420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/12420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/12420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/12420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/12420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/12420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/12420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/12420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/12420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/12420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/12420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/12420/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12420&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/03/26/sulla-propria-attendibilita/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>
	<feedburner:origLink>http://rejex.wordpress.com/2012/03/26/sulla-propria-attendibilita/</feedburner:origLink></item>
		<item>
		<title>La statistica nella vita quotidiana di un programmatore…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/zTowv_VvtIg/</link>
		<comments>http://rejex.wordpress.com/2012/03/19/la-statistica-nella-vita-quotidiana-di-un-programmatore/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 06:25:54 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Brontolo]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Deviazione standard]]></category>
		<category><![CDATA[Statistica]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=12385</guid>
		<description><![CDATA[Di tutti gli esami che ho superato all&#8217;Università, devo ammettere, quello di statistica e calcolo della probabilità non mi è mai stato particolarmente utile nella vita di tutti i giorni. Tuttavia, come accade spesso, l&#8217;arte messa da parte prima o poi torna utile, nei momenti e nei posti più insoliti. Prassi rischiosa Uno dei test [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12385&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rejex.wordpress.com/category/programmazione/"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100" alt="" width="100" /></a>Di tutti gli esami che ho superato all&#8217;Università, devo ammettere, quello di statistica e calcolo della probabilità non mi è mai stato particolarmente utile nella vita di tutti i giorni.</p>
<p>Tuttavia, come accade spesso, l&#8217;arte messa da parte prima o poi torna utile, nei momenti e nei posti più insoliti.</p>
<p><span id="more-12385"></span></p>
<p><font size='+1' color='#005197'>Prassi rischiosa</font></p>
<p>Uno dei test più basilari &#8211; ed evidentemente ascientifici &#8211; compiuti da noi programmatori è ripetere un numero arbitrario di volte un qualunque test, estrarre uno o pochi numeri da ogni iterazione e poi calcolare la media aritmetica. L&#8217;esempio più classico riguarda il consumo di CPU o di memoria.</p>
<p>Come ogni programmatore, nemmeno io lesino questo tipo di rozzo sistema sperimentale, ovviamente. Tuttavia recentemente, mentre stavo raccogliendo dei dati per calcolare le medie, ho avuto un <em>flash</em>.</p>
<p>Mi è tornato in mente un eccellente post di <a href="http://en.wikipedia.org/wiki/Zed_Shaw">Zed A. Shaw</a>, segnalatomi in un commento tempo fa dall&#8217;amico <a href="http://www.stefanorodighiero.net/">Larsen</a> (<em>grazie!</em>), intitolato senza troppi giri di parole <a href="http://zedshaw.com/essays/programmer_stats.html">&#8220;<strong><em>Programmers Need To Learn Statistics Or I Will Kill Them All</em></strong>&#8220;</a>.</p>
<p>Riassumo velocemente i concetti basi:</p>
<p><font color='#005197'>1. Sindrome della potenza del 10</font></p>
<p>Si fissa un numero arbitrario di iterazioni di test, normalmente una potenza del 10 come il 1000, senza curarsi del fatto che quel numero potrebbe tranquillamente eccedere quello necessario ad ottenere dati attendibili oppure non bastare affatto. Insomma, non basta ripetere &#8220;tante volte&#8221; un test per potersi ritenere sicuri;</p>
<p><font color='#005197'>2. Solo le medie</font></p>
<p>Data una serie di misurazioni si calcola la media e&#8230; stop. Il problema è che le medie, senza altri dati a supporto, tendono &#8220;coprire&#8221; facilmente situazioni preoccupanti. O per dirla alla Shaw:</p>
<blockquote><p><em>The most troubling problem with these single number “averages” is that there&#8217;s two common averages and that without some form of range or variance error they are useless.</em></p></blockquote>
<p>Un esempio di dato utile è rappresentato dalla <a href="http://it.wikipedia.org/wiki/Deviazione_standard"><strong>deviazione standard</strong></a></em>:</p>
<blockquote><p><em><img border="0" class="alignleft" src="http://upload.wikimedia.org/wikipedia/it/math/5/3/8/538e882d8b54c75d2b8f4ef0a99b1561.png" alt="Deviazione Standard" />La deviazione standard o scarto tipo o scarto quadratico medio è un indice di dispersione delle misure sperimentali, vale a dire è una stima della variabilità di una popolazione di dati o di una variabile casuale. La deviazione standard è uno dei modi per esprimere la dispersione dei dati intorno ad un indice di posizione, quale può essere, ad esempio, il <a href="http://it.wikipedia.org/wiki/Valore_atteso">valore atteso</a> o una stima del suddetto valore atteso. La deviazione standard ha pertanto la stessa unità di misura dei valori osservati (al contrario della varianza che ha come unità di misura il quadrato dell&#8217;unità di misura dei valori di riferimento). In statistica la precisione si può esprimere come deviazione standard.</em></p></blockquote>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Esempio canonico di impiego: la storiellina della media fra due persone in cui la prima possiede 2 polli mentre la seconda nulla e la media è 1 pollo a testa.</p>
<p><a href="http://en.wikipedia.org/wiki/Standard_deviation#With_sample_standard_deviation"><img class='alignright' border='0' src="http://upload.wikimedia.org/wikipedia/en/math/9/1/e/91ea0949a71eb719b5626e83bd3d6d4a.png" /></a>La media &#8220;copre&#8221; una situazione sbilanciata, ma la deviazione standard &#8211; per la precisione la <a href="http://en.wikipedia.org/wiki/Standard_deviation#With_sample_standard_deviation"><strong><em>sample standard deviation</em></strong></a>, la cui formula differisce un poco da quella &#8220;normale&#8221; -, applicata all&#8217;esempio, rivela ben altro: <em>1,41</em>. Come se non bastasse, calcolare la deviazione standard è un gioco altrettanto da ragazzi, per cui non ci sono scuse.</p>
<p>La prossima volta che qualcuno vi spara una media &#8220;a caso&#8221;, chiedetegli anche la deviazione standard: ne sentirete delle belle.</em></td>
</tr>
</table>
<p></p>
<p><font color='#005197'>3. Cause d&#8217;interferenza</font></p>
<p>Quando si effettuano prove e si acquisiscono misure di qualcosa, bisognerebbe isolare i sistemi per essere certi di minimizzare &#8220;disturbi&#8221; ed &#8220;interferenze&#8221; dovuti ad altri fattori (<em><a href="http://en.wikipedia.org/wiki/Confounding">confounding variable</a></em>):</p>
<blockquote><p><em>In statistics, a confounding variable (also confounding factor, hidden variable, lurking variable, a confound, or confounder) is an extraneous variable in a statistical model that correlates (positively or negatively) with both the dependent variable and the independent variable.</em></p></blockquote>
<p>Per dire: è inutile calcolare il consumo di una risorsa (<em>es: CPU</em>) di un dato programma se contemporaneamente ci sono molti altri programmi in funzione e in competizione per l&#8217;uso di essa.</p>
<p><font color='#005197'>4. Definizione di &#8220;utente&#8221;</font></p>
<p>Prima di misurare qualcosa, ad esempio le prestazioni di qualcosa soggetto al comportamento medio di un utente, vale la pena fermarsi un attimo e definire meglio cosa si intende per &#8220;utente medio&#8221;.</p>
<p>Sempre Shaw:<br />
<blockquote><em>Before you can measure something you really need to lay down a very concrete definition of what you&#8217;re measuring. You should also try to measure the simplest thing you can and try to avoid confounding. Yet still I see software developers begging for gazillions of dollars to buy some crap tool that doesn&#8217;t even mention “standard deviation”, but throws “user” around like it&#8217;s Dr. Phil treating Robert Downey Jr. for heroin addiction.</em></p></blockquote>
<p>Di certo se per modello di &#8220;utente medio&#8221; si prende chi si ha a disposizione in quel momento, ossia i programmatori stessi, allora si parte male.</p>
<p><font color='#005197'>5. Banda a disposizione</font></p>
<p>È inutile progettare sistemi in grado di reggere migliaia di connessioni al secondo se la banda a disposizione è in grado di sostenere il traffico di poche connessioni in contemporanea.</p>
<blockquote><p><em>Face it, users are both useless for fixing their computer and as a measurement of speed.</em></p></blockquote>
<p><font size='+1' color='#005197'>Morale della fiaba&#8230;</font></p>
<p>La parte più divertente del post di Shaw, a parte il tono diretto e schietto, è che non tratta <em>formulone indigeste</em>, ma pone l&#8217;accento su concetti semplici, direi logici per non dire banali all&#8217;apparenza.</p>
<p>Eppure, basta guardare un qualunque <em>benchmark</em> online per accorgersi di come questo tipo di consiglio prezioso, in realtà, venga bellamente ignorato.</p>
<p>O, più probabilmente, non è abbastanza noto&#8230;</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/brontolo/'>Brontolo</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/brontolo/'>Brontolo</a>, <a href='http://rejex.wordpress.com/tag/deviazione-standard/'>Deviazione standard</a>, <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a>, <a href='http://rejex.wordpress.com/tag/statistica/'>Statistica</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/12385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/12385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/12385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/12385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/12385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/12385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/12385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/12385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/12385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/12385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/12385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/12385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/12385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/12385/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12385&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/03/19/la-statistica-nella-vita-quotidiana-di-un-programmatore/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/it/math/5/3/8/538e882d8b54c75d2b8f4ef0a99b1561.png" medium="image">
			<media:title type="html">Deviazione Standard</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://upload.wikimedia.org/wikipedia/en/math/9/1/e/91ea0949a71eb719b5626e83bd3d6d4a.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2012/03/19/la-statistica-nella-vita-quotidiana-di-un-programmatore/</feedburner:origLink></item>
		<item>
		<title>Recensione “The Best Software Writing I”…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/k33M41JSn3Y/</link>
		<comments>http://rejex.wordpress.com/2012/03/12/recensione-the-best-software-writing-i/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 06:25:41 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Libri]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Best Software Writing]]></category>
		<category><![CDATA[Spolsky]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=12337</guid>
		<description><![CDATA[Riprendiamo la &#8220;tradizione&#8221; del recensire i libri con questo interessante libro del guru Joel Spolsky. In realtà questi non è il vero e proprio autore, quanto l&#8217;editor che ha recuperato il materiale, scritto da altri autori: si tratta cioè di una raccolta di scritt, sezionati da Spolky, relativi al mondo della programmazione. Scheda del libro [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12337&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rejex.wordpress.com/category/programmazione/"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100" alt="" width="100" /></a>Riprendiamo la &#8220;tradizione&#8221; del recensire i libri con questo interessante libro del guru <a href="http://en.wikipedia.org/wiki/Joel_Spolsky">Joel Spolsky</a>.</p>
<p>In realtà questi non è il vero e proprio autore, quanto l&#8217;editor che ha recuperato il materiale, scritto da altri autori: si tratta cioè di una raccolta di scritt, sezionati da Spolky, relativi al mondo della programmazione.</p>
<p><span id="more-12337"></span></p>
<p><font size='+1' color='#005197'>Scheda del libro</font></p>
<ul>
<li><strong>Titolo</strong>: &#8220;<em>The Best Software Writing I: Selected and Introduced by Joel Spolsky</em>&#8220;</li>
<li><strong>Editor</strong>: Joel Spolsky</li>
<li><strong>Editore</strong>: Apress</li>
<li><strong>Anno</strong>: 2005 (<em>prima edizione americana</em>)</li>
<li><strong>Lingua</strong>: inglese (americano)</li>
<li><strong>Genere</strong>: libro tecnico</li>
<li><strong>Categoria</strong>: raccolta di scritti inerenti il mondo ed il mercato della programmazione</li>
<li><strong>Argomenti trattati</strong>: programmazione, mercato del lavoro, &#8230;</li>
<li><strong>Pagine</strong>: 328</li>
<li><strong>Prezzo</strong>: 20.30€ su <a href="http://www.amazon.it/The-Best-Software-Writing-Introduced/dp/1590595009/ref=sr_1_1?ie=UTF8&amp;qid=1331480000&amp;sr=8-1">Amazon.it</a></li>
<li><strong>Pubblico-<em>target</em></strong>: sviluppatori</li>
</ul>
<p><a href="http://www.amazon.it/The-Best-Software-Writing-Introduced/dp/1590595009/ref=sr_1_1?ie=UTF8&amp;qid=1331480000&amp;sr=8-1"><img alt="The Best Software Writing I: Selected and Introduced by Joel Spolsky" src="http://ecx.images-amazon.com/images/I/61hfBs52-EL._SL500_AA240_.jpg" title="The Best Software Writing I: Selected and Introduced by Joel Spolsky" width="240" height="240" /></a></p>
<p><font size='+1' color='#005197'>Introduzione</font></p>
<p>Questo libro è una raccolta di materiale disponibile da tempo sulla Rete. Il pregio nonchè il <strong>valore aggiunto</strong> dell&#8217;opera sta proprio nella selezione effettuata dall&#8217;<em>editor</em> &#8211; nonchè dalle sue note introduttive e a margine a ciascuno scritto -, in modo da portare alla luce vari aspetti del variegato mondo della programmazione partendo dall&#8217;assunto spolskiano che un buon programmatore è anche un bravo scrittore:</p>
<blockquote><p><em>Yeah, I know: programmers hate writing. And when, for some reason, they are somehow forced to write down something, it reads like the repair manual for a DC-3, or the result of consolidating all the &#8220;don&#8217;t do this&#8221; examples from an English style guide into one page. [...]</p>
<p>At my own company, we instituted a policy: we only want to hire software developers who can write, and write well. [...]</p>
<p>The goal of this book is to encourage better writing about software by highliting some of the best writing of the year. What looked for was simple: good writing</em>. [...]</p></blockquote>
<p>In linea di massima, credo di concordare con questo assunto: se sei capace di scrivere bene, ossia esternare al meglio dei concetti per forza di cosa devi anche conoscere bene quello che tratti. D&#8217;altro canto, un programmatore può anche essere un genio, ma, a meno di lavorare come un eremita, non essere capace di condividere in termini comprensibili le informazioni è un grosso limite.</p>
<p>Non basta saper spiegare bene le cose verbalmente: metterle per iscritto è ben più difficile &#8211; niente slang, niente scorciatoie &#8211; ed è una migliore dimostrazione di abilità.</p>
<p>Con questa doverosa premessa, partiamo con la recensione del libro.</p>
<p><font size='+1' color='#005197'>Il libro e la materia</font></p>
<p>Gli autori di quest&#8217;opera compilativa sanno ovviamente il fatto loro: <a href="http://en.wikipedia.org/wiki/Cory_Doctorow">Cory Doctorow</a>, <a href="http://en.wikipedia.org/wiki/Bruce_Eckel">Bruce Eckel</a>, <a href="http://en.wikipedia.org/wiki/Paul_Graham_%28computer_programmer%29">Paul Graham</a>, <a href="http://blogs.msdn.com/b/ericlippert/">Eric Lippert</a>, solo per citare quelli più famosi.</p>
<p>Ognuno di loro tratta un tema diverso, un punto di vista diverso su qualcosa che ha a che fare con l&#8217;informatica lato programmazione: ognuno ha cioè qualcosa di utile da segnalare al lettore.</p>
<p>Il bello ed il brutto del libro sta proprio in questo: molti scritti, molti temi ma (apparentemente) slegati fra loro, senza un filo conduttore che non sia l&#8217;abilità stessa degli autori di formulare ed esprimere al meglio il loro pensiero, per altro spesso in <strong>tono umoristico</strong>.</p>
<p>Un aspetto curioso del &#8220;<em>saper scrivere bene</em>&#8221; non consiste nel saper mettere una parola dopo l&#8217;altra: un discreto numero dei vari scritti riportati, di diversa lunghezza anche se mai eccessiva, è rappresentata da disegni e perfino <em>cartoon</em>. Degno di nota quello che &#8220;<em>se la prende</em>&#8221; con il cagnolino che compare nella ricerca dei file di Windows XP, un&#8217;interfaccia definitiva &#8220;silliest&#8221; ed il mini-corso du Ruby a fumetti.</p>
<p><font size='+1' color='#005197'>Contenuti</font></p>
<p>Devo ammettere che non ho trovato un singolo capitolo-scritto non degno di una sua presentazione.Tuttavia, non potendo dilungarmi più di tanto, dovrò accontentarmi di presentarne alcuni, quelli che, a mia volta, ho ritenuto i più meritori.</p>
<p>&#8220;Excel as a database&#8221; di Rory Blyth mostra, ricorrendo nuovamente ai fumetti, l&#8217;ennesima variante di un pattern ricorrente: sfruttare un programma per fargli fare l&#8217;impossibile. In questo caso l&#8217;obiettivo della lamentela è il marketing, uno degli ambienti in cui quel programma la fa da padrone:</p>
<blockquote><p><em>Every feature of Excel was probably abused and abused again to avoid having to use an actual database application for storage of the data.</p>
<p>Of course, it’s up to you to make sense of the layout, and marketing could just give a bleepity-bleep about what a pain it is to suck weird data out of Excel and “do something with it” when little or (more often) no thought has been given to possibly making the data consistent or, dare I say, orderly.</em></p></blockquote>
<p>Mi ha veramente molto colpito il pezzo di Bruce Ecklel &#8220;<em>Strong Typing Vs Strong Testing</em>&#8221; in cui l&#8217;autore, celebre per i vari Thinking in Java e Thinking in C++, ragiona sul fatto che, in ultima istanza, non è il tipo di typing a decretare la sicurezza di un linguaggio quanto poi il suo impiego nella produzione di programmi e, di conseguenza, il testing vero e proprio di questi ultimi. </p>
<blockquote><p><em><strong>Strong testing, not strong typing.</strong></p>
<p>So this, I assert, is an aspect of why Python works. C++ tests happen at compile time (with a few minor special cases). Some Java tests happen at compile time (syntax checking), and some happen at runtime (arraybounds checking, for example). Most Python tests happen at runtime rather than at compile time, but they do happen, and that’s the important thing (not when).</p>
<p>And because I can get a Python program up and running in far less time than it takes you to write the equivalent C++/Java/C# program, I can start running the real tests sooner: unit tests, tests of my hypothesis, tests of alternate approaches, etc. And if a Python program has adequate unit tests, it can be as robust as a C++, Java, or C# program with adequate unit tests (although the tests in Python will be faster to write).</em></p></blockquote>
<p>Interessante punto di vista, soprattutto perchè proveniente da una celebrità del mondo della programmazione da cui non ci si sarebbe aspettato una difesa del typing debole presente nei linguaggi dinamici come Python. Utile, perchè demolisce l&#8217;assunzione &#8220;accademica&#8221; secondo cui &#8220;statico è bello e meglio&#8221;.</p>
<p>Penso che l&#8217;articolo più insolito sia quello intitolato &#8220;Starbucks does not use two-phase commit&#8221; di Gregor Hohpe in cui l&#8217;autore analizza rapidamente il modo di servire le prenotazioni in questa famosa catena di caffetterie: si va dalla gestione asincrona delle ordinazioni, alla particolare &#8220;gestione delle eccezioni&#8221; in caso di problemi, per poi concludere il ragionamento con un raffronto con il <a href="http://en.wikipedia.org/wiki/Two-phase_commit_protocol"><em>commit a due fasi</em></a> ampiamente usato in informatica (<em>es: nei DB</em>):</p>
<blockquote><p><em>All of these strategies are different than a two-phase commit that relies on separate prepare and execute steps. In the Starbucks example, a two-phase commit would equate to waiting at the cashier with the receipt and the money on the table until the drink is finished.</p>
<p>Then, the drink would be added to the mix. Finally the money, receipt, and drink would change hands in one swoop. Neither the cashier nor the customer would be able to leave until the “transaction” is completed. </p>
<p>Using such a two-phase-commit approach would certainly kill Starbucks’ business because the number of customers they can serve within a certain time interval would decrease dramatically. This is a good reminder that although a two-phase commit can make life a lot simpler it can also hurt the free flow of messages (and therefore the scalability) because it has to maintain stateful transaction resources across the flow of multiple, asynchronous actions.</em></p></blockquote>
<p>Un altro scritto che merita davvero di essere letto è quello di Eric Lippert intitolato &#8220;<em>How many Microsoft employees does it take to change a lightbulb?</em>&#8220;. In questo pezzo l&#8217;autore spiega come anche la piccola modifica richiesta da un utente agli sviluppatori di un prodotto in Microsoft (<em>in questo caso una nuova funzione in VB6</em>), per quanto possa richiedere pochi minuti di lavoro per essere completata, in realtà si traduca nel lavoro coordinato di più persone, ognuna delle quali dedita ad analizzare (<em>ed eventualmente porre il veto per</em>) un singolo aspetto inerente a quella modifica: fattibilità, opportunità, costi/benefici, assenza di doppioni, sicurezza dell&#8217;interfaccia, internazionalizzazione, eccetera. </p>
<blockquote><p><em>That initial five minutes of dev time translates into many personweeks of work and enormous costs, all to save one person a few minutes of whipping up a one-off VB6 control that does what they want. Sorry, but that makes no business sense whatsoever. At Microsoft we try very, very hard to not release half-baked software.</em></p></blockquote>
<p>L&#8217;opera include anche scritti molto interessanti sul mondo del lavoro e della gestione delle persone. Molto istruttivo, ad esempio, il pezzo di Mary Poppendieck sulla &#8220;Team Compensation&#8221; in cui l&#8217;autrice spiega come sia complicato al limite dell&#8217;impossibile premiare solamente qualcuno in un gruppo di persone che hanno ottenuto dei successi senza provocare sconvolgimenti catastrofici. Lo scopo, questo è il punto focale, è trovare un sistema di riconoscimento del merito che non provochi atteggiamenti disfunzionali come &#8220;competizione&#8221; per ottenere il premio, &#8220;percezione di non equità&#8221; da chi ne viene escluso o da chi non è convinto del metodo adottato, &#8220;percezione dell&#8217;impossibilità&#8221; nell&#8217;essere esortato a compiere qualcosa di impossibile seppur dietro la promessa di una futura gratifica, eccetera.</p>
<p>L&#8217;autrice elenca quindi una serie di opzioni per un &#8220;reward system&#8221; che non produca i suddetti effetti collaterali, come il rendere il sistema delle promozioni legato ai requisiti soddisfatti o meno delle persone per un dato posto o il sistema di promozioni proporzionale ai fattori economici chiave dello sviluppo dell&#8217;azienda. Si tratta decisamente di un bell&#8217;articolo, di pregevole fattura, estremamente interessante e, credo, anche molto utile.</p>
<p>Infine, per concludere in bellezza, non posso non segnalare la serie dei due articoli &#8220;<em>Closing the gap</em>&#8221; di  Eric Sink in cui, fra le varie cose, l&#8217;autore cerca di spiegare l&#8217;esistenza e le finalità ultime del marketing e del reparto vendite (<em>ai programmatori?</em>):</p>
<blockquote><p><em><strong>Working with a Sales Guy</strong></p>
<p>It is quite common for people in other job functions to have some resentment of the sales guy because of these commissions. For example, the lead architect who designed your product will be wondering why the sales guy gets a cut of every sale when she does not. Is the sales guy more valuable than the person who actually created the product?</p>
<p>Good sales guys understand this problem and work very hard to counteract it by “sucking up” to the developers at every opportunity. [...]</p>
<p><strong>Characteristics of a Sales Guy</strong></p>
<p>A sales guy needs a special set of skills. They tend to be extraverts. They are usually excellent communicators with incredible interpersonal skills.</p>
<p>They are self-confident, sometimes to a fault. They’re usually very goodlooking and snappy dressers. Sales guys know enough about technology to be dangerous. They know how to handle themselves well in surprising situations. They know exactly when to move toward closure and ask for the deal.</p>
<p>A certain amount of variation from the sales guy stereotype is acceptable, but there is one trait that is absolutely a requirement: a good sales guy is someone who is motivated only by money. One of the most dangerous personnel mistakes is to hire a sales guy who cares about anything else.</p>
<p>A good sales guy will do only those things for which you have provided him a financial incentive (a commission). Everything else is a waste of time, and he is essentially immune to management influence through any other means.</p>
<p>Note that every coin has two sides. Although I consider this mercenary nature to be an important trait for a sales guy, there is a downside that accompanies this benefit. A good sales guy has incredible listening skills that only seem to work when he is working on a deal. When listening to a prospective customer, he will catch and understand every single detail, never missing something that might help close the sale. [...]</p>
<p>So while the greed gene can obviously create some challenges, the pros definitely outweigh the cons. Managing a money-driven sales guy ends up being simple and largely devoid of surprises. You don’t have to spend all kinds of time figuring out what motivates your sales guy like you do with your developers. All you have to do is make sure his compensation is carefully correlated with the set of things you want him to accomplish.</em></p></blockquote>
<p><font size='+1' color='#005197'>Conclusioni</font></p>
<p>Pur essendo una raccolta, un&#8217;aggregazione di documenti già disponibili in Rete da tempo e non particolarmente legati fra loro, questi libro si è rivelato davvero molto interessante, illuminante per molti aspetti.</p>
<p>Per cui non mi resta che consigliarvelo.</p>
<p>Voto complessivo: <strong>8+</strong>.</p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/libri/'>Libri</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/best-software-writing/'>Best Software Writing</a>, <a href='http://rejex.wordpress.com/tag/libri/'>Libri</a>, <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a>, <a href='http://rejex.wordpress.com/tag/spolsky/'>Spolsky</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/12337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/12337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/12337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/12337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/12337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/12337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/12337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/12337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/12337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/12337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/12337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/12337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/12337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/12337/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12337&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/03/12/recensione-the-best-software-writing-i/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://ecx.images-amazon.com/images/I/61hfBs52-EL._SL500_AA240_.jpg" medium="image">
			<media:title type="html">The Best Software Writing I: Selected and Introduced by Joel Spolsky</media:title>
		</media:content>
	<feedburner:origLink>http://rejex.wordpress.com/2012/03/12/recensione-the-best-software-writing-i/</feedburner:origLink></item>
		<item>
		<title>Sulle soluzioni scartate perchè troppo semplici…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/9nbj8zwxAMI/</link>
		<comments>http://rejex.wordpress.com/2012/03/05/sulle-soluzioni-scartate-perche-troppo-semplici/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 06:25:10 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Allocator]]></category>
		<category><![CDATA[Bias]]></category>
		<category><![CDATA[Machine learning]]></category>
		<category><![CDATA[Naive Bayes Classifier]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=10261</guid>
		<description><![CDATA[Parlando di algoritmi per la gestione della memoria e cercando informazioni sulla Rete, ogni tanto ci si imbatte in osservazione come la seguente (in grassetto): Best Fit The allocator places a process in the smallest block of unallocated memory in which it will fit. [...] First Fit Another strategy is first fit, which simply scans [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=10261&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Parlando di algoritmi per la gestione della memoria e cercando informazioni sulla Rete, ogni tanto ci si imbatte in osservazione come la <a href="http://stargazer.bridgeport.edu/sed/projects/cs503/Spring_2001/kode/os/memory.htm#worstfit">seguente</a> (<em>in grassetto</em>):</p>
<blockquote><p><em><strong>Best Fit</strong> The allocator places a process in the smallest block of unallocated memory in which it will fit. [...]</p>
<p><strong>First Fit</strong> Another strategy is first fit, which simply scans the free list until a large enough hole is found. <strong>Despite the name, first-fit is generally better than best-fit because it leads to less fragmentation.</strong></em></p></blockquote>
<p><span id="more-10261"></span></p>
<p><a href="http://rejex.wordpress.com/category/programmazione/"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100" alt="" width="100" /></a>È un fatto curioso della vita che non sempre il meglio sulla carta sia anche il meglio anche nella vita reale, ossia che la strada da preferirsi teoricamente, si riveli alla fine come errata, a differenza di un&#8217;altra, originariamente scartata perchè ritenuta peggiore e talvolta perfino inammissibile.</p>
<p>O, per dirla alla <a href="http://it.wikiquote.org/wiki/Yogi_Berra">Yogi Berra</a>:<br />
<blockquote><em>In teoria non c&#8217;è differenza fra la teoria e la pratica. Ma in pratica c&#8217;è.</em></p></blockquote>
<p><font size='+1' color='#005197'>La perfezione è un punto di vista</font></p>
<p>A tratti sono scaramantico e quando mi trovo ad avere a che fare con una soluzione <em>(accademicamente) troppo perfetta</em>, quasi subito comincio a chiedermi dove sia l&#8217;inganno.</p>
<p>Filosoficamente sarà anche vero che per ogni problema probabilmente esiste più di una soluzione valida, ma poi il criterio con cui viene scelta quella da impiegare concretamente spesso non c&#8217;entra nulla col problema originario: in sostanza, ognuno di noi tende a scegliere la soluzione che risolva sì il problema, ma che ci risulti anche più comoda da impiegare.</p>
<p>Qualcuno vede in questo modo di agire una semplice questione di <em>pigrizia</em>, qualcun altro potrebbe scomodare una qualche strategia di <em>minimizzazione dell&#8217;energia</em> da impiegare, qualcun altro ancora potrebbe spingersi a definirla come un&#8217;applicazione del <em>rasoio di Occam</em>, ma il concetto in fondo non cambia: un conto è la migliore soluzione sul foglio di carta, un&#8217;altra è la soluzione effettivamente prescelta ed utilizzata.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Il metro di giudizio sulle soluzioni cambia sulla base dei nostri pregiudizi, dei nostri <em>bias. E di quello che ci piace di più.</em></td>
</tr>
</table>
<p></p>
<p>In ambito tecnico e reale &#8211; e qui mi rivolgo principalmente alle persone alle prime armi, neolaureati inclusi &#8211; non esiste quasi mai la scelta accademicamente ottima. Il lavoro non è una formula con le sue precondizioni univocamente determinate, ma un insieme formule a più variabili, molte delle quali indipendenti da noi che proviamo a destreggiarci fra di esse.</p>
<p>Per questo mi ritrovo io stesso a partire in quarta con una certa soluzione salvo poi scoprire che qualcosa non torna. Lavoro è anche questo: smussare gli angoli a soluzioni nate nell&#8217;incertezza.</p>
<p><font size='+1' color='#005197'>Un ricordo dal passato</font></p>
<p><a href="http://en.wikipedia.org/wiki/Bayes%27_theorem"><img class="alignleft" style="border:0 none;margin:5px;" title="Bayes' theorem" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Bayes%27_Theorem_MMB_01.jpg/800px-Bayes%27_Theorem_MMB_01.jpg" alt="Bayes' theorem" width="200" /></a>Non so se gli amici <a href="http://cavokz.wordpress.com/"><em>Cavok</em></a> e <em>Fez</em> ricorderanno, ma durante l&#8217;esame di <em>Metodi per il ragionamento automatico</em> (<em>aka: Programmazione II</em>) ci fu chiesto di implementare, come progetto pratico, un <a href="http://it.wikipedia.org/wiki/Classificatore_bayesiano"><em>classificatore bayesiano</em></a>, ossia un programma in grado di assegnare un documento ad una categoria sulla base del contenuto. </p>
<p>In pratica quello che fa un comune filtro <em>antispam</em>: non a caso si può dire che <a href="http://en.wikipedia.org/wiki/Bayesian_spam_filtering">Bayes &#8220;spopola&#8221; in quell&#8217;ambito</a>.</p>
<p>C&#8217;erano vari algoritmi disponibili per l&#8217;implementazione, ma il professore ci chiese esplicitamente di usare quello denominato <a href="http://en.wikipedia.org/wiki/Naive_Bayes_classifier"><em>naive</em></a>, una versione basilare e semplificata di algoritmi bayesiani accademicamente &#8220;seri&#8221;.</p>
<p>A leggerne il funzionamento e a compararlo agli altri, veniva immediatamente in mente il classico personaggio dei cartoni animati di una volta che riusciva a far partire un&#8217;auto levando pezzi ritenuti &#8220;inutili&#8221; (<em>es: spinterogeno</em>):</p>
<blockquote><p><em>Questo non serve, questo non serve, &#8230;</em></p></blockquote>
<p>Diciamocelo: nessuno di noi era troppo convinto della bontà di quella soluzione. Già l&#8217;attributo <a href="http://en.wikipedia.org/wiki/Naivety"><em>naive</em></a> applicato ad un algoritmo non ci faceva ben sperare:</p>
<blockquote><p><em><strong>Naivety</strong> (or naïvety, naïveté, etc.), is the of being naive—having or showing a lack of experience, understanding or sophistication &#8211; often in a context where one neglects pragmatism in favor of moral idealism.</em></p></blockquote>
<p>Fortunatamente ci sbagliavamo.</p>
<p>Perfino <a href="http://en.wikipedia.org/wiki/Tom_M._Mitchell">Tom M. Mitchell</a>, l&#8217;autore del libro su cui studiammo nonchè una delle opere di riferimento per la materia  &#8211; <em><a href="http://www.amazon.com/Machine-Learning-Mcgraw-Hill-International-Edit/dp/0071154671/ref=tmm_pap_title_0">Machine Learning</a></em> -, pareva non capacitarsi di come qualcosa di così semplice, riduttivo e quindi scartabile, funzionasse invece a dovere rispetto a soluzioni ben più accademicamente solide:</p>
<blockquote><p><em>[...] The naive Bayes algorithm was then applied using two-thirds of these 20,000 documents as training example, and performance was measured over the remaining third. Given 20 possibile newsgroups, <strong>we would expect random guessing to achieve a classification accuracy of approximately 5%. The accuracy achieved by the program was 89%.</strong></em></p></blockquote>
<p>Risi a crepapelle nel leggere questa frase: un accademico metteva nero su bianco di essersi ricreduto dopo aver messo alla prova un algoritmo apparentemente pessimo. Questa frase mi è rimasta impressa da allora nella testa e la uso come monito per me me stesso quando mi viene da scartare qualcosa a priori perchè non mi pare abbastanza <em>seria</em>.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Finchè una soluzione non viene &#8220;fatta girare sul banco&#8221; e non ne vengono analizzati i risultati, qualunque ragionamento teorico sul suo funzionamento o sulle sue prestazioni attese, anche quello apparentemente più logico, alla fine conta quanto la peggiore delle illazioni possibili, quanto una pura supposizione non provata.</p>
<p>Parafrasando <a href="http://en.wikiquote.org/wiki/Donald_Knuth">Knuth</a>:<br />
<blockquote>Beware of bugs in the above code; I have only proved it correct, not tried it.</p></blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p>Al contempo quella frase è anche un monito a non dare tutto per scontato. Piuttosto &#8211; questo l&#8217;insegnamento più importante -, ogni tanto vale la pena provare a prendere l&#8217;altra strada, anche solo per cambiare un po&#8217; l&#8217;aria e vedere cosa c&#8217;è di nuovo. </p>
<p>Questo discorso incredibilmente vale anche a gioco iniziato: raramente è possibile cambiare soluzione in fase implementativa, ma non è neppure impossibile come sostengono certi individui. Anzi, spesso proseguire con la soluzione sbagliata costa più che ammettere l&#8217;errore e ripartire da un&#8217;altra, magari quella che era stata scartata all&#8217;inizio perchè <em>troppo semplice</em>.</p>
<p>Dopotutto è meglio ottenere un successo dovendo ricredersi e cambiando che continuare a fallire serialmente pur di continuare sulla solita, classica e collaudata strada.</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/allocator/'>Allocator</a>, <a href='http://rejex.wordpress.com/tag/bias/'>Bias</a>, <a href='http://rejex.wordpress.com/tag/machine-learning/'>Machine learning</a>, <a href='http://rejex.wordpress.com/tag/naive-bayes-classifier/'>Naive Bayes Classifier</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/10261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/10261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/10261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/10261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/10261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/10261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/10261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/10261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/10261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/10261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/10261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/10261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/10261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/10261/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=10261&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/03/05/sulle-soluzioni-scartate-perche-troppo-semplici/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Bayes%27_Theorem_MMB_01.jpg/800px-Bayes%27_Theorem_MMB_01.jpg" medium="image">
			<media:title type="html">Bayes' theorem</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2012/03/05/sulle-soluzioni-scartate-perche-troppo-semplici/</feedburner:origLink></item>
		<item>
		<title>La full disclosure della conoscenza…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/hVjyDr-Kp3Y/</link>
		<comments>http://rejex.wordpress.com/2012/02/27/la-full-disclosure-della-conoscenza/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 06:25:52 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=10980</guid>
		<description><![CDATA[Parlare di full disclosure significa chiamare in causa il mondo della sicurezza informatica, quel circus per dirla alla Linus Torvalds, composto da buoni, cattivi ed una infinita serie di tonalità di grigio fra questi estremi. Da Wikipedia: In computer security, full disclosure means to disclose all the details of a security problem which are known. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=10980&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rejex.wordpress.com/category/programmazione/"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100" alt="" width="100" /></a>Parlare di <a href="http://en.wikipedia.org/wiki/Full_disclosure"><em>full disclosure</em></a> significa chiamare in causa il mondo della sicurezza informatica, quel <em>circus</em> per <a href="http://www.zdnet.com/news/torvalds-attacks-it-industry-security-circus/211239">dirla alla Linus Torvalds</a>, composto da buoni, cattivi ed una infinita serie di tonalità di grigio fra questi estremi.</p>
<p>Da <a href="http://en.wikipedia.org/wiki/Full_disclosure"><em>Wikipedia</em></a>:</p>
<blockquote><p><em>In computer security, full disclosure means to disclose all the details of a security problem which are known. It is a philosophy of security management completely opposed to the idea of security through obscurity. The concept of full disclosure is controversial, but not new; it has been an issue for locksmiths since the 19th century.</em></p></blockquote>
<p>Vorrei partire da questi termini ed esterne il significato, ben oltre la sfera della sicurezza.</p>
<p><span id="more-10980"></span></p>
<p>Penso sia normale provare a mantenere il proprio orticello, salvaguardandolo da eventuali concorrenti, esterni ed anche interni. Una strategia semplice ed apparentemente efficace per difendere la propria posizione sociale e professionale è negare le informazioni o fornirle incomplete o inesatte a chi potrebbe rappresentare un ostacolo o un pericolo.</p>
<p>È un riflesso incondizionato in certe persone, per cui è ben difficile riuscire ad ottenere qualcosa da loro a meno di continuare a tempestarle di domande <em>più-che-precise</em>: se poni una certa domanda, questo tipo di interlocutore si pone immediatamente sulla difensiva, temendo il peggio per la sua conoscenza faticosamente ottenuta.</p>
<p><a href="http://it.wikipedia.org/wiki/The_Prestige"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://upload.wikimedia.org/wikipedia/it/thumb/d/d5/Prestige-2006-Jackman.png/300px-Prestige-2006-Jackman.png" alt="The Prestige" width="150" /></a>Come un &#8220;mago&#8221; che per definizione non deve mai e poi mai svelare i suoi trucchi. E magari morirebbe anche, pur di non svelarli.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Sia chiaro che mi riferisco allo scambio di conoscenza perfettamente legale ossia al <a href="http://it.wikipedia.org/wiki/Know_how">know-how</a>, non certo a informazioni riservate!</em></td>
</tr>
</table>
<p></p>
<p><font size='+1' color='#005197'>Paranoia?</font></p>
<p>Ognuno ha le sue conoscenze ed è giusto che provi a valorizzarle come meglio crede. Non sono convinto però che negare informazioni o fare resistenza <em>ostinatamente ad oltranza</em> rappresenti un modo efficace per farlo perchè, ad un certo punto, la corda si spezza.</p>
<p>Sul breve periodo mantenere un certo alone di mistero sul proprio <em>know-how</em> può scoraggiare eventuali concorrenti, anche limitrofi, ma a patto di utilizzare questa strategia per accelerare in avanti, <strong>ossia guadagnare tempo e nuove conoscenze tali da mantenere il vantaggio</strong>: prima che qualcuno raggiunga il nostro &#8220;livello&#8221;, noi avremo già raggiunto il prossimo. È lo stesso principio alla base dell&#8217;innovazione: </p>
<blockquote><p><em>&#8220;Che ci copino pure, copieranno qualcosa di già vecchio.&#8221;</em></p></blockquote>
<p>Inoltre, come ho detto in passato, ogni conoscenza, soprattutto informatica, ha una sua naturale scadenza, per cui continuare a controllare a titolo esclusivo delle nozioni ormai obsolete, sul lungo periodo non paga. </p>
<p>Non paga perchè le informazioni col passare del tempo perdono valore e perchè qualcuno, accortosi del diniego costante di informazioni, presto o tardi proverà a farne a meno, abbandonando il vecchio in favore di qualcosa di nuovo o cercando dei <em>workaround</em>. </p>
<p>La &#8220;<a href="http://en.wikipedia.org/wiki/Security_through_obscurity"><em>security through obscurity</em></a>&#8221; del proprio posto di lavoro, almeno nel settore informatico, è un modello che semplicemente non funziona o non funziona a lungo:</p>
<blockquote><p><em>&#8220;Security through obscurity is a pejorative referring to a principle in security engineering, which attempts to use secrecy of design or implementation to provide security. [...] Security through obscurity has never achieved engineering acceptance as an approach to securing a system, as it contradicts the principle of &#8220;keeping it simple&#8221;. The United States National Institute of Standards and Technology (NIST) specifically recommends against it in more than one document. Quoting from one, &#8216;System security should not depend on the secrecy of the implementation or its components.&#8217;&#8221;</em></p></blockquote>
<p><font size='+1' color='#005197'>Apertura!</font></p>
<p>Imparare per proprio conto è un processo faticoso e non è facile accettare di semplificare la vita ad altri tramite <strong>trasferimenti di conoscenza</strong> a &#8216;mo di &#8220;pappa pronta&#8221;. Soprattutto non lo è se si è in presenza di <a href="http://en.wikipedia.org/wiki/Lurker"><em>lurker</em></a>, persone che si limitano ad osservare ed assimilare informazioni, senza contribuire equamente con le proprie.</p>
<p>Si potrebbe a questo punto pensare ad una specie di <em>trasferimento selettivo</em>, ossia a persone in grado di fare altrettanto: un <em>do ut des</em>.</p>
<p>Eppure, esperienza alla mano, sono ormai certo che restringere l&#8217;accesso alle informazioni, nell&#8217;era di Internet, sia in fondo inefficace, almeno quanto lo è il provare ad offuscare il codice: per quanto si possano porre paletti al prossimo, c&#8217;è sempre un prossimo più in gamba per evitarli:</p>
<blockquote><p><em>&#8220;Guai al pesce grosso che si crede il più grosso.&#8221;</em></p></blockquote>
<p>A questo punto, tanto vale rilasciare le informazioni, apririne l&#8217;accesso ma in modo graduale, provando eventualmente a godere dei vantaggi del <em>guru-che-spiega-ai-suoi-discepoli</em>. Magari non si diventerà famosi, ma guadagnarsi la riconoscenza di qualcuno è pur sempre gratificante.</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/10980/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/10980/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/10980/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/10980/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/10980/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/10980/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/10980/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/10980/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/10980/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/10980/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/10980/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/10980/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/10980/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/10980/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=10980&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/02/27/la-full-disclosure-della-conoscenza/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/it/thumb/d/d5/Prestige-2006-Jackman.png/300px-Prestige-2006-Jackman.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2012/02/27/la-full-disclosure-della-conoscenza/</feedburner:origLink></item>
		<item>
		<title>Sui bug e sui tempi di reazione ad essi…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/-mn1UmES4r8/</link>
		<comments>http://rejex.wordpress.com/2012/02/20/sui-bug-e-sui-tempi-di-reazione-ad-essi/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 06:25:39 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Professionalità]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Bugfix]]></category>
		<category><![CDATA[Deontologia professionale]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=12245</guid>
		<description><![CDATA[Non esistono manufatti umani perfetti: se un prodotto è davvero il riflesso del suo autore, è impossibile che il primo ecceda in meglio la natura del secondo. Si arriva dunque al discorso qualità: un prodotto di qualità per definizione contiene anche un numero basso di difetti riscontrabili ed effettivamente riscontrati. Eppure, sono convinto, non basta [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12245&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rejex.wordpress.com/category/programmazione/"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100" alt="" width="100" /></a>Non esistono manufatti umani perfetti: se un prodotto è davvero il riflesso del suo autore, è impossibile che il primo ecceda in meglio la natura del secondo.</p>
<p>Si arriva dunque al discorso qualità: un prodotto di qualità per definizione contiene anche un numero basso di difetti riscontrabili ed effettivamente riscontrati.</p>
<p>Eppure, sono convinto, non basta <em>quel</em> numero a definire cosa sia eccellente e cosa sia mediocre.</p>
<p><span id="more-12245"></span></p>
<p><font size='+1' color='#005197'>Sbagliare sarà umano, ma i danni vanno sistemati!</font></p>
<p>Non c&#8217;è nulla di più fastidioso di trovarsi con un problema e dover <em>attendere Godot</em> per una soluzione. Se poi quel problema è pure dichiarato come <em>noto</em>, allora inalberarsi è pure sacrosanto.</p>
<p>Per un mero discorso di esperienza, do per scontato che la maggior parte dei problemi dichiarati come &#8220;<em>noti</em>&#8221; dai produttori lo siano (<em>stati</em>) da parecchio tempo, talvolta senza ancora una cura, altrimenti si parlerebbe di revisione-<em>bugfix</em> del software. In sostanza in quei casi il termine <em>noto</em> equivale ad <em>abbandonato</em>.</p>
<p>Per cui, passo lapalissiano, <strong>in quel calderone che si chiama qualità del software includerei anche il tempo medio di risoluzione di un problema</strong>: da cliente o utente non mi interessa nulla sapere se un prodotto ha più o meno bug della concorrenza, mi interessa disporre di qualcosa di supportato adeguatamente, il che include anche una reazione immediata o quasi alle eventuali magagne che riscontro.</p>
<p><font size='+1' color='#005197'>Non tutti i bug nascono uguali</font></p>
<p><a href="http://it.wikipedia.org/wiki/Bug"><img width="200" class="alignleft" border="0" src="http://rejex.files.wordpress.com/2012/02/bug.jpg?w=200" alt="Bug" /></a>Da sviluppatore ho ben chiaro che esistono vari tipi di bug. Ci sono semplici errori di programmazione (<em>es: <a href="http://en.wikipedia.org/wiki/Typo">typo</a></em>), corretti nello spazio di pochi minuti e problemi via via più seri, che possono anche intaccare pesantemente il funzionamento di molte righe di codice e quindi richiedere settimane o mesi per le relative <em>patch</em>.</p>
<p>Ho anche ben chiaro che rilasciare in fretta e furia le correzioni, senza test prolungati, può causare ulteriori problemi (<em>&#8220;cura peggiore del male&#8221;</em>), per cui sono pronto a tollerare un&#8217;ulteriore dilatazione dei tempi, pur di ottenere una piena risoluzione dei problemi.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Uno &#8220;storico&#8221; esempio di megapatch problematico. Da <a href="http://www.tomshardware.com/news/Windows-XP-SP3,5334.html">Tom&#8217;s hardware</a>:</p>
<blockquote><p>&#8220;Windows XP Service Pack 3 finally arrived to our computers this week… And is now killing AMD machines, according to Jesper Johansson, former program manager for security policy at Microsoft.</p>
<p>The problem relates to machines with SP3 installed rebooting and then not allowing users to get so much as Safe Mode. The problem is mainly affecting AMD users who bought their machines from HP. Johansson attributes the problem to the way that HP puts images of Windows onto its machines, using the same copy for both Intel and AMD boxes.&#8221;</p></blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p>Forse, nei panni del cliente di turno di fronte ad un prodotto malfunzionante, potrei semplicemente recitare la parte del<br />
<blockquote>&#8220;<em>Non mi interessa nulla di cosa non va, sistemalo subito!</em>&#8220;</p></blockquote>
<p> Tuttavia, da sviluppatore <em>deformato professionalmente</em>, mi è naturale provare a capire cosa non vada e, nel caso mi riesca, trovare un qualche <em>workaround</em>.</p>
<p>Questo perchè non sono un cliente &#8220;<em>illetterato</em>&#8221; &#8211; passatemi il termine &#8211; e, siccome sono il primo a non sopportare le <strong>segnalazioni di errore generico</strong> degli utenti tipo</p>
<blockquote><p>&#8220;<em>Non va!</em>&#8220;</p></blockquote>
<p>cerco sempre di agevolare chi mi deve risolvere un problema, fornendo tutte le informazioni che riesco a recuperare.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Preferisco correre il rischio e sbagliarmi nel formulare ipotesi sui problemi, che complicare la vita alle persone, senza dare informazioni utili a risolvere i problemi e limitandomi ad arrabbiarmi o ad insultarle.</em></td>
</tr>
</table>
<p></p>
<p><font size='+1' color='#005197'>Dal bug alla faccenda personale, il passo non è poi così lungo&#8230;</font></p>
<p>Trovo invece inaccettabile essere messo in coda e dover attendere mesi per semplici bugfix quando ho la certezza di essere di fronte ad un problema risolvibile in poco tempo. E allora sì che mi arrabbio.</p>
<p><a href="http://www.dilbert.com/strips/comic/2012-02-12/" title="Dilbert"><img border="0" width="450" src="http://www.dilbert.com/dyn/str_strip/000000000/00000000/0000000/100000/40000/8000/300/148353/148353.strip.sunday.gif" alt="Dilbert" /></a></p>
<p>Se un produttore si ostina a farmi perdere tempo senza sistemare i problemi di cui è responsabile e, per salvarsi, tenta in qualche modo di farmi desistere dal chiedere la correzione (<em>es: sparando tempistiche a caso oppure eccessivamente lunghe</em>) o di rigettare in toto le mie richieste (<em>es: &#8220;lei è l&#8217;unico ad avere quel problema&#8221;</em>) o di circuirmi con parolacce tecniche usate a &#8216;mo di clava, smetto i panni della personcina mansueta e mi infervoro.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Non mi aspetto che i problemi vengano risolti in breve, semplicemente non tollero essere preso in giro.</em></td>
</tr>
</table>
<p></p>
<p>Un altro esempio di atteggiamento oscenamente intollerabile è costituito dai <strong>bug eterni</strong>, ossia quelli che sono conosciuti da anni, mai risolti, probabilmente <em>deprecati</em> non meno del software a cui si riferivano.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Un esempio tratto da uno dei <a href="https://forums.oracle.com/forums/thread.jspa?threadID=2216189">forum di discussione su Java</a> sul sito di Oracle:</p>
<blockquote><p>&#8220;You&#8217;d be surprised to know that some Java API (including Java2D &amp; Swing) bugs &amp; RFEs I have submitted 12 years ago have still not been fixed.</p>
<p>I doubt it&#8217;s Oracle&#8217;s fault, as much as it was Sun&#8217;s, probably a generic lack of people and resources to allocate to fixing small bugs coupled with a bad prioritization system which does not automatically increase the weight of a low-priority bug after it has spend some times/months/years in the bug-db.&#8221;</p></blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p><font size='+1' color='#005197'>Deontologia professionale cercasi</font></p>
<p>Settimana scorsa <a href="http://rejex.wordpress.com/2012/02/13/la-professione-dello-sviluppatore-di-gabriele-lana/">ho pubblicato il video</a> &#8220;<em>La professione dello sviluppatore</em>&#8221; in cui l&#8217;autore, <a href="http://www.gabrielelana.it/">Gabriele Lana</a>, parla del significato e del valore fondamentale dell&#8217;etica per un professionista serio, qualcosa che gli consenta di stagliarsi dalla massa della mediocrità e, possibilmente, permettergli di ottenere il giusto riconoscimento da chi è disposto ad investire su di lui.</p>
<p>Parla anche di assumersi le responsabilità, avendo ben chiaro che ogni bug che impedisce all&#8217;utente di sfruttare quello per cui ha pagato è tempo di vita ingiustamente sottrattogli.</p>
<p>Ecco, reagire ai bug non è soltanto levarsi di torno e in fretta gli utenti-rompiscatole, ma è soprattutto un buon modo per farsi valere in quanto professionisti dotati di una forte <strong>deontologia professionale</strong> agli occhi del cliente.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Non limitatevi a vendere un prodotto ad un cliente, ma pensate a comprare la sua fiducia offrendogli il miglior servizio che potete offrirgli. Fatelo ed in qualche modo sarete ricompensati</em></td>
</tr>
</table>
<p></p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/professionalita/'>Professionalità</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/bug/'>Bug</a>, <a href='http://rejex.wordpress.com/tag/bugfix/'>Bugfix</a>, <a href='http://rejex.wordpress.com/tag/deontologia-professionale/'>Deontologia professionale</a>, <a href='http://rejex.wordpress.com/tag/professionalita/'>Professionalità</a>, <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/12245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/12245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/12245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/12245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/12245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/12245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/12245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/12245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/12245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/12245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/12245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/12245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/12245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/12245/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12245&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/02/20/sui-bug-e-sui-tempi-di-reazione-ad-essi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2012/02/bug.jpg" medium="image">
			<media:title type="html">Bug</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://www.dilbert.com/dyn/str_strip/000000000/00000000/0000000/100000/40000/8000/300/148353/148353.strip.sunday.gif" medium="image">
			<media:title type="html">Dilbert</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2012/02/20/sui-bug-e-sui-tempi-di-reazione-ad-essi/</feedburner:origLink></item>
		<item>
		<title>“La professione dello sviluppatore” (di Gabriele Lana)…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/dqTgiLR_Kf0/</link>
		<comments>http://rejex.wordpress.com/2012/02/13/la-professione-dello-sviluppatore-di-gabriele-lana/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 06:25:09 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Mercato del lavoro]]></category>
		<category><![CDATA[Metodologia di sviluppo]]></category>
		<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=12248</guid>
		<description><![CDATA[Quando qualche giorno fa l&#8217;amico Emanuele Rampichini, in un commento ad un mio post precedente, mi ha indicato il seguente video, sono rimasto sparaflashato. Avevo in mente di scrivere e pubblicare un nuovo post e invece mi sono trovato a rivedere questo capolavoro (nessuna ironia nel dirlo) più e più volte, non smettendo di ridere [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12248&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rejex.wordpress.com/category/programmazione/"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100" alt="" width="100" /></a>Quando qualche giorno fa l&#8217;amico <a href="https://twitter.com/#!/emanuele_r">Emanuele Rampichini</a>, in un commento ad un <a href="http://rejex.wordpress.com/2012/01/30/io-informatico/">mio post precedente</a>, mi ha indicato il seguente video, sono rimasto <a href="http://it.wikipedia.org/wiki/Men_in_Black_(film)"><em>sparaflashato</em></a>.</p>
<p>Avevo in mente di scrivere e pubblicare un nuovo post e invece mi sono trovato a rivedere questo <em>capolavoro</em> (<em>nessuna ironia nel dirlo</em>) più e più volte, non smettendo di ridere e di pensare a quanta secolare saggezza trapeli da esso.</p>
<p>Finchè alla fine ho deciso, eccezione a <a href="http://rejex.wordpress.com/2010/08/23/sul-gestire-un-blog">quanto mi ero ripromesso</a> circa i contenuti di questo blog, di ripubblicarlo/condividerlo anche io.</p>
<div class='embed-vimeo' style='text-align:center;'><iframe src='http://player.vimeo.com/video/34981255' width='400' height='300' frameborder='0'></iframe></div>
<p>Non so davvero cosa aggiungere di più: tanto di cappello all&#8217;autore, <a href="http://www.gabrielelana.it/">Gabriele Lana</a>.</p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/informatica/'>Informatica</a>, <a href='http://rejex.wordpress.com/category/mercato-del-lavoro/'>Mercato del lavoro</a>, <a href='http://rejex.wordpress.com/category/metodologia-di-sviluppo/'>Metodologia di sviluppo</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/12248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/12248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/12248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/12248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/12248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/12248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/12248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/12248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/12248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/12248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/12248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/12248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/12248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/12248/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12248&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/02/13/la-professione-dello-sviluppatore-di-gabriele-lana/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>
	<feedburner:origLink>http://rejex.wordpress.com/2012/02/13/la-professione-dello-sviluppatore-di-gabriele-lana/</feedburner:origLink></item>
		<item>
		<title>Come scegliere su quali tecnologie puntare…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/1Y7a_I5C0k4/</link>
		<comments>http://rejex.wordpress.com/2012/02/07/come-scegliere-su-quali-tecnologie-puntare/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 06:25:54 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[Considerazioni personali]]></category>
		<category><![CDATA[Mercato]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Licenze]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[tablet e smartphone]]></category>
		<category><![CDATA[TCO]]></category>
		<category><![CDATA[Vendor lock-in]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=9378</guid>
		<description><![CDATA[Qualche giorno fa ho avuto modo di discutere con una conoscenza di porting di programmi desktop a web in Windows, restando su prodotti Microsoft per ragioni di retrocompatibilità. Per semplificare, il discorso si è ridotto a cosa usare fra Windows Presentation Foundation (WPF) opportunamente adattato, Silverlight oppure ASP/ASP MVC, con un browser che magari supporta [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=9378&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rejex.wordpress.com/category/programmazione/"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100" alt="" width="100" /></a>Qualche giorno fa ho avuto modo di discutere con una conoscenza di <em>porting</em> di programmi desktop a web in Windows, restando su prodotti Microsoft per ragioni di retrocompatibilità.</p>
<p>Per semplificare, il discorso si è ridotto a cosa usare fra <a href="http://it.wikipedia.org/wiki/Windows_Presentation_Foundation"><em>Windows Presentation Foundation</em></a> (<em>WPF</em>) opportunamente adattato, <a href="http://it.wikipedia.org/wiki/Silverlight"><em>Silverlight</em></a> oppure <a href="http://en.wikipedia.org/wiki/Asp.net"><em>ASP</em></a>/<a href="http://en.wikipedia.org/wiki/ASP.NET_MVC_Framework"><em>ASP MVC</em></a>, con un browser che magari supporta <a href="http://en.wikipedia.org/wiki/HTML_5"><em>HTML 5</em></a></em>. Questo per restare sulle tecnologie più blasonate e senza impelagarsi in altre scelte, meno note e probabilmente meno diffuse.</p>
<p>Si arriva dunque al problema: </p>
<blockquote><p><em>&#8220;Come valutare e scegliere fra più tecnologie prima di impiegarle?&#8221;</em></p></blockquote>
<p><span id="more-9378"></span></p>
<p><font size='+1' color='#005197'>Il mio decalogo per una scelta ponderata</font></p>
<p>Ecco dunque un insieme di punti, una sorta di decalogo degli aspetti che ritengo fondamentali in una comparazione e scelta fra più prodotti tecnologici. Ne esistono certamente altri, però questi sono quelli su cui generalmente baso le mie scelte.</p>
<p>Credo che la loro specifica importanza non sia costante per cui non li elenco secondo un ordine preciso e predeterminato: in certi progetti alcuni emergeranno indiscutibilmente come punti-chiave mentre in altri casi saranno relegati ad un ruolo marginale, trascurabile.</p>
<p>Applicherò poi ciascun punto al caso sopra menzionato, a titolo d&#8217;esempio.</p>
<p><font size='+1' color='#005197'>1. Diffusione e promozione</font></p>
<p>Salvo mercati di nicchia, magari con pochi vendor che si contendono il mercato, penso sia estremamente rischioso puntare su qualcosa di poco noto e diffuso.</p>
<p>Non fraintendetemi: non è detto che la mancanza di diffusione sia da imputarsi solamente ad una qualità medio-bassa dei programmi o al fatto che un produttore &#8211; e includo anche le comunità <a href="http://it.wikipedia.org/wiki/FOSS">FOSS</a>, non solo i vendor di software proprietario &#8211; sia relativamente piccolo e poco &#8220;potente&#8221; dal punto di vista del marketing.</p>
<p>Mi riferisco al fatto che spesso ho come l&#8217;impressione che certi programmi siano letteralmente <em>buttati</em> sul mercato in fretta e furia, per poi essere abbandonati alla loro sorte. È un po&#8217; l&#8217;atteggiamento di una certa parte del software FOSS, rilasciato &#8220;<em>as is</em>&#8221; e quindi senza garanzia alcuna: apprezzo l&#8217;impegno ed il &#8220;regalo&#8221; del software stesso &#8211; e del tempo e risorse impiegate per produrlo &#8211; ma regalare qualcosa di inusabile o non debitamente seguito è fare un regalo monco (<em>cfr. ad esempio <a href="http://rejex.wordpress.com/2010/07/05/il-codice-copiato-e-incollato-non-e-una-specifica/">questo vecchio post</a></em>).</p>
<p>Penso sia chiaro che esista una correlazione stretta fra &#8220;<em>seguire</em>&#8220;, supportare i prodotti rilasciati e la loro diffusione.</p>
<p>Nel caso specifico delle tecnologie Microsoft elencate, sono sostanzialmente tutte diffuse e relativamente affermate anche se, come vedremo nel prosieguo, non possono essere messe esattamente sullo stesso piano.</p>
<p><font size='+1' color='#005197'>2. Requisiti</font></p>
<p>Ognuno ha le sue esigenze, perfino i prodotti stessi (<em>es: dipendenze</em>).</p>
<p>Scrivere software significa dover pensare a come incastonarlo all&#8217;interno di un progetto e non sempre si ha uno spettro di opzioni completo. Spesso tocca scegliere qualcosa per adattarlo ad un contesto pre-esistente, alle esigenze particolari del committente, alle conoscenze attuali di chi effettuerà materialmente il lavoro e perfino alla filosofia e alla &#8220;storia tecnologica&#8221; dell&#8217;azienda, includendo nel novero anche eventuali accordi commerciali e privilegiati con altre aziende.</p>
<p>Fra i requisiti rientrano anche le funzionalità minime richieste e quelle opzionali: ciò che ci serve ora e ciò che potrebbe servirci in futuro.</p>
<p>Paradossalmente quando si hanno pochi requisiti stringenti la situazione tende a presentarsi come più rischiosa: il fatto di aver <em>carta bianca</em> nelle scelte tecnologiche significa sobbarcarsi più responsabilità e quindi assumersi più rischi.</p>
<p>Nel caso del problema citato ad inizio post, si parla di tecnologie già diffuse ma non del tutto note alla mia conoscenza per cui questi ha deciso di prendersi un po&#8217; di tempo, magari cercando informazioni di prima mano da chi effettivamente le ha già sperimentate. Non avere requisiti precisi e stringenti lo ha messo un po&#8217; in difficoltà e quindi non può che agire con estrema cautela.</p>
<p><font size='+1' color='#005197'>3. Preferenze, gusti e pigrizia</font></p>
<p>Che lo si voglia o meno, preferenze e gusti personali hanno un impatto notevole nelle decisioni, tanto da rientrare fra i requisiti, spesso opportunamente mascherati ed occultati come <em>dati di fatto</em>.</p>
<p>Normalmente le tecnologie già note e sperimentate con successo tendono a qualificarsi sempre come punti di partenza impliciti, tanto per i programmatori quanto per i clienti che in passato &#8220;<em>si sono trovati bene con questo e quello</em>&#8220;. </p>
<p>Di solito si tratta di un bene &#8211; <em>&#8220;chi lascia la strada vecchia per la nuova&#8230;&#8221;</em> -, ma il rischio di voler <em>&#8220;far fare la pizza&#8221;</em> a qualcosa che non è progettato per farla è sempre presente. Medesimo discorso per gli effetti negativi dovuti alla <a href="http://rejex.wordpress.com/2010/09/27/pigrizia-professionalita-programmazione/">pigrizia</a> o indolenza nel dover imparare qualcosa di nuovo.</p>
<p>Nel caso specifico, la conoscenza già utilizza ed apprezza il C#, per cui opterebbe per mantenersi su qualcosa che non gli imponga di &#8220;spostarsi&#8221; troppo dal framework .Net. Le tre tecnologie citate si appoggiano e sfruttano tutte il framework ma non solo: che si tratti di Javascript, HTML, XML, XAML o altro ancora, spostare sul web dei prodotti basati sulle <em>Windows Forms</em> non è esattamente un gioco da ragazzi, per cui la preferenza ricadrà in qualche modo sulla soluzione che renderà la transizione meno dolorosa in termini di tempo ed energie impiegate.</p>
<p><font size='+1' color='#005197'>4. <em>ROI</em> e <em>Know How</em> previsti</font></p>
<p>Il &#8220;<em>ritorno dell&#8217;investimento</em>&#8221; o <em><a href="http://it.wikipedia.org/wiki/Return_on_investment">ROI</a></em>, in questo caso ha duplice natura, in senso cioè esplicito ed implicito. Quello esplicito, direi tradizionale, è legato ai guadagni scaturiti dai prodotti rilasciati in relazione ai costi affrontati, mentre quello implicito è legato alle conoscenze (<em>know how</em>) accumulate in fase realizzativa da parte del programmatore.</p>
<p>Buttarsi su una tecnologia <em>nata vecchia</em> o non molto diffusa o non debitamente seguita e &#8220;<em>spinta</em>&#8221; sul mercato dal suo produttore, magari garantisce comunque un ritorno sul breve/medio periodo ma non su quello lungo: si ha già in qualche modo la certezza di dover rivedere le scelte di lì a poco tempo. Ciò può produrre un impatto negativo sull&#8217;economia aziendale e sulle strategie commerciali presenti e future.</p>
<p>Lo stesso discorso si applica all&#8217;esecutore materiale, ossia al programmatore: il gioco-sforzo intellettuale dell&#8217;imparare deve valere la famosa candela e, possibilmente, i frutti devono continuare nel tempo.</p>
<p>Altrimenti il tutto si riduce all&#8217;equivalente di una partita a <em>guardie e ladri</em> fra chi continua a sfornare nuove tecnologie &#8211; magari dimenticandosi in fretta di quelle precedenti e già obsolescenti &#8211; e chi poi deve impararle e sfruttarle per poco tempo, fino all&#8217;iterazione successiva del gioco.</p>
<p>Nel caso dell&#8217;esempio, si tratta comunque di tecnologie diffuse ed il <em>know how</em> ottenibile imparandole ed usandole rappresenta comunque un buon investimento per il programmatore, a patto di mantenersi aggiornati vista la rapidità di evoluzione che le contraddistingue. Usarle rappresenta cioè qualcosa di richiesto e quindi di spendibile sul mercato: ottime voci nel <em>curricum vitae</em>.</p>
<p><font size='+1' color='#005197'>5. Curva di apprendimento</font></p>
<p>È notevole osservare come il ciclo di vita di molte tecnologie spesso si dimostra nella pratica assai breve se comparata al periodo medio richiesto per la loro diffusione, incluso quello di apprendimento. Cioè se serve un annetto prima che qualcosa emerga e si diffonda, nel tempo che ciò avviene, spesso sul mercato si sta già parlando o sta per essere rilasciata la versione successiva, talvolta incompatibile con la versione precedente.</p>
<p>Personalmente detesto chi mi impone di continuare <em>a inseguire</em>, nonostante gli sforzi quotidiani per mantenermi al passo con i tempi e con lo stato dell&#8217;arte.</p>
<p>Per capirci, il C# 3 rispetto al 2 è un altro linguaggio, fortunatamente molto migliorato, ma con uno stile di programmazione nuovo ed in qualche modo insolito per il programmatore C# &#8220;medio&#8221;: abituato alla programmazione strutturata/imperativa ed <em>OOP</em>, ora ha a disposizione <strong>anche</strong> <em>feature</em> dei linguaggi funzionali che pian pianino stanno diventando lo stile di programmazione <em>standard</em> e <em>moderno</em>. E ancora, nel mentre le persone hanno iniziato a sfruttare debitamente il 3 è già uscito il 4 e si parla già del 5.</p>
<p>Apprezzo molto quando un&#8217;azienda sforna prodotti a raffica interessanti  &#8211; per far felici primariamente gli azionisti, credo -, ma apprezzo di meno quando non mi riesce di imparare ad applicare qualcosa di nuovo e ormai diventato basilare prima che esca la successiva.</p>
<p><a href="http://en.wikipedia.org/wiki/Learning_curve"><img class="alignleft" style="border:0 none;margin:5px;" title="learning curve" src="http://rejex.files.wordpress.com/2012/02/learning-curve.jpg?w=200" alt="learning curve" width="200" /></a>Sfortunatamente pare che l&#8217;unico modo per mantenersi veramente aggiornati è comportarsi da <a href="http://it.wikipedia.org/wiki/Early_adopter"><em>early adopter</em></a> seriali: appena esce sul mercato qualcosa di nuovo, pare sia necessario iniziare ad usarla fin da subito, con tutti i rischi del caso. A fronte del rischio di imparare qualcosa che diventa rapidamente inutile, questo atteggiamento ha generalmente il pregio di mantenere controllabile la <a href="http://it.wikipedia.org/wiki/Curva_di_apprendimento"><em>curva di apprendimento</em></a>: tecnologie &#8220;facili e intuitive&#8221; possono richiedere molto tempo se si lascia passare troppe versioni, mentre tecnologie relativamente complesse sono generalmente più alla portata se si cerca di tener traccia della loro evoluzione, <em>release</em> dopo </em>release</em>.</p>
<p>Non ho citato il C# per caso: le continue novità non hanno impatto solo sul linguaggio in sè ma anche sulle tecnologie correlate, come ASP e Silverlight stessi. Ad esempio aggiornare un progetto da una <em>release</em> all&#8217;altra dell&#8217;ambiente di sviluppo non sempre è una passeggiata.</p>
<p>Questo per dire che non basta trovare e scegliere una tecnologia per completare in fretta un <em>porting</em> come quello dell&#8217;esempio, c&#8217;è molto altro da considerare.</p>
<p><font size='+1' color='#005197'>6. Passato: comportamento del <em>vendor</em></font></p>
<p>Questo è un punto che sistematicamente non viene mai abbastanza debitamente affrontato ma è estremamente importante. Premesso che la storia di un&#8217;azienda, come tutto del resto, è fatta di alti e bassi, talvolta vale la pena riflettere sul comportamento commerciale/tecnologico di un vendor: continua a cambiare tecnologie, impedendoci di pianificare su un periodo medio-lungo (3-5 anni), oppure innova ma mantenendo aggiornate tecnologie anche vecchie?</p>
<p>Che poi, paradossalmente, &#8220;vecchio&#8221; nel mondo della tecnologia non significa un bel nulla. Altrimenti non si spiegherebbe perchè lo standard C continui a supportare <em>comportamenti</em> strani, scorretti e inconsistenti tipici di quando è nato &#8211; ossia nei primi anni &#8217;70 &#8211; od il perchè del prolungato supporto a Windows XP, il cui termine ultimo è stato progressivamente posposto all&#8217;8 Aprile 2014. Questo perchè quando qualcosa viene immesso sul mercato e qualcuno lo usa, non importa se nel frattempo verrà indicato come obsoleto e deprecato, qualcuno continuerà ad usarlo all&#8217;infinito: &#8220;<em>deprecato</em>&#8221; è solo un suggerimento.</p>
<p>Il supporto al &#8220;passato&#8221; di un&#8217;azienda può impedirle di innovare &#8220;con le mani libere&#8221; ma nel contempo può garantirle ancora dei guadagni. Eppure ci sono aziende, vedi talvolta Apple, che quando lo ritengono opportuno, fanno tabula rasa del passato o predispongono un periodo di transizione limitato e non estendibile.</p>
<p>Nell&#8217;esempio all&#8217;inizio del post, Microsoft ha sempre garantito un supporto alle sue tecnologie del passato (<em>vedi MFC aggiornato nelle varie versioni di Visual Studio</em>) per cui il problema è in qualche modo contenuto. O almeno lo si può ragionevolmente sperare.</p>
<p><font size='+1' color='#005197'>7. Presente: standard, compatibilità, frammentazione del mercato e rilevanza del vendor</font></p>
<p>Nonostante ogni <em>vendor</em> tenda a fare storia a sè, nel mercato esistono standard. Spesso l&#8217;aderenza di un prodotto ad uno o più <em>standard</em> appare più come uno specchietto delle allodole che non una garanzia concreta di interoperabilità (<em>cioè non è così raro avere a che fare con implementazioni incompatibili di uno stesso standard</em>), però la loro presenza è indubbiamente una cosa buona.</p>
<p>Generalmente <a href="http://rejex.wordpress.com/2010/03/22/il-valore-ed-il-significato-degli-standard-per-uno-sviluppatore/">la penso come Torvalds</a>:</p>
<blockquote><p><em>Standards are just papers. Yes, they’re important, but they are definitely not more important than anything else, and they are a lot _less_ important than some people seem to think.</em></p></blockquote>
<p>Nel caso dell&#8217;esempio, i prodotti Silverlight non sono multipiattaforma come il codice HTML/Javascript prodotto in ASP.NET. WPF, non ne parliamo. In questo caso non mi riferisco all&#8217;ambiente di sviluppo, ma ai prodotti finiti. Silverlight è come Flash di Adobe: senza un plugin apposito, non va.</p>
<p>Poi si può discutere dei pro e dei contro (<em>es: si ha o meno la certezza che i clienti usino solo Windows</em>), ma credo non sia consigliabile sviluppare qualcosa per essere sfruttato via web con la stessa mentalità che si applica per dei prodotti desktop. O puntando ad una conversione totalmente indolore.</p>
<p><font size='+1' color='#005197'>8. Futuro: notizie, <em>rumors</em> e altro</font></p>
<p>Si sa quando si comincia ad imparare, non quando si potrà smettere di farlo. In certe situazioni l&#8217;unica soluzione possibile è quella &#8220;brutta e sporca ma funzionante&#8221; per cui salta a priori qualunque tipo di analisi. Tuttavia, potendolo fare, ha senso scegliere e puntare su qualcosa che abbia un futuro.</p>
<p>Per cui è importante informarsi ed analizzare le informazioni che circolano, rumors inclusi. Ad esempio, leggere post come &#8220;<em><a href="http://www.i-programmer.info/news/89-net/1266-wpf-a-silverlight-at-risk-from-microsofts-passion-for-html5.html">WPF &amp; Silverlight at risk from Microsoft&#8217;s passion for HTML5</a></em>&#8221; può inquietare, soprattutto quando si dice che:</p>
<blockquote><p><em>&#8220;A Twitter exchange with former Silverlight Product Manager Scott Barnes reported by <a href="http://www.theregister.co.uk/2010/09/09/microsoft_html_5/">The Register</a> makes the following claims.</p>
<p>There is in-fighting between Microsoft&#8217;s Developer and Windows teams about the future of WPF, Silverlight and HTML5 as embodied in IE 9.&#8221;</em></p></blockquote>
<p>Questo è un esempio di cosa intendo per <em>rumor</em> da prendere in considerazione <strong>prima</strong> di scegliere. Verificata l&#8217;attendibilità del rumor, lascio a voi tutte le considerazioni del caso.</p>
<p><font size='+1' color='#005197'>9. Licenze, assistenza e TCO</font></p>
<p>Non voglio discutere e riaprire la solita discussione fra software FOSS e software chiuso/commerciale. Penso sia comunque ineccepibile che deve sussistere una relazione stretta fra costi e ritorno economico. Cioè non ha senso spendere dei soldi senza la certezza di rivederli indietro prima o poi, possibilmente con un certo margine.</p>
<p>Vorrei anche permettermi di far notare un fatto che ho imparato nel corso del tempo: il software può costare davvero poco o niente, ma i tecnici che devono seguirli comportano dei costi. Se una persona impiega un mese a rendersi produttiva su una data tecnologia, poco o tanto costosa che sia, quel mese non è stato produttivo in senso stretto ma lo sarà potenzialmente solo il mese dopo.</p>
<p>Rientriamo nuovamente nel discorso sulla curva di apprendimento, arricchendolo però del valore e dei costi di sviluppo, supporto ed assistenza, mantenimento, eccetera. In senso lato si parla di <a href="http://en.wikipedia.org/wiki/Total_cost_of_ownership"><em>Total Cost of Ownership</em></a> (<em>TCO</em>).</p>
<p>Tornando all&#8217;esempio è indubbio che Microsoft segua tutte quelle tecnologie ma a chi va la sua preferenza, quale è documentata meglio, quale impone costi espliciti ed impliciti minori?</p>
<p><font size='+1' color='#005197'>10. Chiusura della piattaforma e restrizioni</font></p>
<p>Questo è un aspetto che reputo fondamentale. Salvo casi eccezionali, ad esempio nel caso di requisiti estremamente retrittivi, è sempre bene puntare a qualcosa che non imponga a noi stessi delle restrizioni.</p>
<p>Detesto i <em><a href="http://en.wikipedia.org/wiki/Vendor_lock-in">vendor lock-in</a></em> (<em>cfr. <a href="http://rejex.wordpress.com/2011/06/13/sui-vendor-lock-in-antipattern/">vecchio post</a></em>), cioè quell&#8217;insieme di pratiche commerciali e tecnologiche messe in piedi dai vari produttori per &#8220;<em>intrappolare</em>&#8221; i cliente, in modo che ben presto questi ultimi non abbiano alternative se non continuare a rifornirsi dai primi.</p>
<p>Qui non parliamo di &#8220;brand vincente&#8221; o marketing particolarmente efficace, parliamo del fatto che man mano che ci si rifornisce da un solo fornitore per i suoi prodotti, poi si finisce legati ad esso mani e gambe. </p>
<p>La cosa curiosa è che spesso i <em>lock-in</em> sono subdoli: un prodotto potrebbe dichiararsi compatibili con mille standard salvo poi risultare un prodotto a sè stante, totalmente proprietario e volutamente incompatibile col resto del mondo.</p>
<p>Mi spiego meglio: ASP.Net produce codice HTML/Javascript e funziona tranquillamente e <em>automagicamente</em> anche sui <em>gadget</em> dei momento, smartphone e tablet, ma Silverlight e WPF?</p>
<p><font size='+1' color='#005197'>Conclusioni</font></p>
<p>Con questo post spero di aver chiarito bene un punto: nel mondo della tecnologia, quella che garantisce a molti di noi la pagnotta a fine mese e che si rinnova ogni pochi mesi, è importante analizzare le opzioni sono tutti i punti di vista, compararle e scegliere solo se pienamente convinti o se non ci sono altre alternative praticabili.</p>
<p>E gli aspetti da valutare non sono affatto pochi.</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/c-sharp/'>C Sharp</a>, <a href='http://rejex.wordpress.com/category/considerazioni-personali/'>Considerazioni personali</a>, <a href='http://rejex.wordpress.com/category/mercato/'>Mercato</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/asp-net/'>ASP.NET</a>, <a href='http://rejex.wordpress.com/tag/c-sharp/'>C Sharp</a>, <a href='http://rejex.wordpress.com/tag/html/'>HTML</a>, <a href='http://rejex.wordpress.com/tag/javascript/'>Javascript</a>, <a href='http://rejex.wordpress.com/tag/licenze/'>Licenze</a>, <a href='http://rejex.wordpress.com/tag/mercato/'>Mercato</a>, <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a>, <a href='http://rejex.wordpress.com/tag/silverlight/'>Silverlight</a>, <a href='http://rejex.wordpress.com/tag/tablet-e-smartphone/'>tablet e smartphone</a>, <a href='http://rejex.wordpress.com/tag/tco/'>TCO</a>, <a href='http://rejex.wordpress.com/tag/vendor-lock-in/'>Vendor lock-in</a>, <a href='http://rejex.wordpress.com/tag/wpf/'>WPF</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/9378/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/9378/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/9378/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/9378/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/9378/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/9378/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/9378/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/9378/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/9378/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/9378/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/9378/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/9378/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/9378/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/9378/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=9378&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/02/07/come-scegliere-su-quali-tecnologie-puntare/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2012/02/learning-curve.jpg" medium="image">
			<media:title type="html">learning curve</media:title>
		</media:content>
	<feedburner:origLink>http://rejex.wordpress.com/2012/02/07/come-scegliere-su-quali-tecnologie-puntare/</feedburner:origLink></item>
		<item>
		<title>Sulla fiducia fra componenti in cascata…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/p3VrKeACJ7Q/</link>
		<comments>http://rejex.wordpress.com/2012/02/06/sulla-fiducia-fra-componenti-in-cascata/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 06:25:03 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Antipattern]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[Componenti]]></category>
		<category><![CDATA[Qmail]]></category>
		<category><![CDATA[Trust none]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=12182</guid>
		<description><![CDATA[Qualche giorno fa gli amici JustB e Recenso hanno chiesto il mio parere &#8211; ed invocato un mio post &#8211; su un disguido che è capitato alla ragazza del primo, l&#8217;amica Piska. &#8220;Ho capito perché gli incapaci non riescono a consegnare il pacco: fanno affidamento ad un servizio informativo orrendo. In pratica ecco cosa è [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12182&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Qualche giorno fa gli amici <a href="http://jubstuff.blogspot.com/"><em>JustB</em></a> e <a href="http://www.recensioniagogo.com/"><em>Recenso</em></a></em> hanno chiesto il mio parere &#8211; ed invocato un mio post &#8211; su un disguido che è capitato alla ragazza del primo, l&#8217;amica <a href="http://piskablog.wordpress.com/"><em>Piska</em></a>.</p>
<blockquote><p><em>&#8220;Ho capito perché gli incapaci non riescono a consegnare il pacco: fanno affidamento ad un servizio informativo orrendo. In pratica ecco cosa è successo. L&#8217;indirizzo di Piska è lungo 36 caratteri (comprensivi di virgola e numero civico a due cifre). Il corriere ci ha comunicato che a loro è arrivata la bolla con solo i primi 30 caratteri dell&#8217;indirizzo da me scritto, risultando quindi incompleto. </p>
<p>Dunque da qualche parte nel software l&#8217;indirizzo viene tagliato a 30 caratteri senza tanti complimenti e mandato al corriere&#8230;&#8230;bella schifezza. [...]&#8220;</em></p></blockquote>
<p>Vale la pena analizzare questa situazione perchè ricorrente e ubiqua: per me è un <em><a href="http://en.wikipedia.org/wiki/Antipattern">antipattern</a></em> vero e proprio.</p>
<p><span id="more-12182"></span></p>
<p><font size='+1' color='#005197'>Il flusso di elaborazione dei dati</font></p>
<p><a href="http://rejex.wordpress.com/tag/programmazione/"><img class="alignleft wp-image-8676" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100&h=100" alt="" width="100" height="100" /></a>Non so esattamente come sia andata, ma a occhio direi che nel caso di Piska si sia verificato un problema nella fase fra la compilazione cartacea dei dati di viaggio e la successiva immissione nel sistema, di norma effettuato dal personale specializzato che segue questo genere di mansione. Cioè i 36 caratteri scritti su un foglio sono poi stati &#8220;riversati&#8221; e gestiti erroneamente nel sistema automatizzato, che limitava quel numero a 30. </p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Nello spazio fra il desiderio dell&#8217;utente e la sua realizzazione può succedere di tutto.</em></td>
</tr>
</table>
<p></p>
<p>Partiamo dall&#8217;inserimento nel sistema, solitamente qualcosa come una <em>form web</em>, collocato nel <em>frontend</em>. Ad esempio, può capitare che essa:</p>
<ul>
<li>non controlli il numero di caratteri e permetta di inserirne a volontà;</li>
<li>li controlli ma permetta all&#8217;utente di forzarne comunque l&#8217;inserimento;</li>
<li>li controlli solo nel momento dell&#8217;inserimento effettivo nel sistema, troncandoli automaticamente ed in modo silente.</li>
</ul>
<p>Ora ripetiamo lo stesso discorso per ciascuno dei componenti attraversati nel flusso di elaborazione dei dati: pressochè tutti i sistemi di una certa complessità sono pensati e modellati in questo modo.</p>
<p>Per ragioni di comodità, pigrizia o chissà che altro, generalmente ogni componente tende a &#8220;fidarsi&#8221; del componente immediatamente precedente nella catena. Dopotutto:</p>
<blockquote><p><em>&#8220;&#8230; perchè ripetere sempre gli stessi controlli in ogni componente attraversato dal flusso dell&#8217;elaborazione?&#8221;</em></p></blockquote>
<p><a href="http://it.wikipedia.org/wiki/Modello_black_box"><img class="alignleft" style="border:0 none;margin:5px;" title="modello black box" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Blackbox.svg/320px-Blackbox.svg.png" alt="" width="300" /></a>Il problema è che ogni componente è una sorta di <a href="http://it.wikipedia.org/wiki/Modello_black_box"><em>scatola nera</em></a> rispetto a chi lo segue nella sequenza: come può un componente, diciamo alla fine di una catena, sapere che qualcuno prima di lui &#8220;si è mangiato&#8221; dei caratteri?</p>
<p>Ogni violazione della <em>catena di responsabilità</em> (<a href="http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern"><em>Chain-Of-Responsibility pattern</em></a>) dovrebbe provocare l&#8217;immediata interruzione dell&#8217;elaborazione con relativa segnalazione dell&#8217;errore all&#8217;utente. In sostanza si dovrebbe ottenere una transazione di tipo <em>atomico</em>: o tutto funziona o l&#8217;ordine viene rifiutato in blocco.</p>
<p>Tuttavia, cosa succede se chi deve controllare non trova l&#8217;errore? Cosa succede se, come spesso accade, è il solo <em>frontend</em> ad effettuare controlli, a rappresentare il primo e più importante <em>fronte di sicurezza</em> di un sistema?</p>
<p>Beh, gli effetti sono noti: spesso si ha notizia di siti &#8220;bucati&#8221;, ad esempio tramite <a href="http://it.wikipedia.org/wiki/Cross-site_scripting"><em>Cross-site scripting</em></a> (<em>XSS</em>), che espongono dati sensibili e componenti critici del sistema, che dovrebbero rimanere nascosti e proteti nel <em>backend</em>, alla mercè dell&#8217;attaccante.</p>
<p>Nel caso di Piska, sarei propenso a credere che qualcosa nel <em>frontend</em> abbia troncato l&#8217;indirizzo da 36 a 30 caratteri, <strong>automaticamente ed in modo silente</strong> (<em>orrore!</em>), prima della registrazione nel DB. Questo perchè di solito i DBMS sono estremamente pignoli nel rifiutare <em>in toto</em> un inserimento, nel caso di una violazione sulla dimensione massima di un campo.</p>
<p>O almeno questa è una mia supposizione, frutto dell&#8217;esperienza come sviluppatore web specializzato nel <em>backend</em>.</p>
<p><font size='+1' color='#005197'><em>Trust no one!</em></font></p>
<p>Ricordo il giorno in cui, quasi un decennio fa, l&#8217;amico Cubo mi accennò per la prima volta a <em>Qmail</em>, celeberrimo server sicuro di posta elettronica ideato da <a href="http://en.wikipedia.org/wiki/Djb">Daniel J. Bernstein</a>, noto anche con le iniziali <em>DJB</em>.</p>
<p>Particolarità di questo software, pensato per sistemi operativi UNIX e UNIX-like, è l&#8217;aspetto della sicurezza. Da <a href="http://en.wikipedia.org/wiki/Qmail#Security">Wikipedia</a>:</p>
<blockquote><p><em><a href="http://binarios.com/lnb/qmail.html"><img class="alignleft" style="border:0 none;margin:5px;" title="qmail flow" src="http://rejex.files.wordpress.com/2012/02/qmail-flow.png?w=450" alt="" width="450" /></a>In contrast to sendmail, <strong>qmail has a modular architecture composed of mutually untrusting components</strong>; for instance, the SMTP listener component of qmail runs with different credentials than the queue manager, or the SMTP sender. qmail was also implemented with a security-aware replacement to the C standard library, and as a result has not been vulnerable to stack and heap overflows, format string attacks, or temporary file race conditions.</em></p></blockquote>
<p>Questo il punto: ogni componente non si fida degli altri e applica tutti i controlli possibili per individuare problemi nei dati.</p>
<p>L&#8217;obiezione canonica a questo approccio, che definirei vagamente <em>paranoide</em>, di solito riguarda le prestazioni:</p>
<blockquote><p><em>&#8230;ma se nessuno si fida dell&#8217;altro, allora l&#8217;intero sistema sarà rallentanto dai continui, ripetuti ed estenuanti controlli!</em></p></blockquote>
<p>Invece no: </p>
<blockquote><p><em>When it was released, qmail was significantly faster than Sendmail, particularly for bulk mail tasks such as mailing list servers. qmail was originally designed as a way for managing large mailing lists</em></p></blockquote>
<p>Tanto per cominciare non serve effettuare tutti i controlli possibili, anche quelli chiaramente superflui (<em>cfr. <a href="http://rejex.wordpress.com/2010/06/09/chi-controlla-i-controlli-nel-codice/">vecchio post</a></em>), ma agire in modo che i componenti possano fidarsi. E prima ancora che i componenti possa fidarsi, è il programmatore che deve fidarsi degli strumenti: Bernstein ha iniziato buttando e riscrivendo <a href="http://cr.yp.to/qmail/guarantee.html">quello di cui lui stesso</a>, in qualità di programmatore, non si fidava:</p>
<blockquote><p><em><strong>Write bug-free code.</strong></p>
<p>I&#8217;ve mostly given up on the standard C library. Many of its facilities, particularly stdio, seem designed to encourage bugs. A big chunk of qmail is stolen from a basic C library that I&#8217;ve been developing for several years for a variety of applications. The stralloc concept and getln() make it very easy to avoid buffer overruns, memory leaks, and artificial line length limits.</em></p></blockquote>
<p>Il passo dopo è evitare di ripetere e ripetere il lavoro, convertendo i dati da un formato interno all&#8217;altro: capita spesso che ogni componente, specialmente quando c&#8217;è di mezzo del <a href="http://it.wikipedia.org/wiki/Middleware"><em>middleware</em></a> proprietario, necessiti di convertire i dati in un qualche formato o struttura interna particolare. Se tutti i componenti invece usano la stessa rappresentazione dei dati, senza continue conversioni, senza continui controlli, ecco che le prestazioni aumentano, così pure il livello di sicurezza dell&#8217;intero sistema.</p>
<p>Come direbbe Bernstein:</p>
<blockquote><p><em><strong>Don&#8217;t parse.</strong></p>
<p>I have discovered that there are two types of command interfaces in the world of computing: good interfaces and user interfaces.</p>
<p>The essence of user interfaces is parsing: converting an unstructured sequence of commands, in a format usually determined more by psychology than by solid engineering, into structured data.</p>
<p>When another programmer wants to talk to a user interface, he has to quote: convert his structured data into an unstructured sequence of commands that the parser will, he hopes, convert back into the original structured data.</p>
<p>This situation is a recipe for disaster. The parser often has bugs: it fails to handle some inputs according to the documented interface. The quoter often has bugs: it produces outputs that do not have the right meaning. Only on rare joyous occasions does it happen that the parser and the quoter both misinterpret the interface in the same way.</p>
<p>When the original data is controlled by a malicious user, many of these bugs translate into security holes. Some examples: the Linux login -froot security hole; the classic find | xargs rm security hole; the Majordomo injection security hole. Even a simple parser like getopt is complicated enough for people to screw up the quoting.</p>
<p>In qmail, all the internal file structures are incredibly simple: text0 lines beginning with single-character commands. (text0 format means that lines are separated by a 0 byte instead of line feed.) The program-level interfaces don&#8217;t take options.</em></p></blockquote>
<p>Ovviamente poi DJB cita il <a href="http://en.wikipedia.org/wiki/KISS_principle"><em>principio KISS</em></a>, <em>&#8220;Keep It Simple, Stupid&#8221;</em>: più le cose sono semplici, più sono facili da comprendere, verificare e manutenere. <em><a href="http://it.wikipedia.org/wiki/Rasoio_di_Occam">Occam</a></em> docet.</em></p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/antipattern/'>Antipattern</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a>, <a href='http://rejex.wordpress.com/category/software-engineering/'>software engineering</a> Tagged: <a href='http://rejex.wordpress.com/tag/antipattern/'>Antipattern</a>, <a href='http://rejex.wordpress.com/tag/componenti/'>Componenti</a>, <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a>, <a href='http://rejex.wordpress.com/tag/qmail/'>Qmail</a>, <a href='http://rejex.wordpress.com/tag/software-engineering/'>software engineering</a>, <a href='http://rejex.wordpress.com/tag/trust-none/'>Trust none</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/12182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/12182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/12182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/12182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/12182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/12182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/12182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/12182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/12182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/12182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/12182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/12182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/12182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/12182/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12182&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/02/06/sulla-fiducia-fra-componenti-in-cascata/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Blackbox.svg/320px-Blackbox.svg.png" medium="image">
			<media:title type="html">modello black box</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2012/02/qmail-flow.png" medium="image">
			<media:title type="html">qmail flow</media:title>
		</media:content>
	<feedburner:origLink>http://rejex.wordpress.com/2012/02/06/sulla-fiducia-fra-componenti-in-cascata/</feedburner:origLink></item>
		<item>
		<title>Io, informatico…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/UxAz8d5jx5o/</link>
		<comments>http://rejex.wordpress.com/2012/01/30/io-informatico/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 06:25:25 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Ironia]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=11967</guid>
		<description><![CDATA[Io sono un informatico e queste sono alcune riflessioni in ordine sparso sull&#8217;esserlo. Anzi, parafrasando The Mentor, potrei dire che questo è una sorta di manifesto. Ovviamente l&#8217;intento del post è ironico&#8230; Hollywood? No, davvero Non sono una una macchina nè permetterò mai che una di esse mi renda un suo schiavo: paragonarmi ad un [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11967&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rejex.wordpress.com/category/programmazione/"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100" alt="" width="100" /></a>Io sono un informatico e queste sono alcune riflessioni in ordine sparso sull&#8217;esserlo. Anzi, parafrasando <a href="http://it.wikipedia.org/wiki/Loyd_Blankenship"><em>The Mentor</em></a>, potrei dire che questo è una sorta di manifesto. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Ovviamente l&#8217;intento del post è ironico&#8230;</em></td>
</tr>
</table>
<p></p>
<p><span id="more-11967"></span></p>
<p><font size='+1' color='#005197'>Hollywood? No, davvero</font></p>
<p><a href="http://en.wikipedia.org/wiki/The_Matrix"><img width="100" border="0" src="http://upload.wikimedia.org/wikipedia/en/c/c1/The_Matrix_Poster.jpg" class="alignleft" alt="Matrix" /></a>Non sono una una macchina nè permetterò mai che una di esse mi renda un suo schiavo: paragonarmi ad un computer o preannunciarmi che prima o poi mi trasformerò in esso &#8220;<em>se continuo così</em>&#8221; è ridicolo. Idem lanciarsi in improponibili previsioni in merito, anche se Hollywood la pensa ben diversamente sul filone uomo-macchina (<em>cfr. <a href="http://it.wikipedia.org/wiki/Matrix">Matrix</a>, <a href="http://it.wikipedia.org/wiki/Terminator">Terminator</a></em>).</p>
<p>Io sono un informatico e, per la gizilionesima volta, l&#8217;informatica non coincide affatto e solamente col progettare ed usare computer:</p>
<blockquote><p><em>&#8220;What would we like our children &#8211; the general public of the future — to learn about computer science in schools? <strong>We need to do away with the myth that computer science is about computers</strong>. Computer science is no more about computers than astronomy is about telescopes, biology is about microscopes or chemistry is about beakers and test tubes. Science is not about tools, it is about how we use them and what we find out when we do.&#8221; (M. R. Fellows e I. Parberry, poi ripresa da Edsger W. Dijkstra)</em></p></blockquote>
<p><a href="http://en.wikipedia.org/wiki/Independence_day_film"><img width="100" border="0" src="http://upload.wikimedia.org/wikipedia/en/thumb/b/bb/Independence_day_movieposter.jpg/220px-Independence_day_movieposter.jpg" class="alignleft" alt="Matrix" /></a>Aggiustare un computer è un effetto collaterale del conoscere quello strumento, non lo scopo dell&#8217;esistenza professionale di un informatico e, probabilmente, neppure quella di un tecnico dell&#8217;assistenza IT. Il fatto che io sappia &#8220;<em>usare un computer</em>&#8221; non implica che debba (<em>ri</em>)conoscere istantaneamente qualunque sistema elettronico. Nè che lo sappia usare od aggiustare con la stessa disinvoltura di un protagonista di un film d&#8217;azione, che utilizza qualunque arma gli capiti a tiro, incluse quelle aliene (<em>cfr. <a href="http://it.wikipedia.org/wiki/Independence_Day_(film)">Independence Day</a></em>).</p>
<p>Non sono un &#8220;(piccolo) mago del computer&#8221; perchè di magia non ce n&#8217;è. Di nuovo, semplicemente conosco gli strumenti scientifici e tecnologici del mestiere e ne ho fatto una professione:</p>
<blockquote><p><em>&#8220;Any sufficiently advanced technology is indistinguishable from magic.&#8221; (<a href="http://en.wikipedia.org/wiki/Clarke%27s_three_laws">Tre leggi di Clarke</a>)</em></p></blockquote>
<p>Analogamente, nonostante le perssime abitudini umane ad antropomorfizzare ogni cosa (<em>cfr. pallone Wilson in <a href="http://it.wikipedia.org/wiki/Cast_Away">Cast Away</a></em>), i PC sono essenzialmente oggetti, entitità inorganiche, non viventi e non sperimentano sensazioni e sentimenti. Quindi non odiano gli incauti padroni, nonostante i guai che questi ultimi possono provocare. Al massimo siamo noi informatici a non raccapezzarci dei danni da sistemare in seguito a qualche &#8220;<em>Incontro ravvicinato</em>&#8221; utente-macchina e a sperimentare biechi sentimenti di vendetta nei riguardi dei bipedi-carnefici.</p>
<p><font size='+1' color='#005197'>Questione di etichette&#8230;</font></p>
<p><img src="http://i275.photobucket.com/albums/jj308/rejectedx/geek_inside.jpg" alt="" width="100" class="alignleft" />Quanto ai modi per definirci, <em>geek</em> e <em>nerd</em>, ormai &#8220;mainstream&#8221; come termini, non sono sinonimi di informatico, anche se esiste una certa correlazione causale fra queste etichette. Se anche mi riconoscessi in esse, nell&#8217;accezione negativa intendo, non chiederei comunque la solidarietà o la commiserazione del prossimo: non sono un cucciolo di cane maltrattato dalla società nè un Quasimodo rinchiuso in una torre di una cattedrale virtuale.</p>
<p>Non sono più fissato di molte altre persone che parlano ossessivamente dei loro problemi, delle loro fortune, delle loro famiglie, dei loro hobby ed interessi. Anzi, non mi capacito proprio del perchè parlare senza sosta di argomenti come la famigerata combo donne-calcio-motori sia considerato &#8220;normale&#8221;, mentre interessarsi di computer sia considerato innaturale, anche se magari non ne si parla mai in pubblico.</p>
<p><a href="http://dilbert.com/strips/comic/1998-07-03/"><img width="400" class="alignleft" src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/10000/2000/800/12805/12805.strip.gif" alt="Dilbert" /></a>Come tutte le categorie professionali, anche gli informatici indugiano in battute pietose e comunque comprensibili solamente dai propri &#8220;pari&#8221;. Avete mai sentito battute in <em>slang</em> fra studenti di medicina? <a href="http://plus.google.com/photos/106871502359109782595/albums/5635223264512791153">Stessa cosa</a><a href="http://plus.google.com/photos/106871502359109782595/albums/5635223264512791153"><img width="150" class="alignright" src="http://lh5.googleusercontent.com/-yHIKEfR3_WE/TjRV5XIzQEI/AAAAAAAAAjo/xelfv4FhXf0/s291-c-k/31682_126102307420511_125150967515645_180071_4422795_n_104.jpg" alt="Dilbert" /></a>. Con problemi con i familiari analoghi ai &#8220;nostri&#8221;.</p>
<p>Di professione sono programmatore, perchè mi piace ed anche per camparci, ma non so fare e non faccio solo quello. Non basta fare o sentirsi programmatori per definirsi anche informatici, anche se certamente la cosa aiuta. Di certo non sono un &#8220;<em>softwarista</em>&#8220;: amo forgiare neologismi, ma non ne userei mai uno così orribile, riduttivo, impreciso, per descrivere chi io sia.</p>
<p>Chi mi fa notare che scrivere codice sia un gioco da ragazzi, un lavoro facile, evidentemente non conosce bene questo mondo. Vero, non tutti i progetti sono <em>così</em> difficili, ma generalmente scrivere codice è una fase operativa avanzata rispetto ad altre, come la progettazione, dove iniziano i mal di testa.</p>
<blockquote><p><em>&#8220;In fact, my main conclusion after spending ten years of my life working on the TEX project is that software is hard. It’s harder than anything else I’ve ever had to do. (Donal Knuth)&#8221;</em></p></blockquote>
<p>A chi mi fa notare che programmare, in fondo, non sia un &#8220;lavoro&#8221; o che sia perfino sovrapagato (in Italia!?!) rispetto ad altre mansioni, spesso più &#8220;manuali&#8221;, mi viene da sorridere. Detto ciò, considerato che lavorare nell&#8217;informatica non è come accedere in una casta chiusa, non vedo perchè chi ha preparazione e <em>know-how</em> non possa ambire in alto, anche econonomicamente. Come per tutte le altre professioni, del resto. <a href="http://gowingassociates.com/?p=149">Ennesima variante</a> di un classico aforisma d&#8217;esempio (<a href="http://www.paloaltoscuola.it/moduli/html/racconti_sapere_dove_colpire.php">altra variante</a>):</p>
<blockquote><p><em><strong>Do You Know Where To Hit The Hammer?</strong></p>
<p>A company has developed the latest and greatest monster widget maker. They’ve sent out invitations for the grand reveal to the world’s press and major business players. 15 minutes before the coming out party is to start, with the grandstands bursting at the seams, television cameras trained on the dignitaries and company executives, and the place at full-tilt frenzy, the widget maker shuts down. No amount of fiddling by the operators could get the machine fired up. In a panic the company president remembers that the chief engineer of the machine had retired the week before. The president gets the engineer on the phone and pleads for him to come in and get the machine working. The engineer says he’ll fix it but he’s charging $10,000. The president readily agrees.</p>
<p>5 minutes later the engineer shows up. He looks over the machine, taking special note of several areas on the machine. He then takes a hammer out of his bag and hits one of the spots with a might whack! The machine immediately springs to life, producing widgets like there’s no tomorrow. The engineer puts the hammer back in his bag, walks up to the president and says “That will be $10,000″. The president looks at him and screams “$10,000??? You spent two minutes here just to hit it with a hammer!!!!”. The engineer pointedly looks at the president and says “I threw in the hammer hit for free. The $10,000 was for knowing where to hit it.”.</em></p></blockquote>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/informatica/'>Informatica</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/ironia/'>Ironia</a>, <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/11967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/11967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/11967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/11967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/11967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/11967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/11967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/11967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/11967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/11967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/11967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/11967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/11967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/11967/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11967&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/01/30/io-informatico/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://upload.wikimedia.org/wikipedia/en/c/c1/The_Matrix_Poster.jpg" medium="image">
			<media:title type="html">Matrix</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/en/thumb/b/bb/Independence_day_movieposter.jpg/220px-Independence_day_movieposter.jpg" medium="image">
			<media:title type="html">Matrix</media:title>
		</media:content>

		<media:content url="http://i275.photobucket.com/albums/jj308/rejectedx/geek_inside.jpg" medium="image" />

		<media:content url="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/10000/2000/800/12805/12805.strip.gif" medium="image">
			<media:title type="html">Dilbert</media:title>
		</media:content>

		<media:content url="http://lh5.googleusercontent.com/-yHIKEfR3_WE/TjRV5XIzQEI/AAAAAAAAAjo/xelfv4FhXf0/s291-c-k/31682_126102307420511_125150967515645_180071_4422795_n_104.jpg" medium="image">
			<media:title type="html">Dilbert</media:title>
		</media:content>
	<feedburner:origLink>http://rejex.wordpress.com/2012/01/30/io-informatico/</feedburner:origLink></item>
		<item>
		<title>Sull’affrontare codice altrui ed ignoto…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/TgC0vX_zv70/</link>
		<comments>http://rejex.wordpress.com/2012/01/23/sullaffrontare-codice-altrui-ed-ignoto/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 06:25:26 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Considerazioni personali]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[Codice ignoto e altrui]]></category>
		<category><![CDATA[Doxygen]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=12116</guid>
		<description><![CDATA[Qualche giorno fa l&#8217;amico JustB ha sollevato un interessante quesito su Meemi: &#8220;Avete consigli su come approcciare lo studio di un&#8217;applicazione legacy su cui dovrete lavorare ed effettuare modifiche, considerando che si tratta di un&#8217;infinita schiera di file salvati in n+1 cartelle, che si includono a vicenda, senza uno straccio di documentazione né commenti esplicativi?&#8221; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12116&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Qualche giorno fa l&#8217;amico <a href="http://giustino.borzacchiello.it/">JustB</a> ha sollevato un interessante <a href="http://meemi.com/JustB/7487930#discussion">quesito su <em>Meemi</em></a>:</p>
<blockquote><p><em>&#8220;Avete consigli su come approcciare lo studio di un&#8217;applicazione legacy su cui dovrete lavorare ed effettuare modifiche, considerando che si tratta di un&#8217;infinita schiera di file salvati in n+1 cartelle, che si includono a vicenda, senza uno straccio di documentazione né commenti esplicativi?&#8221;</em></p></blockquote>
<p>Domanda molto interessante, a cui vorrei rispondere ora, seppur brevemente&#8230;</p>
<p><span id="more-12116"></span></p>
<p><font size='+1' color='#005197'>L&#8217;approccio al problema</font></p>
<p><a href="http://rejex.wordpress.com/tag/programmazione/"><img class="alignleft wp-image-8676" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100&h=100" alt="" width="100" height="100" /></a>A chi non è mai capitata una cosa del genere, ossia avere a che fare con codice di terzi, magari <a href="http://rejex.wordpress.com/2011/09/19/sul-software-legacy/"><em>legacy</em></a>? Ovviamente la risposta è banale &#8211; tutti! &#8211; e, salvo rari casi, il compito non è mai una passeggiata.</p>
<p>Il problema non è solo metterci le mani, quanto capirlo e comprenderlo per poi decidere il da farsi.</p>
<p>Questo tipo di strategia però non sempre è possibile ed è abbastanza normale dover ottenere in fretta dei risultati &#8211; quindi modificare direttamente quel codice! &#8211; senza avere il tempo di effettuare un&#8217;ispezione accurata. Un po&#8217; come buttarsi a scrivere un nuovo programma senza neppure avere un&#8217;idea di fondo di quello che dovrà fare e soprattutto come dovrà farlo.</p>
<p>Esiste poi una sorta di atteggiamento spocchioso e terribilmente comune nei programmatori che si approcciano al lavoro di terzi ed è quello di partire prevenuti nei confronti degli altri, salvo poi peggiorare facilmente nel giudizio man mano che va avanti nella lettura: al minimo errore individuato &#8211; reale o presunto che sia -, al minimo commento incompleto o inesatto, alla minima imprecisione nell&#8217;indentazione, ecco che iniziano i mugugni del programmatore di turno verso &#8220;<em>chi ha fatto quello scempio</em>&#8220;.</p>
<p>Le motivazioni di questo tipo di atteggiamento sono le più disparate: dal &#8220;<em>io queste cose le so fare meglio</em>&#8221; fino al diventare una buona scusa per giustificare ulteriori ritardi (<em>&#8220;è talmente ingarbugliato che in pratica lo sto riscrivendo!&#8221;</em>).</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Per esperienza, direi di concedere al codice altrui ed al suo autore il <em>beneficio del dubbio</em>, almeno finchè non si è conclusa un&#8217;attenta e relativamente lunga fase di ispezione.</p>
<p>Di rimando, mai fidarsi ciecamente delle impressioni di un programmatore alle prese con codice non suo, almeno finchè non si è sporcato le mani davvero, in profondità.</p>
<p>Anche perchè, finchè un dev non arriva ad un certo livello di intimità con del codice, di norma non può sapere quanto ne dovrà cambiare: in altre parole, a seconda del singolo progetto e a fronte anche di migliaia e migliaia di potenziali righe di codice da visionare, quelle effettivamente da modificare potrebbero essere molto poche.</p>
<p>Un conto sono valutazioni oneste, frutto di indagini serie e prolungate nel codice altrui, un conto sono supposizioni ed illazioni &#8220;spannometriche&#8221;, emesse in fretta e furia e, tavolta, anche con una certa malizia di fondo.</em></td>
</tr>
</table>
<p></p>
<p>Di certo leggere poche righe di codice e, senza nemmeno averle capite, decidere di riprogettare il codice da zero è una scelta radicale e spesso controproducente: posso capire quando il codice altrui fa veramente pietà e non c&#8217;è modo per manutenerlo, ma il capriccio di volerlo rifare a tutti i costi no. Non c&#8217;è <a href="http://rejex.wordpress.com/2009/04/06/la-sindrome-not-invented-here/"><em>sindrome &#8220;Not Invented Here&#8221;</em></a> (<em>NIH</em>) o volontà di dimostrarsi più bravi che tenga.</p>
<p><font size='+1' color='#005197'>Il problema: approcciare l&#8217;ignoto</font></p>
<p>Il problema più grosso con il codice è l&#8217;ignoto. L&#8217;ignoto è codice altrui, che vedete per la prima volta, e perfino codice che voi stessi avete scritto anni prima e che non avete più toccato da eoni.</p>
<p>È un ammasso minaccioso di righe che dovete comprendere prima ancora di poterle modificare. Naturale quindi che, impaurito, qualcuno si ribelli a questa situazione e, piuttosto di affrontarla, opti per ripartire da zero. Inoltre, come <a href="http://www.joelonsoftware.com/articles/fog0000000069.html">direbbe Sposlky</a>:</p>
<blockquote><p><em>It’s harder to read code than to write it.</em></p></blockquote>
<p><a href="http://rejex.files.wordpress.com/2011/12/purchases.png"><img src="http://rejex.files.wordpress.com/2012/01/dont_panic.jpg?w=300" alt="" title="Don't panic!" width="300" class="alignleft" /></a>Da questo punto di vista i programmatori sono l&#8217;esempio per antonomasia di persone che non sono mai contente fino in fondo e che bisogna in qualche modo controllare: è normale che un <em>dev</em> arrivi ad un certo punto del suo lavoro e pensi/provi insistentemente a ripartire da capo &#8211; un errore generalmente gravissimo! -, figuriamoci se il codice iniziale l&#8217;ha scritto qualcun altro.</p>
<p>Prima regola per affrontare l&#8217;ignoto: <strong>non andare in panico</strong>, non tirare i remi in barca prima di averlo affrontato e possibilmente compreso, anche solo parzialmente. Sono le fasi iniziali quelle critiche: l&#8217;autocontrollo è essenziale. Non appena si comincia a capire qualcosa, la paura passa di colpo, <em>automagicamente</em>.</p>
<p><font size='+1' color='#005197'>Un approccio personale</font></p>
<p>Dopo aver sconfitto il demone della riscrittura <em>from scratch</em>, è fondamentale circoscrivere ed analizzare l&#8217;ignoto. Ognuno di noi sviluppa col tempo le sue personali strategie per raggiungere i suoi scopi.</p>
<p>Il mio è relativamente semplice ed è sintetizzabile in <strong>analizza, circoscrivi e migliora, ripeti</strong>.</p>
<p><strong><font color='#005197'>1. Analizza</font></strong></p>
<p><em>Analizzare</em> il codice significa volerlo capire con un certo livello di dettaglio. Se le dimensioni del codice e dell&#8217;eventuale documentazione a corredo sono contenute, apro il codice in un IDE e provo a capire da solo.</p>
<p>Molto più spesso uso invece Doxygen, che considero alla stregua di un coltellino svizzero. Da <a href="http://it.wikipedia.org/wiki/Doxygen">Wikipedia</a>:</p>
<blockquote><p><em>&#8220;Doxygen è una applicazione per la generazione automatica della documentazione a partire dal codice sorgente di un generico software. È un progetto open source rilasciato sotto licenza GPL, scritto per la maggior parte da Dimitri van Heesch a partire dal 1997.</p>
<p>Doxygen è un sistema multipiattaforma (Windows, Mac OS, Linux, ecc.) ed opera con i linguaggi C++, C, Java, Objective C, Python, IDL (versioni CORBA e Microsoft), Fortran, PHP, C#, e D. Nell&#8217;ambito del C++, è compatibile con le estensioni Qt.</p>
<p>È il sistema di documentazione di gran lunga più utilizzato nei grandi progetti open source in C++. Due esempi per tutti, sono l&#8217;adozione di doxygen da parte di ACE e KDE. In Java invece, la posizione leader viene meno, in virtù della presenza del concorrente Javadoc.</p>
<p>Il sistema estrae la documentazione dai commenti inseriti nel codice sorgente e dalla dichiarazione delle strutture dati.&#8221;</em></p></blockquote>
<p>Non solo è utile per creare documentazione partendo dal codice, documentato tramite opportuni tag, ma è estremamente efficace nell&#8217;<em>estrarre</em> <strong>anche altro</strong>.</p>
<p>Ad esempio, recentemente ho deciso di dare un&#8217;occhiata al codice di <em><a href="http://it.wikipedia.org/wiki/Doom_3">Doom 3</a></em> di <em>ID Software</em>, rilasciato finalmente sotto licenza GPL e pubblicato sul sito <em>GitHub</em> in <a href="https://github.com/TTimo/doom3.gpl">questo <em>repository</em> pubblico</a>.</p>
<p>Non è certamente un progetto-giocattolo ed infatti richiede una buona competenza tecnica per maneggiarlo, nonostante sia generalmente ben scritto <em>(in realtà avrei alcune riserve da programmatore a programmatore &#8211; vedi sezione precedente -, ma non è la sede giusta per farlo</em>).</p>
<p>Capirci qualcosa non è quindi stato molto facile, ma Doxygen si è nuovamente rivelato utilissimo per esplorare il codice cercando di capire come è stato strutturato &#8211; non sempre l&#8217;organizzazione dei file è intuitiva nè i programmatori-autori lasciano spesso file di spiegazione esaustivi sull&#8217;argomento -.</p>
<p>Premesso che non volevo studiare il codice a fondo, ma solamente dargli un&#8217;occhiata rapida, ma con Doxygen questa &#8220;passeggiata&#8221; mi è diventata decisamente più godibile.</p>
<p>Usare Doxygen poi è veramente facile: basta installarlo, lanciare l&#8217;interfaccia grafica (<em>GUI</em>), configurare pochi parametri e fa tutto lui. Se poi avete installato anche la suite <a href="http://it.wikipedia.org/wiki/Graphviz"><em>Graphviz</em></a>, potrete attivare l&#8217;opzione per ottenere i diagrammi , anche simil-<a href="http://it.wikipedia.org/wiki/Uml"><em>UML</em></a>, con <em>dot</em>.</p>
<p>Un breve riassunto, <em>step-by-step</em>:</p>
<table>
<tr>
<td><a href="http://s275.photobucket.com/albums/jj308/rejectedx/?action=view&amp;current=doxygen_1.png" target="_blank"><img width="250" src="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_1.png" border="0" alt="Doxygen run on Doom3 Code (GPL)"></a><br /><em>1. Configurazione iniziale in Doxygen: nome progetto, directory di lavoro, eccetera</em></td>
<td><a href="http://s275.photobucket.com/albums/jj308/rejectedx/?action=view&amp;current=doxygen_2.png" target="_blank"><img width="250" src="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_2.png" border="0" alt="Doxygen run on Doom3 Code (GPL)"></a><br /><em>2. Configurazione della generazione dei diagrammi</em></td>
</tr>
<tr>
<td><a href="http://s275.photobucket.com/albums/jj308/rejectedx/?action=view&amp;current=doxygen_3.png" target="_blank"><img width="250" src="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_3.png" border="0" alt="Doxygen run on Doom3 Code (GPL)"></a><br /><em>3. Abilitazione della ricerca ricorsiva nelle sottodirectory di quella dove risiede il codice da analizzare</em></td>
<td><a href="http://s275.photobucket.com/albums/jj308/rejectedx/?action=view&amp;current=doxygen_4.png" target="_blank"><img width="250" src="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_4.png" border="0" alt="Doxygen run on Doom3 Code (GPL)"></a><br /><em>4. Avvio del programma (Run)</em></td>
</tr>
<tr>
<td><a href="http://s275.photobucket.com/albums/jj308/rejectedx/?action=view&amp;current=doxygen_5.png" target="_blank"><img width="250" src="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_5.png" border="0" alt="Doxygen run on Doom3 Code (GPL)"></a><br /><em>5. Completamento operazioni</em></td>
<td><a href="http://s275.photobucket.com/albums/jj308/rejectedx/?action=view&amp;current=doxygen_6.png" target="_blank"><img width="250" src="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_6.png" border="0" alt="Doxygen run on Doom3 Code (GPL)"></a><br /><em>6. Apertura dei risultati in un browser: si notino i diagrammi di ereditarietà e di collaborazione fra classi</em></td>
</tr>
</table>
<p></p>
<p>Dopo un&#8217;oretta buona di processamento &#8211; il codice è relativamente complesso e denso di informazioni estraibili &#8211; ho quindi potuto leggere i risultati direttamente in un browser. Trovo molto comodo che sia possibile includere nella documentazione generata da Doxygen anche i sorgenti stessi. In un colpo si riesce a:</p>
<ul>
<li>osservare il progetto nella sua interezza, a dispetto del suo essere eventualmente sparpagliato in mille file in mille directory diverse;</li>
<li>esplorarlo in vari modi: per classe, namespace, e così via, </li>
<li>leggerlo in un modo esteticamente piacevole: Doxygen uniforma tutto, alla faccia dei file/sorgenti scritti in modo diverso;</li>
<li>analizzarlo in modo efficiente: viva gli hyperlink per passare da un file ad un altro, da una funzione all&#8217;altra senza perdere tempo e con la possibilità di usare il tast &#8220;Indietro&#8221; del browser!.</li>
</ul>
<p>Inoltre Doxygen stesso è efficiente nel senso che se modificate un file, di norma non rigenererà da zero la documentazione, ma solo la porzione di essa che è toccata dai cambiamenti nel codice.</p>
<p><strong><font color='#005197'>2. Circoscrivi e migliora</font></strong></p>
<p>Ogni progetto di una certa taglia è il frutto del lavoro di uno o più individui nel corso del tempo. Il risultato è che raramente il suo codice appare ed è omogeneo.</p>
<p>Realisticamente, soprattutto per programmi con una certa <em>anzianità</em>, ci si trova con una pletora di file, ognuno col suo codice scritto in modo &#8220;<em>particolare</em>&#8220;: non di rado capita di trovare differenze abissali fra un file ed un altro nello stesso progetto.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>In C e C++ si parla di <a href="http://en.wikipedia.org/wiki/Single_Compilation_Unit">compilazione per unità singole</a> per indicare il modo con cui avviene normalmente la compilazione, ossia file per file. In sostanza, al netto del significato reale, ogni file sorgente fa storia a sè durante quella fase. </p>
<p>Avviene la stessa cosa anche in fase di scrittura: file diversi fanno storia a sè. Uno stesso programmatore nel tempo può cambiare in modo considerevole il suo stile di scrittura, al punto da non riuscire a identificare come suo del codice che ha sviluppato molto tempo prima.</p>
<p><a href="http://it.wikipedia.org/wiki/Hic_sunt_leones">Hic sunt leones</a>&#8230;</em></td>
</tr>
</table>
<p></p>
<p>Dopo aver capito cosa fa grossomodo un progetto si passa all&#8217;analisi per &#8220;sottosistemi&#8221;, se è possibile individuarne dei limiti: di solito i file sorgenti nei progetti di una certa dimensione sono raggruppati in qualche modo, per agevolare lo sviluppo e la manutenzione di parti logicamente legate.</p>
<p>Ad esempio tutto quello che riguarda l&#8217;accesso ad un filesystem potrebbe essere stato posto in una directory <em>fs</em> oppure tutti i file potrebbero risiedere nell&#8217;unica directory con gli altri sorgenti ma essere rapidamente individuabili da un prefisso <em>fs</em> nel nome. Nel caso invece tutto fosse alla rinfusa, nuovamente, Doxygen torna utile per capire le interrelazioni fra file e funzioni.</p>
<p>A quel punto, in perfetto stile <em>divide et impera</em>, si può approcciare l&#8217;ignoto dedicandosi ad un &#8220;sottosistema&#8221; per volta, cercando di comprenderne la struttura ed il ruolo per poi modificarlo se è il caso.</p>
<p>Durante questa fase, se è il caso, di solito provo anche a ridurre il numero di file, per renderlo maneggiabile: detesto maneggiare una miriade di piccolissimi file ognuno con una classe di pochissime righe (<em>una certa filosofia nel mondo Java sembra favorire questo approccio</em>). Per cui si procede con una riorganizzazione per passi dei file e poi al <a href="http://it.wikipedia.org/wiki/Refactoring"><em>refactoring</em></a> del codice vero e proprio.</p>
<p>L&#8217;idea è capire cosa fa un pezzettino del programma ignoto e, compreso, ridurne le dimensioni per rendere le successive modifiche più efficienti. <em>Accorpare e semplificare</em> sono le due parole magiche:</p>
<blockquote><p><em>&#8220;La perfezione è raggiunta non quando non c&#8217;è più niente da aggiungere, ma quando non c&#8217;è più niente da togliere. (<a href="http://it.wikiquote.org/wiki/Antoine_de_Saint-Exup%C3%A9ry">Antoine de Saint-Exupéry</a>)</em></p></blockquote>
<p>Durante questa fase, procedendo per passi piccoli ma decisi, vale la pena uniformare il codice, ossia applicare e riapplicare un <a href="http://en.wikipedia.org/wiki/Style_guide">manuale di stile</a> e delle <a href="http://en.wikipedia.org/wiki/Coding_conventions">coding convention</a>, precisi e predeterminati.</p>
<p><em>A questo punto il trucco si ripete, ossia si riparte dall&#8217;analisi e si continua finchè l&#8217;ignoto diventa qualcosa di compatto, manutenibile ed assolutamente non spaventoso.</em></p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/considerazioni-personali/'>Considerazioni personali</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a>, <a href='http://rejex.wordpress.com/category/software-engineering/'>software engineering</a> Tagged: <a href='http://rejex.wordpress.com/tag/codice-ignoto-e-altrui/'>Codice ignoto e altrui</a>, <a href='http://rejex.wordpress.com/tag/considerazioni-personali/'>Considerazioni personali</a>, <a href='http://rejex.wordpress.com/tag/doxygen/'>Doxygen</a>, <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a>, <a href='http://rejex.wordpress.com/tag/refactoring/'>Refactoring</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/12116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/12116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/12116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/12116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/12116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/12116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/12116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/12116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/12116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/12116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/12116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/12116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/12116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/12116/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12116&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/01/23/sullaffrontare-codice-altrui-ed-ignoto/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2012/01/dont_panic.jpg" medium="image">
			<media:title type="html">Don't panic!</media:title>
		</media:content>

		<media:content url="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_1.png" medium="image">
			<media:title type="html">Doxygen run on Doom3 Code (GPL)</media:title>
		</media:content>

		<media:content url="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_2.png" medium="image">
			<media:title type="html">Doxygen run on Doom3 Code (GPL)</media:title>
		</media:content>

		<media:content url="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_3.png" medium="image">
			<media:title type="html">Doxygen run on Doom3 Code (GPL)</media:title>
		</media:content>

		<media:content url="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_4.png" medium="image">
			<media:title type="html">Doxygen run on Doom3 Code (GPL)</media:title>
		</media:content>

		<media:content url="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_5.png" medium="image">
			<media:title type="html">Doxygen run on Doom3 Code (GPL)</media:title>
		</media:content>

		<media:content url="http://i275.photobucket.com/albums/jj308/rejectedx/doxygen_6.png" medium="image">
			<media:title type="html">Doxygen run on Doom3 Code (GPL)</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2012/01/23/sullaffrontare-codice-altrui-ed-ignoto/</feedburner:origLink></item>
		<item>
		<title>Sviluppatori come modelli di riferimento…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/yqnGGWYErgc/</link>
		<comments>http://rejex.wordpress.com/2012/01/16/sviluppatori-come-modelli-di-riferimento/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 06:25:59 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Lavoro]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Formazione]]></category>
		<category><![CDATA[Imparare]]></category>
		<category><![CDATA[Modelli]]></category>
		<category><![CDATA[Modello di riferimento]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=8571</guid>
		<description><![CDATA[Di tanto in tanto mi viene chiesto qualche consiglio su come iniziare a programmare, &#8220;partendo con il piede giusto&#8220;. Non che io sia un guru ma questo non mi impedisce certo di provare a rispondere. Alcuni dei consigli sono emersi qua e là, nei miei post passati, ma ho notato di aver trascurato del tutto [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=8571&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rejex.wordpress.com/category/programmazione/"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100" alt="" width="100" /></a>Di tanto in tanto mi viene chiesto qualche consiglio su come iniziare a programmare, &#8220;<em>partendo con il piede giusto</em>&#8220;. Non che io sia un <em>guru</em> ma questo non mi impedisce certo di provare a rispondere.</p>
<p>Alcuni dei consigli sono emersi qua e là, nei miei post passati, ma ho notato di aver trascurato del tutto un &#8220;<em>fattore di crescita professionale</em>&#8221; molto importante, che mi si è rivelato utilissimo: i &#8220;<em><strong>modelli di riferimento</strong></em>&#8220;.</p>
<p><span id="more-8571"></span></p>
<p><font size='+1' color='#005197'>Modello?</font></p>
<p>È indubbio che esistano tanti modelli di programmatori quanti sono i programmatori stessi ma, come è lecito aspettarsi, non tutti sono altrettanto efficaci e, di conseguenza, non tutti meritano di essere seguiti. Così come avviene, del resto, per i <a href="http://it.wikipedia.org/wiki/Modello_di_sviluppo_del_software"><em>modelli di sviluppo software</em></a>.</p>
<p><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://i275.photobucket.com/albums/jj308/rejectedx/modello_di_sviluppo_altan.jpg" alt="" width="250" />Non è una semplice questione di conoscenza: un programmatore da prendere come esempio, come &#8220;<em>modello di riferimento</em>&#8220;, non è semplicemente qualcuno che ne sa più di noi.</p>
<p>È piuttosto qualcuno che ha le idee sufficientemente chiare per svolgere un determinato compito in modo ordinato, preciso e se possibile anche elegante.</p>
<p>Se poi la sua conoscenza è estremamente vasta ed è perfino in grado di insegnarla in modo comprensibile a terzi, tanto meglio. Tuttavia non è una condizione imprescindibile per essere un &#8220;<em>modello valido</em>&#8220;.</p>
<p><font size='+1' color='#005197'>Un modello non è necessariamente (anche) un buon maestro</font></p>
<p>Esattamente: un modello non è per forza un docente, professore, &#8230; ma chiunque può esserlo o diventarlo nell&#8217;atto di svolgere qualcosa.</p>
<p>Ad esempio, una decina e più di anni fa, all&#8217;inizio della mia carriera universitaria, ricordo di aver visto il codice C per un progetto d&#8217;esame, scritto da un mio compagno di università che all&#8217;epoca era certamente già ben più esperto di me. </p>
<p>L&#8217;esercizio da svolgere non era particolarmente complicato ma lui lo aveva svolto in modo <em>terribilmente elegante</em>: gli spazi dove servivano, tutte le parentesi al loro posto, i commenti dove e solo se servivano, eccetera. </p>
<p>Era così ben scritto che riuscivo a capire <em>al volo</em> cosa facevano alcune funzioni della libreria C, all&#8217;epoca a me ignota in molti punti, libreria che non è mai stata celebre per la sua chiarezza e &#8220;<em>intuitività</em>&#8220;.</p>
<p>Man mano che leggevo quel codice continuavo a ripetermi:</p>
<blockquote><p><em>&#8220;Wow! Questo sì che sa come si fanno le cose bene!&#8221;</em></p></blockquote>
<p>Quel giorno ho imparato il concetto di &#8220;<em>stile</em>&#8221; nella programmazione, per giunta nella sua accezione positiva. Non un libro, non un docente chiamato ad insegnarmi a programmare, ma uno studente come me ed attraverso il suo codice ben scritto.</p>
<p>Quel giorno trovai un modello da seguire, a cui ispirarmi e per giunta <strong>senza che questi ne fosse a conoscenza</strong>.</p>
<p>Quel giorno formulai quest&#8217;altra semplice (<em>banale?</em>) euristica:</p>
<blockquote><p><em>&#8220;Se qualcosa ti fa esclamare più di due volte &#8216;Wow!&#8217; mentre la osservi, allora è fatta dannatamente bene, almeno in parte!&#8221;</em></p></blockquote>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Come ho avuto modo di scrivere più volte, non sono un guru e quel poco che so lo devo all&#8217;aiuto, diretto ed indiretto, di molte persone. Non potendole ringraziare una ad una &#8211; anche se lo meriterebbero &#8211; le ringrazio tutte in blocco, &#8220;ecumenicamente&#8221;.</em></td>
</tr>
</table>
<p></p>
<p><font size='+1' color='#005197'>Non esiste un modello unico ed universalmente valido di programmatore!</font></p>
<p>Sono convinto che ogni programmatore deve e può crearsi una sua &#8220;<em><strong>personalità programmativa</strong></em>&#8220;, magari costruita a partire da più modelli validi di riferimento.</p>
<p>In altre parole il programmatore alle prime armi può crescere professionalmente in fretta se impara ad individuare ed a seguire modelli validi, che può trovare quotidianamente e senza che debba sussistere per forza un legame esplicito tipo <em>maestro-discepolo</em>. Possono bastare anche le sole opere, debitamente osservate ed analizzate, come nel mio caso.</p>
<p>Seguire non è copiare spudoratamente, piuttosto assimilare solo le parti che si ritengono davvero buone, perfino da più persone contemporaneamente. Il risultato è appunto una &#8220;<em>personalità programmativa</em>&#8221; in cui si annidano le esperienze altrui.</p>
<p>Ricordo quando, sempre in università eoni or sono, impararai a progettare e strutturare un sito in certo modo, semplicemente osservando alcuni miei amici intenti a scriverne uno ed a discutere fra di loro sul da farsi: non scambiai nemmeno una parola sull&#8217;argomento con loro, però in qualche modo furono miei maestri e io un loro <em>padawan</em>.</p>
<p><font size='+1' color='#005197'>Non esistono solo <em>&#8220;casi di successo&#8221;</em></font></p>
<p>Sulla strada per diventare buoni programmatori si trova di tutto, comprese soluzioni eccellenti e in opposizione. A quel punto entrano in gioco altri fattori come ad esempio il proprio &#8220;<em>gusto</em>&#8220;.</p>
<p>Quando mi son trovato in una situazione del genere, cioè dovendo scegliere fra più opzioni contrapposte (<em>es: due programmatori-modelli che risolvono un problema in modo diametralmente opposto e/o mutualmente esclusivo fra di loro</em>), ho optato per quella più semplice, anche solo apparentemente: il &#8220;<a href="http://it.wikipedia.org/wiki/Rasoio_di_Occam"><em>rasoio di Occam</em></a>&#8221; rappresenta anche un&#8217;ottima euristica per scegliere.</p>
<p>Spesso, come è logico supporre, mi è capitato di tornare sui miei passi, ossia rivedere e scartare &#8211; a fatica &#8211; alcune mie &#8220;fissazioni&#8221;.</p>
<p>Una soluzione che si è rivelata buona una volta non significa che lo sarà anche in futuro. Idem per le persone.</p>
<p>Fidarsi ciecamente di qualcosa o qualcuno o, peggio, rifiutare a priori il resto è un sintomo di <strong>fanatismo</strong>, da rifuggire. Il mondo cambia e insieme a nuovi problemi emergono anche nuove soluzioni: rimanere ancorati, cristallizati a qualcosa o qualcuno è rischioso e quindi sconsigliabile.</p>
<p>Ad esempio, per tornare con i piedi per terra, detesto profondamente l&#8217;<a href="http://en.wikipedia.org/wiki/Indent_style#K.26R_style">lo stile di indentazione K&amp;R</a> perchè ritengo che rovini l&#8217;ordine ed ostacoli la leggibilità del codice rispetto ad altri stili come l&#8217;<a href="http://en.wikipedia.org/wiki/Indent_style#Allman_style_.28bsd_in_Emacs.29">Allman</a>. Eppure, osservando il codice scritto da persone competenti, mi sono ricreduto. Inoltre ci sono casi in cui bisogna compattare il codice il più possibile, ad esempio pubblicando il codice su delle riviste. Ho quindi imparato a tollerarla.</p>
<p><font size='+1' color='#005197'>Migliorare!</font></p>
<p>L&#8217;idea alla base è provare a riflettere non solo sul <em>cosa</em> imparare, ma anche sul <em>come</em>: come accrescere le proprie conoscenze, come migliorarsi, come diventare più efficienti, eccetera.</p>
<p>Questa è la parte inizialmente più difficile ma è anche quella che sul medio-lungo termine garantisce i risultati migliori.</p>
<p>Saper individuare e seguire dei modelli validi è un buon modo per favorire questa crescita personale e professionale.</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/lavoro/'>Lavoro</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/formazione/'>Formazione</a>, <a href='http://rejex.wordpress.com/tag/imparare/'>Imparare</a>, <a href='http://rejex.wordpress.com/tag/modelli/'>Modelli</a>, <a href='http://rejex.wordpress.com/tag/modello-di-riferimento/'>Modello di riferimento</a>, <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/8571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/8571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/8571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/8571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/8571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/8571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/8571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/8571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/8571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/8571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/8571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/8571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/8571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/8571/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=8571&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/01/16/sviluppatori-come-modelli-di-riferimento/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://i275.photobucket.com/albums/jj308/rejectedx/modello_di_sviluppo_altan.jpg" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2012/01/16/sviluppatori-come-modelli-di-riferimento/</feedburner:origLink></item>
		<item>
		<title>Le leggi sulla tecnologia di Kranzberg…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/afe_eGMH7rw/</link>
		<comments>http://rejex.wordpress.com/2012/01/09/le-leggi-sulla-tecnologia-di-kranzberg/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 06:25:13 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Innovazione]]></category>
		<category><![CDATA[Tecnologie]]></category>
		<category><![CDATA[Kranzberg's laws of technology]]></category>
		<category><![CDATA[Storia della tecnologia]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=12058</guid>
		<description><![CDATA[Gironzolando sulla rete mi sono imbattuto in queste sei &#8220;leggi&#8221; dello storico della tecnologia Melvin Kranzberg: Kranzberg&#8217;s laws of technology Technology is neither good nor bad; nor is it neutral. Invention is the mother of necessity. Technology comes in packages, big and small. Although technology might be a prime element in many public issues, nontechnical [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12058&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Gironzolando sulla rete mi sono imbattuto in queste sei &#8220;leggi&#8221; dello storico della tecnologia <a href="http://en.wikipedia.org/wiki/Melvin_Kranzberg">Melvin Kranzberg</a>:</p>
<blockquote><p><em><a href="http://en.wikipedia.org/wiki/Kranzberg's_laws_of_technology"><strong>Kranzberg&#8217;s laws of technology</strong></a></p>
<ol>
<li>Technology is neither good nor bad; nor is it neutral.</li>
<li>Invention is the mother of necessity.</li>
<li>Technology comes in packages, big and small.</li>
<li>Although technology might be a prime element in many public issues, nontechnical factors take precedence in technology-policy decisions.</li>
<li>All history is relevant, but the history of technology is the most relevant.</li>
<li>Technology is a very human activity &#8211; and so is the history of technology.</li>
</ol>
<p></em></p></blockquote>
<p>Sulle prime ho riso, poi ho riflettuto, quindi ho convenuto con il loro autore. </p>
<p><span id="more-12058"></span></p>
<p><font size='+1' color='#005197'>1. &#8220;La tecnologia non è buona nè cattiva; ma neppure neutrale&#8221;</font></p>
<p>Interessante come punto di vista: la tecnologia risolve bisogno &#8211; reale o creato &#8211; e per quanto possa essere apparentemente neutra in sè, gli effetti non lo sono.</p>
<p>Verrebbe da citare <a href="http://it.wikipedia.org/wiki/Alfred_Nobel">Alfred Nobel</a>, inventore della dinamite e ideatore del celeberrimo premio che porta il suo nome: grande invenzione ma che a seconda di come viene impiegata ha avuto e ha effetti positivi o negativi, certamente non neutri.</p>
<p>Curiosamente la storia è fatta di scoperte ed invenzioni nate per scopi militari e poi impiegate successivamente anche per usi civili. Di sicuro ogni invenzione spinge avanti il progresso e non si può più tornare indietro, fare finta cioè che non sia mai esistita.</p>
<p><font size='+1' color='#005197'>2. &#8220;L&#8217;invenzione è la madre della necessità&#8221;</font></p>
<p>Questa frase ad effetto mi piace molto e suona ambigua. Personalmente la interpreto come un &#8220;<em>l&#8217;invenzione crea il bisogno</em>&#8220;, nel senso che molte invenzioni moderne nascono col preciso intento di creare nuovi bisogni e quindi spingere l&#8217;acquisto dei frutti derivanti da esse. La necessità intesa quindi in senso consumistico.</p>
<p>In realtà, la storia insegna, l&#8217;invenzione spesso appare come scoperta casuale e non voluta di ricerche con altri fini. L&#8217;esempio prediletto dagli spammer: il <a href="http://it.wikipedia.org/wiki/Viagra"><em>Viagra</em></a>,</p>
<blockquote><p><em>&#8220;inizialmente studiato per la cura dell&#8217;angina pectoris&#8221;</em></p></blockquote>
<p>In altri casi l&#8217;invenzione è invece la risposta a qualche problema specifico o a qualche &#8220;prurito&#8221; personale: </p>
<blockquote><p><em>&#8220;Every good work of software starts by scratching a developer&#8217;s personal itch.&#8221; (<a href="http://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar">The Cathedral and the Bazaar</a>, <a href="http://www.cooperationcommons.com/node/396">E.S. Raymond</a>)</em></p></blockquote>
<p><font size='+1' color='#005197'>3. &#8220;La tecnologia arriva in pacchetti, grandi e piccoli&#8221;</font></p>
<p>Altra frase ad effetto, dai molti significati.</p>
<p>Perchè una tecnologia si diffonda, deve essere possibile innanzitutto imbrigliarla, controllarla, trasformarla in qualcosa di pratico e riproducibile, dosarla, inscatolarla per poterla infine vendere in base a qualche criterio, incluso certamente quello dimensionale.</p>
<p><a href="http://it.wikipedia.org/wiki/ENIAC"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Eniac.jpg/320px-Eniac.jpg" alt="ENIAC (Wikipedia)" title="sandbox" width="250" class="alignleft" /></a>Un&#8217;altra interpretazione, abbastanza banale, è relativa al fatto che spesso i primi prodotti di una tecnologia che compaiono sul mercato sono relativamente grossi (es: primi cellulari e, volendo, perfino l&#8217;<a href="http://it.wikipedia.org/wiki/ENIAC">ENIAC</a>!) e man mano vengono miniaturizzati, arrivando a stare quindi in pacchetti molto piccoli e maneggevoli.</p>
<p>Infine, come non citare i pacchetti intesi come unità di trasporto di informazioni, quindi le moderne reti di telecomunicazioni di cui Internet è certamente l&#8217;emblema.</p>
<p>Chissà quante altre interpretazioni sono possibili partendo da questa frase&#8230;</p>
<p><font size='+1' color='#005197'>4. &#8220;Anche se la tecnologia potrebbe essere un elemento primario in molte discussioni pubbliche, fattori non-tecnici prendono il sopravvento nelle decisioni che riguardano l&#8217;uso della tecnologia&#8221;</font></p>
<p>Dato che gli effetti della tecnologia non sono mai neutri, è ovvio che il suo uso vada discusso ed opportunamente regolamentato. Quindi molti altri fattori non-tecnici hanno pressochè spesso il sopravvento su di essa:</p>
<blockquote><p><em><a href="http://thefrailestthing.com/2011/08/25/kranzbergs-six-laws-of-technology-a-metaphor-and-a-story/"><strong>Kranzberg’s Six Laws of Technology, a Metaphor, and a Story</strong></a></p>
<p>&#8220;<strong>Fourth Law</strong>: [...] many complicated sociocultural factors, especially human elements, are involved, even in what might seem to be ‘purely technical’ decisions.” “Technologically ‘sweet’ solutions do not always triumph over political and social forces.”</em></p></blockquote>
<p>Un recente esempio &#8220;scientifico&#8221;:</p>
<blockquote><p><em><strong><a href="http://arstechnica.com/science/news/2011/12/us-government-tries-to-restrict-publication-of-details-on-avian-flu-virus-that-spreads-among-mammals.ars">US Government tries to restrict publication of details on avian flu virus that spreads among mammals</a></strong></p>
<p>Although avian flu viruses have infected humans in the past (often with lethal effect), so far, these infections have come directly from birds. Over this past summer, however, researchers presented disturbing results at a scientific meeting. By growing the avian H5N1 virus in mammals for several generations, <strong>they had evolved a strain that can spread among mammals</strong> (ferrets, in this case) simply through the air. Additionally, researchers identified the mutations that enabled the virus to do so&#8211;the kind of information that would be enough to allow any competent molecular biologist to create an exact duplicate.</p>
<p>Like any scientists, these ones want to publish their results, but that&#8217;s where things are getting messy. The US National Science Advisory Board for Biosecurity has asked both Nature and Science to &#8220;delete details regarding both scientific methodology and specific viral mutations before publishing.&#8221; The journals recognize why the NSABB is concerned, but they also both feel that responsible researchers will need to know these details if they&#8217;re to effectively study the risk of an H5N1 pandemic.</p>
<p>Currently, both have issued statements that they&#8217;re considering the requests, but haven&#8217;t yet decided how to proceed.</em></p></blockquote>
<p>In questo caso l&#8217;aspetto scientifico, che di norma anticipa un eventuale sviluppo tecnologico, scatena reazioni pubbliche che arrivano addirittura alla richiesta di censura (che sempre un grosso errore: cfr. <em><a href="http://it.wikipedia.org/wiki/Effetto_Streisand">effetto Streisand</a></em>). Oltre a instillare dubbi sul buon senso di una tale ricerca: </p>
<blockquote><p><em>&#8220;Serviva davvero mutare il virus o lo scopo era semplicemente ottenere una pubblicazione su una rivista peer-reviewed di prestigio?&#8221;</em></p></blockquote>
<p>Ogni invenzione, ogni &#8220;<em>breakthough</em>&#8221; tecnologico comporta qualche sconvolgimento, non necessariamente negativo per tutti.</p>
<p>La Rete, si dice da tempo ad esempio, sta uccidendo l&#8217;editoria &#8220;classica&#8221; e si discute di come arginare questo fenomeno, addirittura a colpi di leggi e leggine. Ma se si valuta nel complesso umano, la sua sola esistenza ha portato anche molti effetti positivi, incluso l&#8217;avvicinare un certo grado di istruzione a persone che altrimenti ne resterebbero totalmente privi.</p>
<p><font size='+1' color='#005197'>5. &#8220;Tutta la storia è rilevante, ma la storia della tecnologia è la più rilevante&#8221;</font></p>
<p>Il fatto che uno storico, in seguito storico della tecnologia, emetta questo giudizio non mi sorprende più di tanto: si potrebbe dire che tira l&#8217;acqua al suo mulino. Però, a ben vedere, ogni aspetto umano è toccato da benefici &#8220;tecnologici&#8221;, frutto di innovazioni vere e proprie. Perfino negli aspetti umanistici fiori fior di letterati, poeti, scultori e artisti hanno innovato, ossia spinto più in alto l&#8217;asticella del progresso.</p>
<p>Tuttavia, la Storia raccontata e studiata a scuola tende più a parlare di fatti, date e persone che non a focalizzarsi sul progresso in quanto tale. Non che sia un male, ma ogni tanto è bello scoprire le &#8220;innovazioni&#8221;, perfino quelle più strane. Ricordo con piacere  quando da giovincello mi fu spiegato che fu Napoleone a imporci, fra le varie cose e <a href="http://it.wikipedia.org/wiki/Editto_di_Saint_Cloud">per editto</a>, che i cimiteri fossero collocati fuori dalle mura cittadine (anche) per motivi igienico-sanitari oltreché politici-ideologici.</p>
<p>Non credo che la storia della tecnologia avrà mai il suo spazio a scuola, però condivido la sua importanza fondamentale per il genere umano.</p>
<p><font size='+1' color='#005197'>6. &#8220;La tecnologia è un&#8217;attivà veramente umana &#8211; e così pure lo è la storia della tecnologia&#8221;</font></p>
<p>Esiste una specie di velato e sotterraneo disprezzo reciproco fra i propugnatori della scienze e quelli delle discipline umanistiche. I primi reclamano il progresso come loro bottino di guerra, mentre i secondi la cultura. In realtà tutte queste cose non sono altro che attività umane, spesso intimamente legate le une alle altre al punto che se esiste un confine che le separa, esso è certamente molto labile.</p>
<p>In tutto ciò la tecnologia è un esempio delle capacità del genere umano, qualcosa che ci distingue dalle altre specie animali e ci ha garantito anche la supremazia a livello planetario.</p>
<p>Di rimando, studiare la storia della tecnologia è importante per capire la storia umana e, forse, per favorirne nuovi impulsi. Non a caso su Slashdot è apparso recentemente questo articolo:</p>
<blockquote><p><em><strong><a href="http://developers.slashdot.org/story/12/01/07/1433205/want-to-get-kids-interested-in-programming-teach-them-computer-history">Want To Get Kids Interested In Programming? Teach Them Computer History</a></strong></p>
<p>&#8220;With poor IT teaching putting kids off pursuing a career in the computing it is time to look for a new approach. Taking kids back to the time of computing pioneers like John Von Neumann and the first machines — the likes of the Z3, the Eniac and the Colossus — would both inspire them and help get over the fundamentals about how computers work, argues silicon.com.&#8221;</em></p></blockquote>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/informatica/'>Informatica</a>, <a href='http://rejex.wordpress.com/category/innovazione/'>Innovazione</a>, <a href='http://rejex.wordpress.com/category/tecnologie/'>Tecnologie</a> Tagged: <a href='http://rejex.wordpress.com/tag/informatica/'>Informatica</a>, <a href='http://rejex.wordpress.com/tag/innovazione/'>Innovazione</a>, <a href='http://rejex.wordpress.com/tag/kranzbergs-laws-of-technology/'>Kranzberg's laws of technology</a>, <a href='http://rejex.wordpress.com/tag/storia-della-tecnologia/'>Storia della tecnologia</a>, <a href='http://rejex.wordpress.com/tag/tecnologia/'>Tecnologia</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/12058/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/12058/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/12058/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/12058/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/12058/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/12058/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/12058/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/12058/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/12058/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/12058/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/12058/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/12058/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/12058/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/12058/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=12058&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/01/09/le-leggi-sulla-tecnologia-di-kranzberg/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Eniac.jpg/320px-Eniac.jpg" medium="image">
			<media:title type="html">sandbox</media:title>
		</media:content>
	<feedburner:origLink>http://rejex.wordpress.com/2012/01/09/le-leggi-sulla-tecnologia-di-kranzberg/</feedburner:origLink></item>
		<item>
		<title>…And Sandbox for All!</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/1SaaLuRFf3Y/</link>
		<comments>http://rejex.wordpress.com/2012/01/02/and-sandbox-for-all/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 06:25:46 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Formazione]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[FAT32]]></category>
		<category><![CDATA[Informatica di base]]></category>
		<category><![CDATA[Sandbox]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=11932</guid>
		<description><![CDATA[Cosa distingue un utente da quello che viene spregiativamente definito un &#8220;utonto&#8220;? Forse una particolare forma di intelligenza? Forse la coordinazione nell&#8217;uso degli strumenti di input? Forse la tenacia nell&#8217;imparare e nel contempo piegarsi poco a poco al modo di funzionare di una macchina? Dipende da caso a caso ma, dovendo generalizzare, credo che nessuna [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11932&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cosa distingue un utente da quello che viene spregiativamente definito un &#8220;<em>utonto</em>&#8220;?</p>
<p>Forse una particolare forma di intelligenza? Forse la coordinazione nell&#8217;uso degli strumenti di <em>input</em>? Forse la tenacia nell&#8217;imparare e nel contempo piegarsi poco a poco al modo di funzionare di una <em>macchina</em>?</p>
<p>Dipende da caso a caso ma, dovendo generalizzare, credo che nessuna di queste caratteristiche sia più importante della <strong>mancanza di possibilità e di volontà di osare</strong>.</p>
<p><span id="more-11932"></span></p>
<p><font size='+1' color='#005197'>Sani errori di gioventù</font></p>
<p>Ricordo benissimo quando intorno ai 16 anni, insieme a Windows 95 OSR2, comparve la misteriosa <a href="http://en.wikipedia.org/wiki/FAT32#FAT32">FAT32</a>. Non sapevo cosa fosse realmente, non ne capivo necessità ed uso, ma volevo provarla <em>a tutti i costi</em>.</p>
<p>Tentai quindi la conversione da FAT16 a FAT32 del disco di sistema con il programma fornito dal sistema operativo, ma qualcosa andò storto. Problema: quello era <em>anche</em> il PC di mio papà. Follia giovanile è anche fare qualcosa senza sapere come e perchè: non avevo idea dell&#8217;importanza dei dati personali e quindi del rischio di comprometterli o perderli per una &#8220;<em>stupida prova</em>&#8220;, invasiva e distruttiva.</p>
<p>Le conseguenze furono migliori delle attese, nonostante la sacrosanta furia genitoriale nei miei confronti: un amico di mio papà, il nostro esperto locale di PC, salvò capra e cavoli, recuperando i dati con <em>chissà-quale-strumento</em> e tutto tornò a posto, seppure ancora con la FAT16.</p>
<p>Ovviamente non finì lì il discorso: ci riprovai, fallendo miseramente per la seconda volta.</p>
<p>Questa volta però, invece di darmi per vinto e nella speranza di evitare danni ben più gravi, cercai in tutto quello che avevo &#8211; all&#8217;epoca la documentazione erano per lo più le riviste specializzate con CD allegato &#8211; e riuscii in pieno nel mio intento: ora avevo un disco formattato in FAT32.</p>
<p>Quel giorno andai a letto spossato ma felice. Per evitare guai seri &#8211; la reiterazione di un misfatto li induce -, stavolta avevo dovuto imparare cosa fosse davvero un filesystem, cosa differenziasse la FAT32 dalla FAT16, cosa fosse e come usare <em>Partition Magic</em>.</p>
<p><font size='+1' color='#005197'>Cosa è ed a cosa serve una sandbox</font></p>
<p><a href="http://rejex.files.wordpress.com/2012/01/sandbox.jpg"><img src="http://rejex.files.wordpress.com/2012/01/sandbox.jpg?w=300" alt="" title="sandbox" width="300" class="alignleft wp-image-11945" /></a>Ripensando a quanti danni e quanti rischi mi sono accollato per imparare <em>sporcandomi le mani</em> &#8211; non crederete certo che mi sia limitato alla FAT32, vero? -, non mi sento di condannarmi. Affatto.</p>
<p>Col senno di poi, tuttavia, mi accorgo solo ora di <strong>quanto</strong> ho rischiato. Quando commisi quegli errori, i PC erano ancora molto costosi in proporzione al resto dei beni sul mercato ed io, nel corso del tempo, avevo messo a rischio stipendi interi dei miei genitori <em>senza neppure saperlo</em>.</p>
<p>Sostanzialmente avevo fatto di un <em>sistema in produzione</em> la mia personale <em><a href="http://it.wikipedia.org/wiki/Sandbox">sandbox</a></em>, la mia <em>scatola della sabbia con i giochi</em> in cui sperimentare liberamente.</p>
<p>Un grave errore di valutazione il mio, senza però il quale, probabilmente, non avrei proseguito nella mia carriera informatica. <em>Chi non risica, non rosica&#8230;</em></p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Gran parte dei programmatori che conosco si sono ritrovati nella mia stessa situazione, spesso fin dall&#8217;infanzia. </p>
<p>L&#8217;unica differenza sta nella <strong>precocità</strong> con cui hanno avuto accesso all&#8217;informatica, quindi alle rispettive famiglie: chi ha (avuto) genitori che lavoravano nell&#8217;informatica, ha potuto sperimentare prima. Nel mio caso, pur avendo giocato con i PC fin dalle elementari a scuola, ho scelto l&#8217;informatica come &#8220;stile di vita&#8221; solamente quando ho potuto veramente esplorarla da solo, con tutti i guai del caso.</p>
<p>Per questo, pur storcendo il naso quando penso alla FAT32 come filesystem &#8220;vecchiotto&#8221;, mi viene quasi da ringraziarlo, quale che sia una persona in carne ed ossa che mi ha fatto un grosso favore tanti e tanti anni fa.</em></td>
</tr>
</table>
<p></p>
<p>Qui sta il punto: nell&#8217;epoca dei dispositivi iperpotenti, tanto da gestire <em>virtual machine</em> come bazzecole, <strong>perchè non insegnare l&#8217;informatica in modo &#8220;sandboxed&#8221;</strong>?</p>
<p><font size='+1' color='#005197'>Un&#8217;umile proposta</font></p>
<p>Nel mio piccolo ho avuto anche qualche esperienza come insegnante di informatica, tanto per enti pubblici che per privati. Ebbene, lo confesso, non mi sono quasi mai attenuto ai libri o alle &#8220;linee guida&#8221; imposti dai miei committenti dei corsi perchè l&#8217;unico modo per insegnare l&#8217;informatica alle persone alle prime armi è <strong>liberarle dal rischio e farle sperimentare a piacere</strong>.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Un paio di lustri fa, rifiutai una proposta di regolarissimo lavoro part-time come insegnante di informatica di base presso una delle varie aziende di formazione del circondario.</p>
<p>Concluso il &#8220;training&#8221; plurigiornaliero ed appena prima di firmare per &#8220;entrare in servizio&#8221;, optai per salutare tutti ed andarmene.</p>
<p>Non era tanto il dover vestirmi in giacca e cravatta a darmi fastidio (beh, forse un po&#8217; sì: avevo vent&#8217;anni!), quanto il dettarmi per filo e per segno cosa dovevo dire e cosa dovevo omettere.</p>
<p>Lo scopo &#8220;fra le righe&#8221;, mai esplicitamente dichiarato, era ovviamente costringere le persone a ripetere il corso più in là.</p>
<p>Per mia fortuna me ne accorsi in tempo e fuggii a gambe levate.</p>
<p>Rispetto alle mie esperienze successive posso ora dire che quello fu di certo un caso isolato, come &#8220;modo di formare&#8221; le persone intendo. Nondimeno, ripensandoci di tanto in tanto, mi compiaccio di quella mia &#8220;fuga&#8221;.</em></td>
</tr>
</table>
<p></p>
<p>Chi ha mai insegnato ad usare un PC a qualcuno &#8211; cosa ben diversa da &#8220;<em>insegnare l&#8217;informatica di base</em>&#8220;! &#8211; sa benissimo che il primo contatto con &#8220;<em>la bestia elettronica</em>&#8221; può essere micidiale. Anche l&#8217;essere umano che si sente un guru nel suo campo tende ad accusare il colpo, spesso in modo drammaturgico al limite del tragicomico:</p>
<blockquote><p><em>&#8220;&#8230; come è possibile!? Ci riesce anche la zia Peppina e io no!?&#8221;</em></p></blockquote>
<p><a href="http://s275.photobucket.com/albums/jj308/rejectedx/?action=view&amp;current=risk-free.jpg" target="_blank"><img width="120" class="alignright" src="http://i275.photobucket.com/albums/jj308/rejectedx/risk-free.jpg" border="0" alt="Risk Free"></a>Qui si inserisce la mia banalissima proposta: perchè non un corso di informatica dentro una <em>virtual machine</em>? Una bella sandbox sicura in cui l&#8217;utente <strong>può sbagliare quanto gli pare e piace</strong>.</p>
<p>Perfino Wikipedia ha la <a href="http://it.wikipedia.org/wiki/Wikipedia:Sandbox">sua bella pagina-<em>sandbox</em></a> in cui gli utenti possono sbizzarrirsi e provare in totale sicurezza.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em><strong><a href="http://it.wikipedia.org/wiki/Virtual_machine">Da Wikipedia:</a></strong></p>
<blockquote><p>In informatica il termine macchina virtuale (VM) indica un software che crea un ambiente virtuale che emula il comportamento di una macchina fisica ed in cui alcune applicazioni possono essere eseguite come se interagissero con tale macchina. [...]</p>
<p>Gli usi possibili sono:</p>
<ul>
<li>la simulazione di piattaforme hardware ancora in fase di progettazione (è questo uno degli usi originari)</li>
<li>l&#8217;emulazione di un sistema operativo diverso da quello realmente installato sul proprio hardware al solo scopo di utilizzare applicazioni sviluppate solo per quello emulato e non per il proprio</li>
<li>operazioni di &#8220;consolidamento&#8221;. Passare cioè da avere x server fisici per x servizi, all&#8217;avere un unico server fisico con x istanze del sistema operativo, ognuna delle quali istanze può eseguire uno o più servizi.</li>
</ul>
</blockquote>
<p>Ebbene, io aggiungerei un quarto punto:</p>
<blockquote><ul>
<li>&#8220;didattica sandboxed&#8221;</li>
</ul>
</blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p>Potete sostituire le <em>virtual machine</em> con qualunque altro strumento che garantisca la certezza, reale o presunta, che si possa operare esattamente &#8220;come a casa&#8221;, potendo perfino distruggere tutto per imparare.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Uno degli aspetti più atroci per uno studente è la <strong>non ripetitibilità in solitaria delle nozioni acquisite</strong>.</p>
<p>In altre parole: si sta attenti, ci si segna tutto per filo e per segno, ma arrivati a casa non si riesce a ripetere da soli quello che si è visto e fatto a lezione. Argh! Disperazione e rovina!</p>
<p>Per evitare quella debacle didattica, un primo buon passo può essere il fornire gli stessi strumenti (<em>metodo scientifico docet</em>): l&#8217;adattamento o per meglio dire la capacità di uno studente di ripetere qualcosa in un contesto diverso (come può esserlo il PC di casa, diverso nell&#8217;HW e nel SO da quello usato a lezione) non è cosa immediata per tutti.</p>
<p>Per questo una virtual machine &#8220;moderna&#8221; (ossia corredata da un&#8217;interfaccia grafica semplicata), usabile, clonabile, letteralmente trasportabile e (ri)usabile a casa rappresenta un buon strumento didattico. Come un libro che si usa a lezione e altrove.</p>
<p>Di certo è meglio che costringere gli utenti a portare il loro PC &#8220;buono&#8221; da casa e rischiare di comprometterlo.</em></td>
</tr>
</table>
<p></p>
<p>Libertà di sperimentazione è l&#8217;unico modo per entusiasmare le persone e quindi spingerle ad imparare con le loro stesse mani. Ripudio l&#8217;idea dell&#8217;insegnante come miserrimo enunciatore e verificatore di nozioni preconfezionate: preferisco l&#8217;idea (<em>romantica?</em>) di insegnante come <strong>catalizzatore</strong>, come casella &#8220;<em>Via!</em>&#8221; del Monopoli.</p>
<p>Dopotutto, se pensate ai vostri trascorsi scolastici, quali insegnanti ricordate in modo pienamente positivo? Per estensione, non avete forse ricordi spensierati e gioiosi di qualcuno che vi consentiva di provare qualcosa in assoluta libertà e neppure vi sgridava nel caso commetteste qualche errore? Quanto siete migliorati grazie a quei momenti?</p>
<p>Liberate il vostro utente, concedetegli di sbagliare e lui imparerà da solo. Fornite linee guida per non farsi male, non ordini da eseguire. Dategli una <em>sandbox</em> per farsi le ossa e lui vi ringrazierà.</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/formazione/'>Formazione</a>, <a href='http://rejex.wordpress.com/category/informatica/'>Informatica</a> Tagged: <a href='http://rejex.wordpress.com/tag/fat32/'>FAT32</a>, <a href='http://rejex.wordpress.com/tag/formazione/'>Formazione</a>, <a href='http://rejex.wordpress.com/tag/informatica-di-base/'>Informatica di base</a>, <a href='http://rejex.wordpress.com/tag/sandbox/'>Sandbox</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/11932/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/11932/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/11932/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/11932/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/11932/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/11932/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/11932/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/11932/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/11932/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/11932/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/11932/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/11932/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/11932/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/11932/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11932&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2012/01/02/and-sandbox-for-all/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:thumbnail url="http://rejex.files.wordpress.com/2012/01/sandbox.jpg?w=150" />
		<media:content url="http://rejex.files.wordpress.com/2012/01/sandbox.jpg?w=150" medium="image">
			<media:title type="html">sandbox</media:title>
		</media:content>

		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2012/01/sandbox.jpg" medium="image">
			<media:title type="html">sandbox</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://i275.photobucket.com/albums/jj308/rejectedx/risk-free.jpg" medium="image">
			<media:title type="html">Risk Free</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2012/01/02/and-sandbox-for-all/</feedburner:origLink></item>
		<item>
		<title>Sull’espansione del software nel tempo…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/ANQA4X-aeqg/</link>
		<comments>http://rejex.wordpress.com/2011/12/27/sull-espansione-del-software-nel-tempo/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 06:25:02 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[JP's Law on Software Expansion]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Zawinski's Law of Software Envelopment]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=11882</guid>
		<description><![CDATA[Un celebre aforisma, spesso veritiero negli effetti, così recita: Zawinski&#8217;s Law of Software Envelopment &#8220;Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.&#8221; Una mia personale revisitazione generica di quella legge: JP&#8217;s Law on Software Expansion &#8220;Every software attempts to expand until [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11882&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Un celebre aforisma, spesso veritiero negli effetti, così recita:</p>
<blockquote><p><strong><a href="http://en.wikipedia.org/wiki/Jamie_Zawinski#Zawinski.27s_law_of_software_envelopment">Zawinski&#8217;s Law of Software Envelopment</a></strong></p>
<p>&#8220;Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.&#8221;</p></blockquote>
<p>Una mia personale revisitazione generica di quella legge:</p>
<blockquote><p><strong>JP&#8217;s Law on Software Expansion</strong></p>
<p>&#8220;Every software attempts to expand until it can even make coffee. Just before reaching that goal, someone else complains about that huge mess and will start a new tiny replacement project.&#8221;</p></blockquote>
<p><span id="more-11882"></span></p>
<p>Un buon software è spesso il frutto di un buon compromesso circa il numero di funzionalità incluse e &#8220;maneggiabili&#8221; da un utente medio.</p>
<p><a href="http://rejex.wordpress.com/tag/programmazione/"><img class="alignleft wp-image-8676" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100&h=100" alt="" width="100" height="100" /></a>Quello che molti sviluppatori non digeriscono proprio o fanno finta di ignorare è che l&#8217;utente medio si stanca in fretta di trovare sempre nuove funzionalità da imparare nelle sempre nuove versioni di programmi che utilizza: presto o tardi quel tipo di utente si ancorerà a vita ad una specifica <em>release</em> di un dato programma, rifiutando qualunque <em>upgrade</em>, oppure inizierà a cercare qualcosa di alternativo, che soddisfi tutte le sue necessità, ma senza farlo ammattire.</p>
<p>Capisco anche che il marketing spinga costantemente per poter disporre e vendere nuovi prodotti con nuove fantasmagoriche funzionalità, tuttavia questo non coincide necessariamente (<em>o non coincide affatto</em>) con il &#8220;Bene&#8221; del cliente.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Quante funzionalità può avere uno spreadsheet come Excel, quante ne conoscete e quante ne usate davvero? (Perfino voi cultori di questo genere di programma!)</em></td>
</tr>
</table>
<p></p>
<p><a href="http://rejex.files.wordpress.com/2015/12/expand.png"><img src="http://rejex.files.wordpress.com/2015/12/expand.png?w=150" alt="" title="expand" width="150" class="alignleft wp-image-11898" /></a>Mi rendo conto che dare la colpa solamente al marketing sia un&#8217;ottima scusante, ma il problema è che noi stessi, gli sviluppatori, siamo i primi responsabili dell&#8217;espansione del software: se intravediamo la possibilità di aggiungere qualcosa ad un nostro progetto <em>perchè ci piace</em> o perchè sentiamo che <em>ci serve</em>, è molto probabile che l&#8217;aggiungeremo comunque, anche se non è fondamentale. </p>
<p>Arriviamo ad un punto essenziale: il bravo sviluppatore sa dire e sa dirsi no. Sa resistere cioè alle richieste che provengono dall&#8217;esterno per aggiungere questo e quest&#8217;altro (<em>spesso non necessari se non &#8220;per fare numero&#8221; sulle brochure</em>) ma <strong>sa soprattutto controllare il suo impeto creativo</strong>.</p>
<p>Non si tratta semplicemente di negare qualcosa ad un <a href="http://en.wikipedia.org/wiki/Power_user"><em>power user</em></a> (<em>ed uno sviluppatore lo è per definizione!</em>) o un utente alle prime armi, si tratta di <strong>bilanciare</strong> un prodotto perchè sia usabile da entrambi e senza che nessuno dei due prenda il sopravvento come pubblico-target (<em>a meno di software specifico, ovviamente</em>).</p>
<p>Anzi, diciamocelo, se il software che viene progettato non è pensato per un uso iperspecialistico, dovendo scegliere, è meglio dire no al <em>power user</em>. Tanto quel tipo di utente ha sempre qualcosa di cui lamentarsi, ha sempre qualcosa di cui avverte la mancanza e che vi rinfaccerà alla prima occasione. Se poi è così bravo, magari modificherà o ricrereerà comunque da zero il vostro progetto, a suo uso e consumo. Per cui, perchè inseguire questo tipo di <em>cliente difficile</em>?</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>I power user &#8211; per quanto possa dar loro fastidio ribadirlo &#8211; sono numericamente poca cosa rispetto alla restante massa di utenti. Costituiscono certamente una minoranza forte e combattiva, è vero, ma non per questo devono averla sempre vinta.</em></td>
</tr>
</table>
<p></p>
<p><font size='+1' color='#005197'>Nel mondo FOSS è anche peggio&#8230;</font></p>
<p>Il mondo <a href="http://it.wikipedia.org/wiki/Free_and_open_source_software"><em>FOSS</em></a> è una fucina di talento, un porto in cui le persone vanno e vengono, un ambito in cui il software non sta mai fermo. I progetti più importanti lo sono anche e soprattutto in virtù delle <strong>comunità</strong> che ruotano loro intorno; in ciascuna di esse si annida ogni genere di sviluppatore, da quello che spinge per fare il caffè istantaneo a quello che invece tende a frenare sistematicamente ogni novità.</p>
<p>Prima o poi, passo immancabile, tutti i progetti di successo si trovano alle strette fra &#8220;<em>progressisti</em>&#8221; e &#8220;<em>conservatori</em>&#8221; e l&#8217;esito di un tale scontro varia a seconda di molti fattori. Il vero problema, tuttavia, sono le frammentazioni del software a seguito di diverbi più o meno espliciti sull&#8217;evoluzione dei progetti FOSS.</p>
<p>Prendiamo un &#8220;caso storico&#8221;, il browser <a href="http://it.wikipedia.org/wiki/Epiphany_(browser)"><em>Epiphany</em></a>:</p>
<blockquote><p><em>Epiphany è la naturale evoluzione di Galeon (un progetto amministrato da Marco Pesenti Gritti) che aveva come obiettivo lo sviluppo di un programma che fungesse solo da browser. Il passaggio alla versione 2 delle librerie GTK+ ha portato molte novità (e incompatibilità), così si è optato per la riscrittura da zero del programma: Galeon è stato gradualmente inglobato in Epiphany.</em></p></blockquote>
<p>Wikipedia inglese è <a href="http://en.wikipedia.org/wiki/Epiphany_(web_browser)">più esplicita</a>:</p>
<blockquote><p><em>&#8220;Epiphany is an open source web browser for the GNOME desktop environment. The browser is a descendant of Galeon and <strong>was created after developer disagreements about Galeon&#8217;s growing complexity</strong>.&#8221;</em></p></blockquote>
<p>Questo è solo un esempio di un vastissimo elenco. L&#8217;ultimo in ordine di tempo è il progetto <a href="http://razor-qt.org/screenshots/"><em>Razor-Qt</em></a>, l&#8217;ennesimo desktop environment, nato leggero, che sembra una reimplementazione di KDE 2/3.</p>
<p>Sul fronte GNOME, il fork di GNOME2, <em>MATE</em>, è invece un buon esempio di progetto nato come prosecuzione di qualcosa di dichiarato deprecato (GNOME2, appunto). <a href="http://linuxmint.com/rel_lisa_whatsnew.php">Dal sito</a> della distribuzione Mint, a sua volta una derivata di Ubuntu:</p>
<blockquote><p><em>&#8220;MATE is a fork of Gnome 2 which is compatible with Gnome 3&#8243;</em></p></blockquote>
<p>Non proseguirò oltre negli esempi. Mi soffermerò però sul punto che reputo essenziale: un software rimane vivo se viene seguito e migliorato costantemente.</p>
<p><strong>&#8220;Migliorare&#8221; però non è solo &#8220;espandere&#8221;</strong>. Continuare ad aggiungere <em>feature</em> non è fare del bene nè al software (<em>&#8220;più roba c&#8217;è, più roba si può rompere&#8221;</em>) nè agli utenti (<em>&#8220;più roba c&#8217;è, più gli utenti si romperanno di usarlo&#8221;</em>).</p>
<p>Migliorare è prima di ogni altra cosa <strong>semplificare</strong>, agevolare l&#8217;utente medio, magari nascondendo ma non rimuovendo le funzionalità avanzate per i <em>power user</em>. In questo non mi piace nè l&#8217;approccio di KDE, zeppo di opzioni e parametri di configurazione anche per le quisquilie più superflue, nè quello di GNOME, troppo zelante nel levare tutto quello che &#8211; a sua detta &#8211; potrebbe confondere l&#8217;utente.</p>
<p>La virtù, al solito sta nel mezzo: un sistema semplice ma estendibile (<em>es: tramite <a href="http://rejex.wordpress.com/2011/11/21/sulle-architetture-a-plugin/">plugin</a></em>) può far felici tutti i tipi di utenti. Si dà il minimo che l&#8217;utente medio può usare, ma anche ai rompisc&#8230; ehm&#8230; <em>power user</em> la possibilità di personalizzarsi e perfino riprogettarsi il software a loro uso e consumo, senza infastidire il resto del mondo.</p>
<p>Questo è un modo semplice per estendere il software senza renderlo eccessivamente <em>carico</em> fin dall&#8217;inizio e, possibilmente, senza spingere qualcuno a reinventarlo da capo.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>La fluidità e l&#8217;impeto del variegato mondo FOSS sono indubbiamente la riprova che come modello funziona e funziona invero molto bene.</p>
<p>Sono però convinto che la <strong>frammentazione</strong> di questo mondo &#8211; e relativa dispersione delle energie &#8211; sia una cosa estremamente negativa. Diciamolo, è un effetto collaterale estremamente spiacevole, spesso motivato da egoismo, rancore, pigrizia, &#8230; o da qualcos&#8217;altro, come la <a href="http://rejex.wordpress.com/2009/04/06/la-sindrome-not-invented-here/">sindrome NIH</a>.</p>
<p>Come può sorgere qualcosa di positivo da un tale tipo di atteggiamento?</em></td>
</tr>
</table>
<p></p>
<p><em>Che ne pensate! ^^</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/foss/'>FOSS</a>, <a href='http://rejex.wordpress.com/category/gnome/'>GNOME</a>, <a href='http://rejex.wordpress.com/category/kde/'>KDE</a>, <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/foss/'>FOSS</a>, <a href='http://rejex.wordpress.com/tag/gnome/'>GNOME</a>, <a href='http://rejex.wordpress.com/tag/jps-law-on-software-expansion/'>JP's Law on Software Expansion</a>, <a href='http://rejex.wordpress.com/tag/kde/'>KDE</a>, <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a>, <a href='http://rejex.wordpress.com/tag/software/'>Software</a>, <a href='http://rejex.wordpress.com/tag/zawinskis-law-of-software-envelopment/'>Zawinski's Law of Software Envelopment</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/11882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/11882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/11882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/11882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/11882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/11882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/11882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/11882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/11882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/11882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/11882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/11882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/11882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/11882/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11882&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2011/12/27/sull-espansione-del-software-nel-tempo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:thumbnail url="http://rejex.files.wordpress.com/2015/12/expand.png?w=150" />
		<media:content url="http://rejex.files.wordpress.com/2015/12/expand.png?w=150" medium="image">
			<media:title type="html">expand</media:title>
		</media:content>

		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2015/12/expand.png" medium="image">
			<media:title type="html">expand</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2011/12/27/sull-espansione-del-software-nel-tempo/</feedburner:origLink></item>
		<item>
		<title>“Copia cinese” e “copia giapponese”…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/PWDT2f355YU/</link>
		<comments>http://rejex.wordpress.com/2011/12/19/copia-cinese-e-copia-giapponese/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 06:25:21 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Mercato]]></category>
		<category><![CDATA[Competitive intelligence]]></category>
		<category><![CDATA[Copia]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Paycheck]]></category>
		<category><![CDATA[Reverse engineering]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=11171</guid>
		<description><![CDATA[È da quando sono bambino che in casa mia sento ripetere questo genere di discorso: &#8220;Esiste una differenza sostanziale fra il modo con cui ci hanno copiato il &#8216;made in Italy&#8217;. Prendi i cinesi: loro ci copiano e basta, puntano all&#8217;imitazione e la qualità non è così importante. I giapponesi invece copiano per migliorare.&#8221; Ora, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11171&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>È da quando sono bambino che in casa mia sento ripetere questo genere di discorso:</p>
<blockquote><p>&#8220;Esiste una differenza sostanziale fra il modo con cui ci hanno copiato il &#8216;made in Italy&#8217;. Prendi i cinesi: loro ci copiano e basta, puntano all&#8217;imitazione e la qualità non è così importante. I giapponesi invece copiano per migliorare.&#8221;</p></blockquote>
<p>Ora, questa frase <strong>ha almeno ventanni</strong>, nel senso che risale al periodo in cui mio papà lavorava per una celebre (<em>allora</em>) ditta italiana che produceva bambole, poi scomparsa più per <em>smania di outsourcing</em> che non per un qualche problema aziendale (<em>così sostiene lui, conti e prodotti alla mano</em>).</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Sia chiaro: l&#8217;intento di questo post non è polemico nè tantomeno razzista (orrore!).</p>
<p>Ho citato i nomi di due popolazioni, quella cinese e quella giapponese, ma in un contesto composto di stereotipi, ossia di presunti celebri &#8220;copiatori&#8221;. Un po&#8217; come quando fanno con noi italiani, appioppandoci pizza e mandolino.</p>
<p>Non è giusto, sono d&#8217;accordo, ma nascondere i nomi avrebbe reso il discorso un po&#8217; troppo generico per i miei gusti.</em></td>
</tr>
</table>
<p></p>
<p><span id="more-11171"></span></p>
<p>In questo post non parlerò di <em><a href="http://it.wikipedia.org/wiki/Outsourcing">outsourcing</a></em> quanto vorrei riallacciarmi alla sopracitata frase, ossia al &#8220;<em>modo di copiare</em>&#8220;.</p>
<p>Sono certo che in essa vi sia una buona dose di risentimento verso chi &#8220;<em>ha rubato il lavoro</em>&#8221; ma, a sentire mio papà, era la qualità finale che proprio non gli andava giù: spostare la produzione ci può stare, ma darla in mano a qualcuno che fa il lavoro al posto tuo, ma lo fa male seppur a prezzi inferiori, è una situazione imbarazzante ed umiliante.</p>
<p>Imbarazzante per il buon nome della ditta che ci (<em>ri</em>)mette il marchio, umiliante per chi viene sostituito e non si capacita di esserlo stato per colpa di qualcuno che lavora peggio e che &#8220;<em>costa meno</em>&#8220;.</p>
<p><font size='+1' color='#005197'>Cosa ho imparato</font></p>
<p>Io sono uno sviluppatore di software, non un ragioniere come mio papà, eppure non passa il tempo che non mi ritrovi in quelle parole. Non per gli stereotipi (<em>anche se motivati dall&#8217;andamento dalla ditta dove lui ha lavorato</em>), ma per il discorso fra le righe.</p>
<p>Il mercato lo fa chi investe, chi innova, chi si espone e rischia, chi ha un po&#8217; di fortuna (<em>o un surrogato</em>). Il resto del mondo può provare a fare altrettanto, ma molto spesso si può accontentare di ispirarsi o &#8220;copiare&#8221; quel che può. Ossia imitare l&#8217;imitabile, possibilmente evitando di finire vittima di qualche battaglia sui brevetti, magari intentata da qualche &#8220;patent troll&#8221; di professione.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Un esempio di &#8220;reimplementazioni&#8221; (eufemismo) di prodotti esistenti è costituito dai cosiddetti <a href="http://en.wikipedia.org/wiki/Clone_(computing)">cloni</a>:</p>
<blockquote><p><a href="http://rejex.files.wordpress.com/2011/12/attack-of-the-clones-jurassic-park-poster.jpg"><img src="http://rejex.files.wordpress.com/2011/12/attack-of-the-clones-jurassic-park-poster.jpg?w=580&h=200" alt="" title="attack-of-the-clones-jurassic-park-poster" height="200" class="alignleft" /></a>In computing, a clone is a hardware or software system that is designed to mimic another system.</p>
<p>Compatibility with the original system is usually the explicit purpose of cloning hardware or low-level software such as operating systems (e.g. AROS and MorphOS are intended to be compatible with AmigaOS).</p>
<p>Application software can be cloned simply by providing similar functionality (all word processors have the same basic purpose), but may also be designed to support specific file formats (e.g., OpenOffice.org is intended to supplant Microsoft Office).</p>
<p>Clones are created for various reasons, including competition, standardization, and availability across platforms.</p></blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p>Il passo dopo non è da tutti e separa chi copia e basta da chi vuole emrgere: copiare e migliorare, per mantenersi competitivi. Una specie di partita a guardie e ladri dove qualcuno ti copia ma poi si differenzia &#8211; e magari si salva pure dal punto di vista legale &#8211; apportando dei miglioramenti.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Condividere le conoscenze è una cosa estremamente positiva e spesso anche necessaria quando si lavora con altre persone o con altre aziende. Attenzione però a chi ed a come si forniscono informazioni.</p>
<p>Da un articolo recente di <a href="http://www.theregister.co.uk/2008/05/09/bae_stealth_piracy_report/">The Register</a>:</p>
<blockquote><p>
Global arms and aerospace colossus BAE Systems this week released a high-profile audit into its internal ethics and served it up with a big slice of humble pie as it promised to be a better corporate citizen in future.</p>
<p>But even as BAE sought to draw a veil over previous alleged indiscretions, it emerged that US officials have speculated that BAE, collaborating with US firms to build the supersonic, stealthed Joint Strike Fighter (JSF), could have allowed secret American military technology to move overseas, raising the possibility that the UK could benefit from expensive American research and development &#8211; even perhaps sell it around the world. [...]</p></blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p>Parlare di copie significa chiamare in causa &#8220;processi&#8221; più o meno legali: si va dalla copia spudorata, magari ottenuta rubando segreti industriale, al <a href="http://it.wikipedia.org/wiki/Reverse_engineering">reverse engineering</a> brutale o quello più o meno legale (es: <a href="http://en.wikipedia.org/wiki/Clean_room_design">clean room design</a>).</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Per un esempio di furto di segreti industrali e relativa copia spudorata vi consiglio l&#8217;eccellente libro &#8220;<a href="http://www.amazon.com/Sticky-Fingers-Managing-Economic-Espionage/dp/0595301290/ref=sr_1_7?s=books&amp;ie=UTF8&amp;qid=1324133752&amp;sr=1-7">Sticky Fingers: Managing the Global Risk of Economic Espionage</a>&#8220;: veramente un bel libro.</p>
<p>Se vi affascina il mondo della &#8220;<a href="http://en.wikipedia.org/wiki/Competitive_intelligence">competitive intelligence</a>&#8221; più spinta, ne trovate un breve spezzone nel bel film &#8220;<a href="http://en.wikipedia.org/wiki/Competitive_intelligence">The Corporation</a>&#8220;, in cui parla un professionista di quel settore, Marc Barry.</p>
<p>Se vi interessa infine un esempio cinematografico di &#8220;copia e miglioramento&#8221;, potete trovarlo nel film di fantascienza &#8220;<a href="http://en.wikipedia.org/wiki/Paycheck_(film)">Paycheck</a>&#8220;, tratto da una storia di Dick, precisamente nel lavoro quotidiano del protagonista: </p>
<blockquote><p>&#8220;In the near future, Michael Jennings is a reverse engineer; he analyzes his clients&#8217; competitors&#8217; technology and recreates it, often adding improvements beyond the original specifications. [...]&#8220;</p></blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p><font size='+1' color='#005197'>Restando nel mondo informatico &#8230;</font></p>
<p>Un esempio famoso è il progetto <a href="http://en.wikipedia.org/wiki/Hadoop"><em>Hadoop</em></a>:</p>
<blockquote><p><em>&#8220;Apache Hadoop is a software framework that supports data-intensive distributed applications under a free license. It enables applications to work with thousands of nodes and petabytes of data. Hadoop was inspired by Google&#8217;s MapReduce and Google File System (GFS) papers.&#8221;</em></p></blockquote>
<p>Un progetto che è nato come reimplementazione di un&#8217;idea e pian piano ha preso piede e supporto: l&#8217;elenco delle ditte che lo supportano è lungo. Di qualche giorno fa <a href="http://www.pcworld.com/businesscenter/article/246051/microsoft_azure_hosts_hadoop_other_opensource_apps.html">la notizia</a> che anche Microsoft ha iniziato ad impiegarlo e permetterne l&#8217;uso nella sua piattaforma cloud, Azure. C&#8217;è addirittura <a href="http://rethrick.com/#waving-goodbye">chi dice che ormai sia meglio dell&#8217;originale</a> da cui trae spunto. </p>
<p>Notate il trucco: rendere le &#8220;copie&#8221; OpenSource oppure parteciparne allo sviluppo sembra un buon modo per poter copiare, poi estendere/migliorare ed infine guadagnarci, spendendo il giusto e senza esporsi troppo a livello legale.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2011/12/fun.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Chi dice che l&#8217;OpenSource fa male al capitalismo? (Sarcasmo)</em></td>
</tr>
</table>
<p></p>
<p><font size='+1' color='#005197'>Morale della fiaba</font></p>
<p>Con tutto ciò non sto invitando nessuno a copiare il lavoro di nessun altro, sia chiaro. Tuttavia, nel caso questa fosse la vostra scelta, vi invito a non fermarvi alla copia più o meno spudorata, ma a perfezionarla. Se proprio copia deve essere, almeno qualcosa di vostro e di nuovo, mettetecelo.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Rubare le idee di un altro è un atto ingiusto e reprensibile, ma buttarlo fuori dal mercato perchè una reimplementazione delle sue idee costa meno è pure un atto ignobile, di cui vergognarsi. A prescindere da quello che sostiene una certa teoria capitalistica.</em></td>
</tr>
</table>
<p></p>
<p><em>Salire sulle spalle dei giganti</em> per un giretto non previsto è un conto, approfittarne spudoratamente facendosi accompagnare ovunque (<em>cioè una copia spudorata ripetuta sistematicamente nel tempo</em>) è un&#8217;altra cosa.</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/mercato/'>Mercato</a> Tagged: <a href='http://rejex.wordpress.com/tag/competitive-intelligence/'>Competitive intelligence</a>, <a href='http://rejex.wordpress.com/tag/copia/'>Copia</a>, <a href='http://rejex.wordpress.com/tag/hadoop/'>Hadoop</a>, <a href='http://rejex.wordpress.com/tag/opensource/'>OpenSource</a>, <a href='http://rejex.wordpress.com/tag/paycheck/'>Paycheck</a>, <a href='http://rejex.wordpress.com/tag/reverse-engineering/'>Reverse engineering</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/11171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/11171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/11171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/11171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/11171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/11171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/11171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/11171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/11171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/11171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/11171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/11171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/11171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/11171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11171&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2011/12/19/copia-cinese-e-copia-giapponese/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:thumbnail url="http://rejex.files.wordpress.com/2011/12/attack-of-the-clones-jurassic-park-poster.jpg?w=94" />
		<media:content url="http://rejex.files.wordpress.com/2011/12/attack-of-the-clones-jurassic-park-poster.jpg?w=94" medium="image">
			<media:title type="html">attack-of-the-clones-jurassic-park-poster</media:title>
		</media:content>

		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2011/12/attack-of-the-clones-jurassic-park-poster.jpg" medium="image">
			<media:title type="html">attack-of-the-clones-jurassic-park-poster</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2011/12/fun.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2011/12/19/copia-cinese-e-copia-giapponese/</feedburner:origLink></item>
		<item>
		<title>Sulla “razionalizzazione post-acquisto”…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/AWNOCGghaNs/</link>
		<comments>http://rejex.wordpress.com/2011/12/12/sulla-razionalizzazione-post-acquisto/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 06:25:16 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Mercato]]></category>
		<category><![CDATA[Strategie]]></category>
		<category><![CDATA[Brand]]></category>
		<category><![CDATA[Commercio]]></category>
		<category><![CDATA[Razionalizzazione post-acquisto]]></category>
		<category><![CDATA[Specchi dimagrenti]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=11821</guid>
		<description><![CDATA[Tempo addietro lessi da qualche parte sulla Rete &#8211; sfortunatamente non trovo più l&#8217;URL &#8211; un articolo in cui si parlava dell&#8217;ennesimo studio scientifico &#8220;particolare&#8221;, in cui veniva &#8220;dimostrato&#8221; il legame indissolubile fra gli acquisti di una persona ed i sui gusti personali. Ovviamente, penso non serva uno studio per capirne la portata, mettere in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11821&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rejex.files.wordpress.com/2011/12/purchases.png"><img src="http://rejex.files.wordpress.com/2011/12/purchases.png?w=200" alt="" title="purchases" width="200" class="alignleft wp-image-11836" /></a>Tempo addietro lessi da qualche parte sulla Rete &#8211; sfortunatamente non trovo più l&#8217;URL &#8211; un articolo in cui si parlava dell&#8217;ennesimo studio scientifico &#8220;particolare&#8221;, in cui veniva &#8220;dimostrato&#8221; il legame indissolubile fra gli acquisti di una persona ed i sui gusti personali.</p>
<p>Ovviamente, penso non serva uno studio per capirne la portata, mettere in dubbio un acquisto può equivalere a mettere in discussione il raziocinio dell&#8217;acquirente.</p>
<p>Come se sbagliare un acquisto fosse una prova della stupidità di una persona&#8230;</p>
<p><span id="more-11821"></span></p>
<p><font size='+1' color='#005197'>Indagando sugli acquisti</font></p>
<p>Non sono uno psicologo nè il marketing è il mio campo, però non credo serva una terza laurea in queste discipline per osservare ed interpretare le reazioni delle persone intorno a noi quando si prova a discutere di acquisti.</p>
<p>Indipendentemente dallo spirito con cui si tratta l&#8217;argomento, critico-indagatore o neutro che sia, è facile osservare che l&#8217;acquirente di turno tende a mettersi sulla difensiva <em>a priori</em>, soprattutto quando gli acquisti non sono esattamente economici o appaiono insoliti rispetto alle sue scelte abituali.</p>
<p>Ovviamente mi metto nel novero, nel senso che in questo non sono diverso da nessuno: il marketing sa il fatto suo (<em>cfr. bel post <a href="http://www.spring.org.uk/2011/03/why-we-buy-how-to-avoid-10-costly-cognitive-biases.php">&#8220;Why We Buy: How to Avoid 10 Costly Cognitive Biases&#8221;</a></em>).</p>
<p>Ad esempio, dovendo parlare di qualcosa appena comprato, si mette le mani avanti fin da subito con frasi come:</p>
<blockquote><p>&#8220;<em>Era in offerta!&#8221;,<br />
&#8220;L&#8217;ho trovato in Rete a poco!&#8221; o<br />
&#8220;Ho risparmiato un anno intero per togliermi questo sfizio!</em>&#8220;</p></blockquote>
<p>In alternativa lo si compara subito con qualcos&#8217;altro, magari ben più costoso e/o meno &#8220;potente&#8221;, in modo da salvarsi &#8220;<em>per comparazione</em>&#8220;.</p>
<p>C&#8217;è addirittura chi mente sul prezzo di acquisto, abbassandolo, pur di passare per un <em>genio-dell&#8217;acquisto-ipescontato</em> o per non farsi sbeffeggiare: salvo i ricchi <em>io-compro-solo-cose-al-top-nei-negozi-al-top-e-mi-bullo-di-questo</em>, il resto del mondo detesta spendere di più per lo stesso oggetto comprato dal vicino.</p>
<p>Tutta questa serie di trucchetti mentali, ho scoperto recentemente, rientra nella cosiddetta <em><strong>razionalizzazione post-aquisto</strong></em> (<em>&#8220;Post-purchase rationalization&#8221;</em>).</p>
<p><font size='+1' color='#005197'>No, non è una malattia!</font></p>
<p>Da <a href="http://en.wikipedia.org/wiki/Post-purchase_rationalization">Wikipedia</a>:</p>
<blockquote><p><em>&#8220;<strong>Post-purchase rationalization</strong> is a cognitive bias whereby someone who purchases an expensive product or service overlooks any faults or defects in order to justify their purchase. It is a special case of choice-supportive bias.&#8221;</em></p></blockquote>
<p>A sua volta, il <em>pregiudizio a supporto delle scelte</em> (<em>choice-supportive bias</em>) è così definito <a href="http://en.wikipedia.org/wiki/Choice-supportive_bias">su Wikipedia</a>:</p>
<blockquote><p>&#8220;In cognitive science, <strong>choice-supportive bias</strong> is the tendency to retroactively ascribe positive attributes to an option one has selected. It is a cognitive bias.&#8221;</p></blockquote>
<p>Sostanzialmente si medita seriamente sull&#8217;acquisto dopo averlo compiuto, cercando scuse per giustificarlo prima con sè stessi e poi, nel caso, a terzi. Penso sia chiaro che una spesa &#8220;insolita&#8221; urti prima noi stessi. <a href="http://en.wikipedia.org/wiki/Cognitive_dissonance">Da Wikipedia</a>:</p>
<blockquote><p><em>&#8220;<strong>Cognitive dissonance</strong> is a discomfort caused by holding conflicting ideas simultaneously. The theory of cognitive dissonance proposes that people have a motivational drive to reduce dissonance. They do this by changing their attitudes, beliefs, and actions. Dissonance is also reduced by justifying, blaming, and denying. [...]</p>
<p>Experience can clash with expectations as, for example, with buyer&#8217;s remorse following the purchase of an expensive item. In a state of dissonance, people may feel surprise, dread, guilt, anger, or embarrassment. People are biased to think of their choices as correct, despite any contrary evidence. This bias gives dissonance theory its predictive power, shedding light on otherwise puzzling irrational and destructive behavior.&#8221;</em></p></blockquote>
<p>Se poi nel frattempo dovessero emergere anche problemi, le &#8220;riflessioni interiori&#8221; aumentano. Come accettare lo smacco di qualcosa che, a caro prezzo, non ci soddisfa del tutto? Come accettare che il nostro costoso acquisto abbia dei difetti?</p>
<p>Gli esempi di sprecano: quello più comune è il vestito di un certo livello, magari più costoso del nostro &#8220;solito&#8221; vestito, che probabilmente indosseremo una sola volta o che &#8220;per magia&#8221; ci sta male appena varchiamo l&#8217;uscio del negozio.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2011/12/fun.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em><a href="http://lei.excite.it/camerini-con-specchi-dimagranti-le-donne-britanniche-N70288.html"><strong>Camerini con specchi dimagranti, le donne protestano</strong></a></p>
<p>Gran Bretagna palcoscenico di una singolare protesta: le donne inglesi infatti si sarebbero accorte (solo ora, vien da dire) che nei negozi di diverse catene di abbigliamento sono utilizzati strategici specchi dimagranti che traggono in inganno le clienti e le invogliano a comprare.</p>
<p>[...] hanno scoperto che, in effetti, diverse note catene di abbigliamento usano il trucco dello specchio magico. Ma come hanno fatto a capirlo? Molto semplice: mettendo davanti allo specchio sospetto un CD, l&#8217;immagine riflessa era ovale.</em></td>
</tr>
</table>
<p></p>
<p>Di esempi ne possiamo fare all&#8217;infinito. Quelli più tragicomici, probabilmente, sono quelli che riguardano i &#8220;fissati&#8221; delle varie marche: in quel caso l&#8217;elemento-<em>brand</em> amplifica ogni cosa.</p>
<p><font size='+1' color='#005197'>I <em>fanatici</em></font></p>
<p>Non vorrei dover citare nuovamente l&#8217;<a href="http://it.wikipedia.org/wiki/IPhone_4#Problemi_tecnici">antenna-gate</a> dell&#8217;iPhone 4, ma &#8211; viva la <a href="http://it.wikipedia.org/wiki/Preterizione">preterizione</a>! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  &#8211; è troppo gustoso e recente come fatto che proprio non mi riesce di trattenermi.</p>
<p>Non mi interessa il fatto tecnico in sè. Quello che veramente mi ha tramortito &#8211; al limite del tipo di risata definita dall&#8217;acronimo <a href="http://en.wiktionary.org/wiki/LMAO"><em>LMAO</em></a> &#8211; sono state le &#8220;<em>arrampicate sugli specchi</em>&#8221; di alcuni acquirenti per &#8220;<em>giustificare</em>&#8221; il bug, l&#8217;acquisto e quindi sè stessi. Curiosa questa sorta di &#8220;<em>catena di responsabilità</em>&#8220;: dall&#8217;oggetto costoso alla persona in carne ed ossa che l&#8217;ha comprato.</p>
<p>Ho sentito e letto di tutto. Da chi sparava ad alzo zero contro la concorrenza asiatica (<em>se avete pensato qualcosa come &#8220;i soliti comunisti sud-coreani!&#8221;, la battuta è divertente ma geograficamente e politicamente errata</em>), a chi minimizzava il problema dicendo di non averlo ancora incontrato o che si trattasse di una &#8220;leggenda urbana&#8221;, chi reagiva d&#8217;impeto con vari improperi verso gli intervistatori, eccetera.</p>
<p>Esattamente come i politici che cercano di dirottare le domande scomode sugli avversari: quando iniziano con &#8220;<em>e voi allora, che&#8230;</em>&#8221; o con &#8220;<em>non accetto lezioni da &#8230;</em>&#8221; sostanzialmente stanno ammettendo le colpe, ma non apertamente.</p>
<p>Il &#8220;consumatore&#8221; che diventa &#8220;difensore&#8221; di una marca specifica, penso rappresenti l&#8217;<em>azimut</em> del marketing per la marca stessa: più una persona diventa un &#8220;fan&#8221; dei prodotti di una qualche ditta, più &#8220;ci mette la faccia&#8221;, più ne prenderà a cuore la difesa.</p>
<blockquote><p><em><a href="http://techreport.com/discussions.x/21294"><strong>The science of fanboyism</strong></a></p>
<p>&#8220;We&#8217;ve all encountered them. They lurk in Internet message boards, comment threads, and chatrooms. Addressing anyone and everyone, they type up lengthy tirades with Cheeto-stained fingers, extolling the virtues of their product or brand of choice. They angrily accuse even the most impartial reviewers of taking handouts from reviled competitors of a beloved company, and they casually and systematically dismiss any evidence that might conflict with their worldview.</p>
<p>They&#8217;re known in our parlance as fanboys.&#8221;</em></p></blockquote>
<p><font size='+1' color='#005197'>Non è solo una questione di marche</font></p>
<p>Non vorrei passare per un saputello. Come ho detto, io stesso sono incline e vittima di questo meccanismo di razionalizzazione sugli acquisti. In realtà, credo, lo stesso discorso esuli da quell&#8217;aspetto commerciale, ossia interessi le scelte compiute.</p>
<p><strong>Scegliere è in qualche modo esporsi</strong>. Tanto tempo fa, quando ho attraversato il mio momento da <a href="http://rejex.wordpress.com/2011/03/21/fissato-col-foss/">fissato del FOSS</a>, mi ero spinto ben oltre quello che avrei voluto e dovuto fare: quando ci si fissa con qualcosa, si finisce ad eccedere nella sua difesa e, di riflesso, nella propria.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Curiosamente il FOSS non è un &#8220;brand&#8221; in senso stretto, ma è più una filosofia di vita, forse. Tuttavia molti dei suoi difensori lo fanno sembrare tale. Per non parlare dei veri &#8220;brand&#8221;, che lo usano come un elemento di marketing.</p>
<p>Un po&#8217; come la <a href="http://it.wikipedia.org/wiki/Green_economy"><strong>green economy</strong></a>: è una bella cosa, piace e suona bene, alleggerisce un poco la coscienza, fa presa sui &#8220;cuori&#8221; del pubblico &#8211; inclusi gli ambientalisti, incredibile! &#8211; e, cosa non da poco, è un marchio che in questo momento tira molto.</p>
<p>In questi casi, dove è il limite fra il promuovere il rispetto dell&#8217;ambiente ed il marketing di un prodotto?</em></td>
</tr>
</table>
<p></p>
<p>Schierarsi mette in moto qualcosa attorno a noi che va oltre noi stessi: in breve, mi ero costruito la nomea di &#8220;Pinguino&#8221;, un fatto che di per sè stesso non mi ha mai dato fastidio. Il problema è che quando qualcuno ti appioppa un&#8217;etichetta e tu non fai nulla per levartela di dosso (<em>o, peggio, incoraggi chi hai davanti a farlo</em>), finisce che ogni tua opinione, oggettiva o meno, viene interpretata come soggetta ad un ovvio pregiudizio di fondo. Un po&#8217; come chiedere un parere politico a qualcuno che ha in tasca la tessera di un partito.</p>
<p>Di più: la gente di aspetta che tu risponda sempre allo stesso modo. Se nel tempo rivedi la tua posizione, ammorbidendola o stravolgendola, passi automaticamente nella categoria &#8220;voltagabbana&#8221; e perfino &#8220;ingrato&#8221;.</p>
<p>Sostanzialmente sto dicendo che se sei un &#8220;<em>fanboy</em>&#8221; di qualcosa o la gente attorno a te ti percepisce come tale, è facilissimo finire in una spirale sempre più stretta in cui, ad un tratto, ti accorgi che stai &#8220;svolgendo una parte&#8221; da cui è difficile uscire. La spirale può portarti a dire cose che non ti saresti mai sognato di dire e quindi, per non rimetterci la faccia, difendere ad oltranza l&#8217;indifendibile. Non è facile cambiare idea &#8220;pubblicamente&#8221;, perchè la cosa ha un impatto non indiffferente anche sul piano sociale.</p>
<p>Nel tempo, non ho paura di dirlo, ho ammorbidito molto la mia visione sul software commerciale. In parte perchè faccio parte di quel mondo &#8211; non sono ipocrita -, in parte perchè nel frattempo ho parlato con un bel po&#8217; di persone e ho capito che &#8220;ammettere di aver ecceduto&#8221; non equivale a dichiararsi incapaci di intendere e di volere.</p>
<p>La stessa cosa negli acquisti: siccome ho imparato che nel prezzo di un bene concorrono alcune voci che non sono funzione della somma dei costi per realizzarlo e promuoverlo, non esito a condannare me stesso quando compro qualcosa di cui non ho davvero bisogno o per il quale potevo spendere di meno.</p>
<p>Credo che questo tentativo, per quanto di minima portata, sia un buon modo per cominciare a spezzare il vantaggio strategico del marketing su di me. Non funziona sempre, ma alcune piccole soddisfazioni me le sono tolte: di tanto in tanto <strong>il ricordo del rimorso dell&#8217;ultimo incauto acquisto razionalizzato mi spinge ad evitarne di nuovi con troppa facilità.</strong></p>
<p>Non voglio sentirmi nuovamente a disagio per un acquisto di cui non posso essere soddisfatto al 100%.</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/mercato/'>Mercato</a>, <a href='http://rejex.wordpress.com/category/strategie/'>Strategie</a> Tagged: <a href='http://rejex.wordpress.com/tag/brand/'>Brand</a>, <a href='http://rejex.wordpress.com/tag/commercio/'>Commercio</a>, <a href='http://rejex.wordpress.com/tag/mercato/'>Mercato</a>, <a href='http://rejex.wordpress.com/tag/razionalizzazione-post-acquisto/'>Razionalizzazione post-acquisto</a>, <a href='http://rejex.wordpress.com/tag/specchi-dimagrenti/'>Specchi dimagrenti</a>, <a href='http://rejex.wordpress.com/tag/strategie/'>Strategie</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/11821/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/11821/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/11821/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/11821/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/11821/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/11821/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/11821/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/11821/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/11821/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/11821/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/11821/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/11821/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/11821/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/11821/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11821&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2011/12/12/sulla-razionalizzazione-post-acquisto/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
	
		<media:thumbnail url="http://rejex.files.wordpress.com/2011/12/purchases.png?w=150" />
		<media:content url="http://rejex.files.wordpress.com/2011/12/purchases.png?w=150" medium="image">
			<media:title type="html">purchases</media:title>
		</media:content>

		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2011/12/purchases.png" medium="image">
			<media:title type="html">purchases</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2011/12/fun.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2011/12/12/sulla-razionalizzazione-post-acquisto/</feedburner:origLink></item>
		<item>
		<title>L’importanza di scegliere un modello di sviluppo per sè stessi…</title>
		<link>http://feedproxy.google.com/~r/JPsWebPlace/~3/xip_-33vQJ0/</link>
		<comments>http://rejex.wordpress.com/2011/12/05/limportanza-di-scegliere-un-modello-di-sviluppo-per-se-stessi/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 06:25:56 +0000</pubDate>
		<dc:creator>jp</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Bear Programming]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Metodologie Agili]]></category>
		<category><![CDATA[Metodologie di sviluppo]]></category>
		<category><![CDATA[No SIlver Bullet]]></category>
		<category><![CDATA[Pair Programming]]></category>
		<category><![CDATA[Skunk Works]]></category>
		<category><![CDATA[Skunkworks]]></category>

		<guid isPermaLink="false">http://rejex.wordpress.com/?p=11630</guid>
		<description><![CDATA[Esiste un&#8217;enorme quantità di modelli/metodologie di sviluppo. Ce ne sono così tanti che è davvero difficile non trovarne uno adatta a sè stessi. Mi accorgo però che, ripensando anche alla mia formazione accademica, parlare di queste tematiche sembra un voler &#8220;vendere fumo&#8220;, una vera e propria perdita di tempo. In questo post vorrei chiarire qualche [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11630&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rejex.wordpress.com/category/programmazione/"><img class="alignleft" style="border:0 none;margin:5px;" title="programming" src="http://rejex.files.wordpress.com/2010/09/programming.png?w=100" alt="" width="100" /></a>Esiste un&#8217;enorme quantità di modelli/metodologie di sviluppo. Ce ne sono così tanti che è davvero difficile non trovarne uno adatta a sè stessi. Mi accorgo però che, ripensando anche alla mia formazione accademica, parlare di queste tematiche sembra un voler &#8220;<em>vendere fumo</em>&#8220;, una vera e propria perdita di tempo.</p>
<p>In questo post vorrei chiarire qualche punto che mi sta decisamente a cuore.</p>
<p><span id="more-11630"></span></p>
<p><font size='+1' color='#005197'>1. Cosa è una metodologia in soldoni?</font></p>
<p>Una metodologia è prima di tutto un modo rigoroso di fare le cose. Medesimo discorso parlando di filosofia o di modelli di sviluppo: cambiano i termini &#8211; spesso usati un po&#8217; a casaccio, come fossero sinonimi perfetti -, ma il succo è quello.</p>
<p>Quando uno sviluppatore si ferma per un attimo e cerca di riassumere cosa ha imparato fin lì, quali sono gli aspetti migliori e ripetibili del suo lavoro, quali sono i passi che sistematicamente ripercorre, ecco che sta già riflettendo sul suo personale modo di operare. Di più: se riesce ad individuare un filo conduttore, un <em>pattern</em> comportamentale ricorrente, probabilmente sta già avvicinandosi alla sua <strong>personalissima</strong> metodologia.</p>
<p>Detto questo possiamo aprire il discorso anche alle numerosissime e più o meno rigorose nonchè famose metodologie di sviluppo (<em>es: <a href="http://it.wikipedia.org/wiki/Metodologia_agile">metodologie agili</a></em>) che riempiono libri e <em>paper</em> a profusione. </p>
<p>O forse no: non importa quale metodologia uno segua. L&#8217;importante è che scelga quella più adatta a lui e, nel caso non esista già, crearla. L&#8217;importante è estrarre il modo di fare le cose per ripeterle in modo sistematico, senza forzarsi a farlo o perchè &#8220;<em>qualcuno ha detto di fare così</em>&#8220;.</p>
<p>Se ci si forza a fare le cose sempre allo stesso modo, anche quando non serve, si finisce poi a voler usare il proverbiale &#8220;<em>martello</em>&#8221; ovunque:</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em><strong><a href="http://en.wikipedia.org/wiki/Law_of_the_instrument">Law of the instrument</a></strong> (<a href="http://en.wikipedia.org/wiki/Abraham_Maslow">A. Maslow</a>):</p>
<blockquote><p>&#8220;It is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail.&#8221;</p></blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p><font size='+1' color='#005197'>2. Sceglierne una non equivale ad escludere le altre</font></p>
<p>Voglio qui ora affermare, in modo esplicito e diretto, un semplice concetto: <strong>non esiste una singola metodologia di sviluppo o un metodo/modello/filosofia/<em>quello-che-vi-pare</em> che vada bene a chiunque ed in tutti i contesti</strong>.</p>
<p>Questo fatto lapalissiano evidentemente tanto lapalissiano non è: viene spesso dimenticato con l&#8217;ovvia conseguenza delle continue <em>guerre di religione</em> fra i fautori di questa e quella metodologia che, al pari dei tifosi di una squadra di calcio, stravedono solo per la loro fazione, ed escludono le altre <em>a priori</em>.</p>
<p>In ambito informatico, voler essere troppo ortodossi nel rispettare alla lettera una qualche metodologia è come decidere di farsi dettare, punto per punto, il proprio lavoro: ho conosciuto persone che, trovatesi bene lavorando in un certo modo, lo impongono a loro stessi e a chiunque abbia la malaugurata idea di porsi loro di fronte.</p>
<p>Per questo genere di persona non esiste provare, sperimentare altro: trovata la loro scelta, quella è e quella rimarrà, almeno che non succeda qualcosa di grave (<em>ma davvero grave</em>), tale da costringerle al cambiamento. Una variazione estrema nonchè rischiosissima del celebre motto:</p>
<blockquote><p><em>Squadra che vince non si cambia.</em></p></blockquote>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Mai farsi <em>ingabbiare</em> da un insieme di regole troppo stringenti, mai accettare un &#8220;<a href="http://it.wikipedia.org/wiki/Lavaggio_del_cervello">lavaggio del cervello</a>&#8221; metodologico in nome di qualche presunto e duraturo beneficio. Basta davvero poco per passare dall&#8217;ortodossia nel rispettare un metodo al puro fanatismo e quindi alle guerre di religione.</em></td>
</tr>
</table>
<p></p>
<p><font size='+1' color='#005197'>3. Non esiste una scelta assolutamente ottima</font></p>
<p>Non esiste una scelta ottima perchè i vari lavori, per quanto possano assomigliarsi, non sono mai esattamente uguali: il fatto che l&#8217;applicazione di un metodo in un certo contesto si sia rivelata una scelta azzeccata, non dovrebbe renderla l&#8217;<em>Unica Opzione</em>. Al massimo, dovrebbe renderla <em>una</em> delle opzioni favorite nel futuro.</p>
<p>Questo perchè nessuna metodologia, o metodo o filosofia è la migliore ed universalmente applicabile con successo: diffidate da chi vi promette la Luna se seguirete questa o quella metodologia. Nell&#8217;ambito della crittografia si parlerebbe di <a href="http://en.wikipedia.org/wiki/Snake_oil_(cryptography)"><em>snake oil</em></a>, con lo stesso medesimo significato: &#8220;<em>prodotto truffaldino o fasullo</em>&#8220;.</p>
<p>Analogamente non esiste &#8211; e probabilmente non esisterà mai &#8211; qualcosa in grado di aumentare <em>automagicamente</em> ed enormemente la produttività (<em>qualunque cosa essa sia</em>) o l&#8217;efficienza di un lavoro semplicemente applicandola.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/checkmark.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em><strong><a href="http://en.wikipedia.org/wiki/No_Silver_Bullet">No Silver Bullet</a></strong> (<a href="http://en.wikipedia.org/wiki/Fred_Brooks">F. Brooks</a>):</p>
<blockquote><p>&#8220;There is no single development, in either technology or management technique, which by itself promises even one order of magnitude [tenfold] improvement within a decade in productivity, in reliability, in simplicity.&#8221;</p></blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p><font size='+1' color='#005197'>Il solito esempio personale</font></p>
<p>La mia posizione, circa le varie metodologie di sviluppo più famose è di <strong><em>scetticismo a priori</em></strong> (<em>cfr. <a href="http://rejex.wordpress.com/2011/08/08/recensione-agile-project-management-with-scrum/">recensione</a> di un libro sulla metodologia agile <a href="http://it.wikipedia.org/wiki/Scrum">Scrum</a></em>).</p>
<p>Forse perchè è naturale aspettarsi che chi ti vende qualcosa &#8211; ad esempio un libro &#8211; tenda ad esaltare i vantaggi della materia trattata e a dimenticarsi degli aspetti negativi o a diminuirne l&#8217;importanza.</p>
<p>La mia strategia sulle varie metodologie col tempo è divenuta <a href="http://it.wikipedia.org/wiki/Sincretismo"><strong><em>sincretica</em></strong></a>: fusione delle parti che reputo migliori, prese da ciascuna di esse. Nel caso di contrapposizione fra concetti &#8211; capita spesso che due metodologie si scontrino più o meno apertamente su determinati aspetti -, compio una scelta esclusiva.</p>
<p>Ad esempio mi piacciono singoli aspetti di <em>Scrum</em>, dell&#8217;<a href="http://it.wikipedia.org/wiki/Extreme_Programming"><em>Extreme Programming</em></a>, del <em>Tracer-Bullet Development</em>, eccetera. Tuttavia rifiuto di adottarne una &#8211; ed una soltanto &#8211; in nome della <strong>flessibilità di impiego</strong> nell&#8217;assemblarne una mia.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>In &#8220;<a href="http://it.wikipedia.org/wiki/Lord_of_war"><strong>Lord of War</strong></a>&#8220;, uno dei miei film preferiti, ad un tratto comprare questa <a href="http://it.wikiquote.org/wiki/Lord_of_War">bellissima frase</a>:</p>
<blockquote><p><em>&#8220;Ogni fazione in Africa si attribuisce questi nobili nomi: Libertà, Patriottismo, Repubblica Democratica. Credo che loro non ammetterebbero mai quello che sono in realtà, i peggiori oppressori degli ultimi oppressori. Spesso le maggiori atrocità avvengono quando entrambe le parti in lotta si proclamano combattenti per la libertà.&#8221;</em></p></blockquote>
<p>Credo che lo stesso tipo di ragionamento si possa applicare anche ad un discreto numero di metodologie &#8220;mainstream&#8221;: molte di esse parlano apertamente di flessibilità d&#8217;uso, di rifiuto dei fanatismi, di &#8220;libertà&#8221; del programmatore, eccetera.</p>
<p>Salvo poi indicarti &#8211; ooops! &#8211; schemi ultraprecisi da seguire e a prova di &#8220;eretico&#8221;, &#8220;consigli&#8221; più o meno velati sui libri da comprare, training &#8220;ufficiali&#8221; da frequentare (ovviamente tutti a caro prezzo), certificazioni da ottenere, eccetera, eccetera.</p>
<p>Non di rado da una metodologia si dipartono poi nel tempo varie &#8220;scuole di pensiero&#8221;, ognuna con i suoi pseudo-dogmi, i suoi pseudo-guru di riferimento, spesso &#8220;discepoli&#8221; del o dei &#8220;fondatori&#8221;.</p>
<p>Non di rado, infine, si aprono &#8220;guerre di religione&#8221; fra gli &#8220;adepti&#8221; delle varie metodologie.</em></td>
</tr>
</table>
<p></p>
<p><a href="http://en.wikipedia.org/wiki/Pair_programming"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Pair_programming_1.jpg/330px-Pair_programming_1.jpg" alt="" width="150" class="alignleft" /></a> Il <a href="http://en.wikipedia.org/wiki/Pair_programming"><em><strong>pair programming</em></strong></a>, ad esempio, sulla carta è un modo di scrivere e <em>debuggare</em> il codice molto interessante e probabilmente anche utile.</p>
<p>Tuttavia, salvo rari casi (<em>mentoring?</em>), è difficile pensare di adottarlo in pianta stabile, tantomeno dimostrarne in modo incontrovertibile l&#8217;efficienza/efficacia: sembra di sentire quella barzelletta sui carabinieri, che fanno sempre le cose in due ed uno si limita ad osservare o supervisionare.</p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2011/12/fun.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em><strong><a href="http://cm.bell-labs.com/cm/cs/tpop/debugging.html">Bear programming</a></strong> (<a href="http://en.wikipedia.org/wiki/Brian_Kernighan">B. W. Kernighan</a> e <a href="http://en.wikipedia.org/wiki/Rob_Pike">R. Pike</a>):</p>
<blockquote><p><a href="http://harvest.tumblr.com/post/3345003136/pair-bear-programming"><img src="http://28.media.tumblr.com/tumblr_lgroj48yWk1qz9v6wo1_500.png" alt="" width="150" class="alignright" /></a>“Another effective technique is to explain your code to someone else.</p>
<p>This will often cause you to explain the bug to yourself.  Sometimes it takes no more than a few sentences, followed by an embarrassed &#8220;Never mind, I see what&#8217;s wrong.  Sorry to bother you.&#8221;</p>
<p> This works remarkably well; you can even use non-programmers as listeners.  One university computer center kept a teddy bear near the help desk.  Students with mysterious bugs were required to explain them to the bear before they could speak to a human counselor.”</p></blockquote>
<p></em></td>
</tr>
</table>
<p></p>
<p>Credo che il punto principale sia proprio quello: <strong>è fondamentale imparare quanto più possibile di tutto, per scegliere al momento opportuno quale strada percorrere, ma fra più opzioni, non una sola</strong>. Il trucco sta nell&#8217;<em>infischiarsene</em> bellamente se su un dato libro di un certo autore su una data metodologia viene detto che, se non la si segue tutta ed in modo rigoroso, accadranno le &#8220;<em>peggio cose</em>&#8220;.</p>
<p>La mia personale strategia, alla base del mio sopra-citato &#8220;sincretismo metodologico&#8221;, è quello che gli anglofoni definiscono <em>cherry-picking</em>, ossia prendere qui e là le idee che reputo migliori e confezionare qualcosa di nuovo. Mi sono perfino capitati diversi casi in cui ho adottato una certa strategia o metodologia per poi ritrovarmi ad usarne una &#8220;opposta&#8221; in un altro progetto.</p>
<p>Questo vale anche per le <em><a href="http://en.wikipedia.org/wiki/Coding_conventions">coding convention</a></em>. Esempio classico, &#8220;metodologico&#8221; per come opero io: detesto lo stile di indentazione K&amp;R e nei progetti che seguo io, se posso, lo evito. Ma dovendo estendere del codice altrui già esistente e/o dovendo scrivere del codice in un linguaggio in cui è la norma, allora me ne faccio una ragione perchè reputo <strong>la consistenza del codice più importante dell&#8217;aspetto esteriore o dei miei gusti</strong>. Questa regolina fa parte della la mia personalissima &#8220;scala dei valori&#8221; nonchè del mio modo di fare.</p>
<p>Detto questo, possiamo aprire il discorso <em>sogni</em>.</p>
<p><font size='+1' color='#005197'><em>Skunkworks</em></font></p>
<p>Ogni sviluppatore presto o tardi si &#8220;invaghisce&#8221; professionalmente di qualcosa o di qualcuno, diventandone una sorta di &#8220;fan&#8221;. Il mio modello/non-modello preferito nonchè <em>sogno-ultimo-definitivo</em> si chiama <a href="http://en.wikipedia.org/wiki/Skunkworks"><em>Skunk Works</em></a>:</p>
<blockquote><p><em>Skunk Works is an official trademark for the Lockheed Martin Advanced Development Programs (formerly Lockheed Advanced Development Projects).</p>
<p>The designation &#8220;skunk works&#8221;, or &#8220;skunkworks&#8221;, is widely used in business, engineering, and technical fields to describe a group within an organization given a high degree of autonomy and unhampered by bureaucracy, tasked with working on advanced or secret projects.</em></p></blockquote>
<p><a href="http://rejex.files.wordpress.com/2015/11/sr71-blackbird.jpg"><img src="http://rejex.files.wordpress.com/2015/11/sr71-blackbird.jpg?w=150" alt="" title="sr71-blackbird" width="150" class="alignleft wp-image-11706" /></a>Perchè? Semplice: chiunque sia stato in grado di produrre l&#8217;<a href="http://en.wikipedia.org/wiki/SR71">SR71 &#8220;Blackbird&#8221;</a>, il mio aereo militare preferito fin da quando ero bambino (nonchè base dell&#8217;<a href="http://en.wikipedia.org/wiki/Blackbird_(comics)">aereo degli X-Men</a>), sa il fatto suo. E i tizi in questione hanno progettato gran parte degli aerei militari più &#8220;spettacolari&#8221; in circolazione, per cui conoscono davvero bene il loro mestiere.</p>
<p>
<table width="90%">
<tr>
<td style="padding:.2cm;"><img src="http://rejex.files.wordpress.com/2008/10/attenzione.png?w=30&h=30" alt="" width="30" height="30" class="alignnone wp-image-1487" /></td>
<td style="border:ridge 2px;font-family:sans-serif;padding:.25cm;"><em>Sia chiaro: non sono mai stato un &#8220;guerrafondaio&#8221; e nemmeno un amante delle armi. Tuttavia, da tecnico, non posso non rimanere affascinato dai continui e ben foraggiati progressi della tecnologia bellica. Non a caso il &#8220;Blackbird&#8221; non era un caccia ma un ricognitore strategico statunitense, capace di una velocità di Mach 3+.</em></td>
</tr>
</table>
<p></p>
<p>Anzi, sono così bravi nel loro ambito che ormai il nome del loro dipartimento è diventato l&#8217;emblema del loro modo di lavorare e viceversa:</p>
<blockquote><p><em>&#8220;A skunkworks project is one typically developed by a small and loosely structured group of people who research and develop a project primarily for the sake of radical innovation. [...]</p>
<p>A skunkworks project often operates with a high degree of autonomy and unhampered by bureaucracy, tasked with working on advanced or secret projects. These projects are often undertaken in secret with the understanding that if the development is successful then the product will be designed later according to the usual process.&#8221;</em></p></blockquote>
<p><strong>Innovazione radicale al limite del dovere alla segretezza, autonomia e poca burocrazia</strong>: credo sia il sogno di qualunque sviluppatore. Lo è anche il diventare un simbolo di efficienza, ovviamente.</p>
<p>Come dite? Non è un modello ma una filosofia o un contesto operativo o una metodologia? Beh, a dispetto della scelta della terminologia che si può impiegare per definirlo, &#8220;<em>skunkworks</em>&#8221; continua ad essere il mio <em>punto di riferimento &#8220;onirico&#8221;</em> ad alto livello, su cui poi <em>innestare</em> tutto il resto.</p>
<p><em>Che ne pensate?</em></p>
<br />Filed under: <a href='http://rejex.wordpress.com/category/programmazione/'>Programmazione</a> Tagged: <a href='http://rejex.wordpress.com/tag/bear-programming/'>Bear Programming</a>, <a href='http://rejex.wordpress.com/tag/extreme-programming/'>Extreme Programming</a>, <a href='http://rejex.wordpress.com/tag/metodologie-agili/'>Metodologie Agili</a>, <a href='http://rejex.wordpress.com/tag/metodologie-di-sviluppo/'>Metodologie di sviluppo</a>, <a href='http://rejex.wordpress.com/tag/no-silver-bullet/'>No SIlver Bullet</a>, <a href='http://rejex.wordpress.com/tag/pair-programming/'>Pair Programming</a>, <a href='http://rejex.wordpress.com/tag/programmazione/'>Programmazione</a>, <a href='http://rejex.wordpress.com/tag/skunk-works/'>Skunk Works</a>, <a href='http://rejex.wordpress.com/tag/skunkworks/'>Skunkworks</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rejex.wordpress.com/11630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rejex.wordpress.com/11630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rejex.wordpress.com/11630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rejex.wordpress.com/11630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rejex.wordpress.com/11630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rejex.wordpress.com/11630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rejex.wordpress.com/11630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rejex.wordpress.com/11630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rejex.wordpress.com/11630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rejex.wordpress.com/11630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rejex.wordpress.com/11630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rejex.wordpress.com/11630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rejex.wordpress.com/11630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rejex.wordpress.com/11630/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rejex.wordpress.com&#038;blog=2279580&#038;post=11630&#038;subd=rejex&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rejex.wordpress.com/2011/12/05/limportanza-di-scegliere-un-modello-di-sviluppo-per-se-stessi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:thumbnail url="http://rejex.files.wordpress.com/2015/11/sr71-blackbird.jpg?w=150" />
		<media:content url="http://rejex.files.wordpress.com/2015/11/sr71-blackbird.jpg?w=150" medium="image">
			<media:title type="html">sr71-blackbird</media:title>
		</media:content>

		<media:content url="http://0.gravatar.com/avatar/2ccb6e3091c03063f240ba4a9f1bef68?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">jp</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2010/09/programming.png" medium="image">
			<media:title type="html">programming</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/checkmark.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Pair_programming_1.jpg/330px-Pair_programming_1.jpg" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2011/12/fun.png" medium="image" />

		<media:content url="http://28.media.tumblr.com/tumblr_lgroj48yWk1qz9v6wo1_500.png" medium="image" />

		<media:content url="http://rejex.files.wordpress.com/2015/11/sr71-blackbird.jpg" medium="image">
			<media:title type="html">sr71-blackbird</media:title>
		</media:content>

		<media:content url="http://rejex.files.wordpress.com/2008/10/attenzione.png" medium="image" />
	<feedburner:origLink>http://rejex.wordpress.com/2011/12/05/limportanza-di-scegliere-un-modello-di-sviluppo-per-se-stessi/</feedburner:origLink></item>
	</channel>
</rss>

