<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnetmarche.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Recensioni</title><link>http://dotnetmarche.org/blogs/recensioni/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>JQuery In action</title><link>http://dotnetmarche.org/blogs/recensioni/archive/2008/08/27/jquery-in-action.aspx</link><pubDate>Wed, 27 Aug 2008 04:38:34 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:4056</guid><dc:creator>Alkampfer</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/recensioni/rsscomments.aspx?PostID=4056</wfw:commentRss><comments>http://dotnetmarche.org/blogs/recensioni/archive/2008/08/27/jquery-in-action.aspx#comments</comments><description>&lt;p&gt;Ho appena terminato il libro JQuery in action e debbo dire che è veramente un libro interessante. Prima di tutto è molto piccolo, per cui si legge velocemente e la parte più importante, ovvero la prima, può essere racchiusa in 150 pagine. &lt;/p&gt; &lt;p&gt;Non sono uno sviluppatore di interfacce web, sebbene negli ultimi due anni ho lavorato a progetti web, nei quali però l&amp;#39;interazione javascript è stata limitata all&amp;#39;uso della microsoft ajax library. La difficoltà maggiore che ho incontrato è stata quella di non conoscere bene il DOM e soprattutto del dover testare gli script per lo meno in FireFox ed IE. &lt;/p&gt; &lt;p&gt;Il risultato è stato quello di perdere letteralmente tempo a capire come individuare gli oggetti nelle pagine, come poterli modificare in reazione alla risposta di una chiamata ajax etc etc. Leggendo JQuery in Action ho compreso come in realtà non si può pensare di scrivere codice javascript da zero, ma sia necessario comunque affidarsi ad una libreria testata e crossbrowser. JQuery è la prima libreria seria javascript che ho imparato, e già leggendo il libro ho subito compreso come molte delle cose che ho fatto in javascript sarebbero state fatte in meno della metà del tempo, se avessi conosciuto prima JQuery.&lt;/p&gt; &lt;p&gt;Consiglio quindi la lettura a chiunque sviluppi interfacce web, sia che si lavori in ASP.NET oppure che si usi qualsivoglia altra tecnologia lato server.&lt;/p&gt; &lt;p&gt;Alk.&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=4056" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/recensioni/archive/tags/Libri/default.aspx">Libri</category></item><item><title>Steve McConnell - Rapid Developement</title><link>http://dotnetmarche.org/blogs/recensioni/archive/2006/10/24/Steve-McConnell-_2D00_-Rap.aspx</link><pubDate>Tue, 24 Oct 2006 00:16:00 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:837</guid><dc:creator>Alkampfer</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/recensioni/rsscomments.aspx?PostID=837</wfw:commentRss><comments>http://dotnetmarche.org/blogs/recensioni/archive/2006/10/24/Steve-McConnell-_2D00_-Rap.aspx#comments</comments><description>Dedicato in particolar modo ai project manager, questo libro &amp;egrave; una
preziosa collezione di best practices per lo sviluppo software, scritto
naturalmente con la solita maestria di McConnell che rende la lettura
piacevole e divertente.&lt;div class="subTitle"&gt;
    &lt;/div&gt;
    


&lt;p&gt;Autore:&lt;a href="http://www.stevemcconnell.com/"&gt;Steve McConnell&lt;/a&gt; (&lt;a href="http://www.construx.com/"&gt;Construx&lt;/a&gt;)&lt;br /&gt;
Editore: &lt;a href="http://www.microsoft.com/MSPress/books/770.asp"&gt;Microsoft Press&lt;/a&gt;&lt;br /&gt;
ISBN: 1-55615-900-5&lt;br /&gt;
Pagine: 680&lt;br /&gt;
Lingua: Inglese&lt;br /&gt;
Anno: 1996&lt;br /&gt;
Categoria: Best Practices, progettazione software&lt;br /&gt;
Online: &lt;a href="http://www.amazon.com/gp/product/1556159005/sr=1-1/qid=1156801743/ref=sr_1_1/104-6313703-3867159?ie=UTF8&amp;amp;s=books"&gt;Amazon&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/gp/search?search-alias=stripbooks&amp;amp;field-keywords=&amp;amp;author=Steve+McConnell&amp;amp;select-author=field-author-like&amp;amp;title=&amp;amp;select-title=field-title&amp;amp;subject=&amp;amp;select-subject=field-subject&amp;amp;field-publisher=&amp;amp;field-isbn=&amp;amp;node=&amp;amp;field-binding=&amp;amp;field-ag"&gt;Steve McConnell&lt;/a&gt;
&amp;egrave; autore di libri di grande successo ed ha scritto negli anni opere che
sono ora considerate dei classici imperdibili del genere, trattando in
particolare gli aspetti della progettazione e della gestione del ciclo
di vita del software. &lt;/p&gt;
&lt;p&gt;Rapid Developement &amp;egrave; nelle intenzioni dell&amp;rsquo;autore un insieme di
validi consigli per riuscire a sviluppare in modo efficace, impiegando
il tempo a disposizione nella maniera pi&amp;ugrave; produttiva possibile. L&amp;rsquo;unica
pecca &amp;egrave; che il testo, essendo pubblicato nel 1996, non tratta nessuno
dei moderni cicli di vita &lt;em&gt;agili&lt;/em&gt; di sviluppo, come l&amp;rsquo;extreme
programming o lo scrum, ma molti dei consigli che vengono dati possono
comunque essere applicati anche negli ambienti &lt;em&gt;agili&lt;/em&gt; senza
problemi. Questo libro non include al suo interno pratiche
rivoluzionarie o tecniche sofisticate e soprattutto non promette
miracoli, ma vuole solamente racchiudere una serie di concetti basilari
che ogni progettista software dovrebbe possedere. Il risultato &amp;egrave; che
secondo McConnell lo &lt;em&gt;sviluppo rapido&lt;/em&gt; si ottiene solamente
quando si &amp;egrave; in grado di monitorare il ciclo di vita di un progetto,
dalla gestione dei requisiti alle fasi di test, seguendo
contemporaneamente alcune pratiche regole fondamentali che permettono
di mantenere il ciclo di vita sotto controllo.&lt;/p&gt;
&lt;p&gt;Il libro &amp;egrave; suddiviso in tre parti principali, nella prima si
esaminano i fondamenti della progettazione e della realizzazione di un
software. Particolarmente interessante &amp;egrave; la sezione dei &lt;em&gt;Classic Mistakes&lt;/em&gt;, che mostra i pi&amp;ugrave; comuni errori che portano a ritardi nei tempi di consegna, e la sezione &lt;em&gt;Risk Management&lt;/em&gt;
in cui si fa una breve panoramica sulla gestione dei rischi, pratica
indispensabile per evitare che problemi imprevisti facciano slittare i
tempi di sviluppo e mancare le date di consegna. &lt;/p&gt;
&lt;p&gt;La seconda parte &amp;egrave; dedicata ad una trattazione dettagliata degli
aspetti pi&amp;ugrave; importanti dello sviluppo software, in questa parte riveste
una particolare importanza il capitolo sette, in cui l&amp;rsquo;autore da una
panoramica sui principali cicli di vita di un progetto, spiegando in
maniera coincisa ma chiara i vari &lt;em&gt;waterfall&lt;/em&gt;, &lt;em&gt;spiral&lt;/em&gt;, &lt;em&gt;Evolutionary prototyping&lt;/em&gt;,
etc. Al termine del capitolo &amp;egrave; anche riportata una tabella riassuntiva
dei punti di forza e debolezza di ogni ciclo di vita, questi dati sono
particolarmente utili ai Project Manager che potranno cos&amp;igrave; valutare in
base al proprio ambiente il ciclo di vita pi&amp;ugrave; adatto. Si ricordi che
come detto precedentemente il libro non tratta metodologie agili e la
loro applicablit&amp;agrave; deve essere quindi considerata separatamente. Un
altro capitolo di grande importanza &amp;egrave; quello destinato alla stima del
progetto, in cui viene spiegato come effettuare considerazioni efficaci
per determinare stime realistiche che possono quindi essere mantenute
senza troppe difficolt&amp;agrave;. Il concetto chiave che l&amp;rsquo;autore da in questo
capitolo &amp;egrave; che un errore di stima provoca danni ingenti ai propri
progetti. Se ad esempio un progetto richiede dieci mesi per essere
completato, effettuare una stima di sei &amp;egrave; disastroso e porta spesso a
consegnare il prodotto in un tempo anche superiore ai dieci mesi che
sarebbero stati necessari con una stima corretta. Per chi fosse
interessato ad approfondimenti su questo argomento &amp;egrave; disponibile un &lt;a href="http://dotnetmarche.org/blogs/recensioni/archive/2006/10/04/Software-Estimation_3A00_-Demystifying-the-Black-Art.aspx"&gt;ulteriore testo&lt;/a&gt; di McConnel dedicato interamente alle pratiche di stima dei progetti.  &lt;/p&gt;
&lt;p&gt;L&amp;rsquo;ultima parte del libro contiene infine una lista di Best Practices
da seguire per raggiungere l&amp;rsquo;obiettivo del Rapid Developement. Ogni
pratica inizia con una scheda in cui l&amp;rsquo;autore riporta: una breve
descrizione, gli effetti sui propri progetti, i rischi e le interazioni
con le altre pratiche. Ogni scheda &amp;egrave; comunque seguita da una
descrizione dettagliata che tratta in maniera pi&amp;ugrave; approfondita la
pratica descritta.&lt;/p&gt;
&lt;p&gt;Il libro &amp;egrave; ben scritto e la lettura scorre velocemente, soprattutto
grazie a piccole storie di esempio tratte da situazioni reali. Nel
corso del libro si leggeranno le avventure di Jill, Bill ed i loro
colleghi alle prese con i vari prodotti: Square Calc, Giga Quote, etc.
Sicuramente molte delle letture vi faranno tornare alla mente
situazioni vissute in prima persona, storie di ritardi di consegna
causati dall&amp;rsquo;inserimento di features nelle fasi di test, difficolt&amp;agrave; di
integrazione dovuta alla mancanza di daily build sono problemi che
sicuramente molti di noi hanno vissuto. Il ritrovare in queste storie
le proprie esperienze &amp;egrave; una dimostrazione che il testo tratta di
problematiche concrete e non &amp;egrave; sicuramente un testo accademico di pura
teoria. &lt;/p&gt;
&lt;p&gt;Come per tutti i libri di McConnel, anche in Rapid Developement la
bibliografia di riferimento &amp;egrave; vastissima, al termine di ogni capitolo
l&amp;rsquo;autore inserisce infatti molti titoli di opere di approfondimento, in
questo modo &amp;egrave; possibile utilizzare il libro anche come catalogo, se ad
esempio si vuole acquistare un testo di progettazione si pu&amp;ograve; andare
nell&amp;rsquo;apposito capitolo e leggerne semplicemente la bibliografia.&lt;/p&gt;
&lt;p&gt;La lettura di questo testo &amp;egrave; consigliata particolarmente a chi svolge il ruolo di &lt;em&gt;Project Manager&lt;/em&gt;,
ma anche gli sviluppatori troveranno informazioni utilissime, in
particolar modo nella terza parte dedicata alle best practices.&lt;/p&gt;
&lt;p&gt;Rapid Developement &amp;egrave; un libro che non dovrebbe quindi mancare nella vostra libreria.&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=837" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/recensioni/archive/tags/Libri/default.aspx">Libri</category></item><item><title>Software Estimation: Demystifying the Black Art</title><link>http://dotnetmarche.org/blogs/recensioni/archive/2006/10/04/Software-Estimation_3A00_-Demystifying-the-Black-Art.aspx</link><pubDate>Tue, 03 Oct 2006 15:45:08 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:708</guid><dc:creator>Stefano Ottaviani</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/recensioni/rsscomments.aspx?PostID=708</wfw:commentRss><comments>http://dotnetmarche.org/blogs/recensioni/archive/2006/10/04/Software-Estimation_3A00_-Demystifying-the-Black-Art.aspx#comments</comments><description>&lt;div class="wlWriterSmartContent" id="57DB9511-4ED8-456d-8E06-AF9EC0A0BF46:fa569e63-b694-4b21-85dc-f56b8b75f75d" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
  
    
    
  
  
    &lt;div class="Normal"&gt;

&lt;p /&gt;
&lt;p&gt;Autore: &lt;A href="http://www.stevemcconnell.com/"&gt;Steve McConnell&lt;/A&gt; (&lt;A href="http://www.construx.com/"&gt;Construx&lt;/A&gt;)&lt;br /&gt;
Editore: &lt;A href="http://www.microsoft.com/MSPress/books/2425.asp"&gt;Microsoft Press&lt;/A&gt;&lt;br /&gt;
ISBN: 0735605351&lt;br /&gt;
Pagine: 308&lt;br /&gt;
Lingua: Inglese&lt;br /&gt;
Anno: 2006&lt;br /&gt;
Categoria: Stime Software, Best Practices&lt;br /&gt;
Online: &lt;A href="http://safari.awprofessional.com/0735605351"&gt;Safari BOL&lt;/A&gt; -  &lt;A href="http://www.gorilla.it/gorilla/product.asp?SessionID=t&amp;amp;sku=0735605351"&gt;Gorilla&lt;/A&gt; – &lt;A href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351/sr=8-1/qid=1159296898/ref=sr_1_1/104-5181677-0077552?ie=UTF8&amp;amp;s=books"&gt;Amazon&lt;/A&gt; &lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;In questo libro Steve McConnell (per chi non lo conoscesse, si tratta di uno degli scrittori più autorevoli del settore, tanto da essere stato nominato dai lettori del magazine “Software Development” nel 1998 una delle persone più influenti nell’industria del software, insieme a Bill Gates e Linus Torvalds) parla delle tecniche per migliorare l’affidabilità delle stime sui tempi di sviluppo dei software, un argomento molto delicato dato che sulla base di esse, in genere, vengono presentate le offerte ai clienti (ed è quindi collegato direttamente con i fatturati della ditta), ma che spesso viene affrontato con troppa superficialità, adottando metodi non ottimali, se non addirittura basandosi sull’intuito.&lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;Nell’&lt;A href="http://safari.awprofessional.com/0735605351/ch12lev1sec4"&gt;introduzione&lt;/A&gt;, la cui lettura è consigliata in quanto riassume molto bene gli obiettivi del libro, l’autore spiega che ci sono due approcci per poter effettuare le stime del software: quello scientifico, utilizzato dalle organizzazioni che vogliono contenere i margini di errore delle stime entro il 5-10% e/o trattano progetti di grandi dimensioni (oltre 1.000.000 di linee di codice), e che per ottenere ciò debbono ricorrere a complessi sistemi matematici, ed il metodo dell’”arte della stima”, costituito da molte regole pratiche, suggerimenti e tecniche alla portata anche di chi non ha una laurea in matematica o non esegue stime come professione principale, e che si adatta a tutte le ditte che in genere cercano di ridurre il più possibile un margine di errore che, altrimenti, potrebbe essere facilmente superiore al 50-100%.&lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;Come si evince dal titolo, l’autore utilizza l’approccio dell’”arte della stima”, creando un testo di riferimento che si adatta comunque alle esigenze della maggior parte delle organizzazioni, in cui in genere non ci si affida a persone che svolgono come professione principale quelle di stimatori, e che non di rado si ritrovano ad affrontare situazioni non piacevoli a causa di stime errate. &lt;/p&gt;
&lt;p&gt;Grazie alla presenza di molti riferimenti ad altri testi che trattano delle tecniche in modo più approfondito, il libro rappresenta comunque un ottimo punto di partenza anche a chi poi vorrà trattare il tema seguendo metodi più scientifici.&lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;Data inoltre la natura dell’argomento, che non riguarda solamente i tecnici (sviluppatori, ...) ma anche gli executive (commerciali, manager, capi-progetto…) ed il cliente finale, l’autore ha adottato un taglio molto pratico, in modo da dare la possibilità anche a queste categorie di poter leggere il libro; ad esempio, sono presenti molti suggerimenti e regole pratiche (ben 118), messi in evidenza e riepilogati alla fine del testo, contro solo 18 formule matematiche, concentrate in poche delle tecniche analizzate; inoltre, il testo è di breve - media lunghezza (circa 250 pag. effettive), se paragonato con la norma dei testi del settore informatico di 800-1000 pag. &lt;/p&gt;
&lt;p&gt;L’unica pecca può essere rappresentata dalla mancanza (almeno al momento della scrittura di questa recensione) di una versione in lingua italiana, cosa che sarebbe gradita a persone non tecniche, in genere poco inclini ad affrontare una lettura in lingua inglese.&lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;Il testo è suddiviso principalmente in tre parti; nella prima si viene introdotti nella tematica delle stime sul software, illustrando vari termini come stima, target e commitment, che spesso vengono confusi dai soggetti coinvolti, ottenendo dei conflitti che potrebbero essere risolti molto più facilmente avendo ben chiare le loro differenze (tra l’altro, l’autore dimostrerà che il significato di stima nel mondo del software è ben diverso da quello classico, da dizionario).&lt;/p&gt;
&lt;p&gt;Sono poi indicati i motivi per cui è utile una stima corretta (nonché la differenza tra una stima precisa ed una accurata) e quali sono le conseguenze di progetti sovrastimati e sottostimati (vedi anche la Legge di Parkinson e la “Sindrome dello Studente” di Goldratt a riguardo), dimostrando che un grosso ruolo è giocato dai fattori psicologici, più che da quelli matematici.&lt;/p&gt;
&lt;p&gt;Sono inoltre illustrati i vari fattori che influenzano le stime (tecnologia usata, impiego di processi di sviluppo sequenziali o agili, composizione del team,…) e le cause che possono portare a degli errori, indotte sia dall’ambiente circostante a chi le effettua, sia interne al soggetto stesso, come i pregiudizi o il basarsi su convinzioni errate, oppure dal non considerare nella stima attività come il deploy dei programmi, che comunque qualcuno dovrà effettuare ad un certo costo.&lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;Per un assaggio, in questo sito è presente un “particolare” test tratto dal secondo capitolo, che dimostra l’influenza di alcuni fattori psicologici sui risultati delle stime: &lt;A href="http://www.codinghorror.com/blog/archives/000625.html"&gt;test&lt;/A&gt; e &lt;A href="http://www.codinghorror.com/blog/archives/000626.html"&gt;risultati&lt;/A&gt;. &lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;La seconda parte del libro illustra molte tecniche per ottenere delle stime migliori, e per ognuna di esse viene indicato:&lt;/p&gt;
&lt;p /&gt;
&lt;ul&gt;
	&lt;li&gt;l’obiettivo della stima (si può voler stimare la grandezza del progetto, il numero di features che possono essere consegnate entro una certa data, i mesi che occorrono per lo sviluppo,…)&lt;/li&gt;
	&lt;li&gt;la categoria di grandezza del software per cui è applicabile (piccolo, medio, grande)&lt;/li&gt;
	&lt;li&gt;in quale step delle attività è applicabile la tecnica (es. all’inizio della pianificazione o in uno stato medio - avanzato dello sviluppo, in questo caso la tecnica può essere utilizzata per verificare se la stima iniziale è ancora corretta)&lt;/li&gt;
	&lt;li&gt;se utilizzabile con metodologie sequenziali o iterative (agili)&lt;/li&gt;
	&lt;li&gt;il livello di accuratezza che ci si può attendere da quella particolare tecnica.&lt;/li&gt;
	&lt;li /&gt;
	&lt;li&gt;Le tipologie di tecniche sono molto varie, alcune sono dei semplici accorgimenti che possono comunque migliorare il lavoro di chi effettua la stima (magari a livello intuitivo alcune vengono utilizzate senza sapere della loro esistenza, come la &lt;A href="http://safari.awprofessional.com/0735605351/ch12lev1sec4"&gt;T-Shirt sizing&lt;/A&gt;), altre sono più complesse e possono richiedere la collaborazione di più persone all’interno della ditta (es. quelle che poi andranno effettivamente a sviluppare il software), di dati storici prelevati dai precedenti progetti o di tool appositi, come quello offerto gratuitamente dalla ditta dell’autore, &lt;A href="http://www.construx.com/resources/estimate/"&gt;Construx Estimate&lt;/A&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p /&gt;
&lt;p&gt;L’autore espone anche la sua opinione (molto interessante) riguardo l’utilizzo di tecniche controverse, come il conteggio delle righe di codice, oppure sulla diatriba riguardante l’impiego di più persone all’interno del team di sviluppo in modo tale da velocizzare lo sviluppo del software.&lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;Infine, nella terza parte, ed in particolar modo negli ultimi due capitoli, il discorso si concentra sul rapporto tra i vari soggetti, in particolar modo tra chi ha effettuato le stime, gli executive ed il cliente finale: ad esempio, vengono illustrate varie tecniche per presentare i risultati delle stime in modo comprensivo anche per chi non è un tecnico, e sono discussi i punti di vista delle varie parti in causa, in modo tale da farle dialogare al meglio tra loro. In particolare, a riguardo, l’autore indica di vedere questa fase non come una negoziazione in cui un soggetto vince e l’altro perde (non c’è nessuna torta da spartirsi), bensì come un dialogo in cui le parti stanno tutte nello stesso tavolo, e vincono o perdono insieme (ed in questo, McConnell indica esplicitamente di aver cambiato opinione rispetto a quanto affermò in un suo precedente libro, “Rapid Development”).&lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;In conclusione, si tratta sicuramente di un libro molto interessante da leggere, in particolare per chi non ha mai letto testi dello stesso genere, ed in questo caso aiuta a mettere in chiaro anche certi concetti di cui magari si intuiva la natura, ma che non sono stati mai approfonditi. &lt;/p&gt;
&lt;p&gt;Oltre ai soggetti che si occupano della parte tecnica, la lettura di un testo su questo argomento dovrebbe essere “obbligatoria” anche per gli executive, ai quali spettano molte responsabilità e possono essere causa di errori molto gravi dovuti anche a comportamenti superficiali e facilmente evitabili.&lt;/p&gt;
&lt;p&gt;Anche se, molto probabilmente, a causa della particolare natura dell’argomento delle stime software, nessuna delle tecniche sarà illuminante e definitiva (anzi, l’autore consiglia in genere di adottarne più di una nello stesso progetto, in modo tale da vedere se i risultati convergono o meno), in generale il testo saprà dare una maggiore sicurezza su questi temi e consapevolezza su ciò che può portare a commettere errori che saranno poi pagati a caro prezzo. &lt;/p&gt;
&lt;/div&gt;
    &lt;div class="mainAuthor" /&gt;
  

&lt;/div&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=708" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/recensioni/archive/tags/Libri/default.aspx">Libri</category></item><item><title>Joshua Kerievsky - Refactoring To Patterns</title><link>http://dotnetmarche.org/blogs/recensioni/archive/2006/09/06/kerievsky_5F00_refactoring_5F00_to_5F00_patterns.aspx</link><pubDate>Wed, 06 Sep 2006 14:28:00 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:386</guid><dc:creator>Diego Guidi</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/recensioni/rsscomments.aspx?PostID=386</wfw:commentRss><comments>http://dotnetmarche.org/blogs/recensioni/archive/2006/09/06/kerievsky_5F00_refactoring_5F00_to_5F00_patterns.aspx#comments</comments><description>&lt;div class="Normal"&gt;
&lt;p&gt;L&amp;#39;autore in questo libro offre un punto d&amp;#39;unione tra due dei testi fondamentali nello sviluppo di software object oriented, vale a dire &lt;a href="http://www.amazon.com/gp/product/0201633612/002-0687852-1765669?v=glance&amp;amp;n=283155"&gt;Design Patterns&lt;/a&gt; della Gof e &lt;a href="http://www.amazon.com/Refactoring-Improving-/dp/0201485672/ref=pd_bxgy_b_text_b/002-0687852-1765669?ie=UTF8"&gt;Refactoring&lt;/a&gt; di Martin Fowler (che non per niente firma la prefazione di RtP). Quello che offre questo testo &amp;egrave; infatti una serie di percorsi guidati alla implementazione dei pi&amp;ugrave; importanti &lt;a href="http://hillside.net/patterns/"&gt;Design Patterns&lt;/a&gt; a partire da codice esistente, funzionante ma dal design errato oppure limitato.&lt;/p&gt;


&lt;p&gt;In particolare, tutta la parte iniziale del libro offre una discreta introduzione sui patterns e soprattutto su quando seguirne i dettami: divertente e formativo &amp;egrave; l&amp;#39;esempio di codice dell&amp;#39;onnipresente &lt;em&gt;Hello World&lt;/em&gt; (riportato in appendice alla recensione), implementato per&amp;ograve; in questo caso attraverso lo &lt;a href="http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/PatternStrategy.html"&gt;Strategy Pattern&lt;/a&gt;, a cui seguono le conclusioni dell&amp;#39;autore circa l&amp;#39;inutilit&amp;agrave; di un approccio in casi cos&amp;igrave; semplici... oppure ancora l&amp;#39;accenno alla &lt;em&gt;Singletonite&lt;/em&gt;, la malattia comune a tutti gli sviluppatori che tendono ad abusare del &lt;a href="http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/PatternSingleton.html"&gt;Singleton Pattern&lt;/a&gt; ...&lt;/p&gt;


&lt;p&gt;Un capitolo &amp;egrave; inoltre dedicato ai &lt;a href="http://c2.com/xp/CodeSmell.html"&gt;Code Smells&lt;/a&gt; , vale a dire gli elementi presenti in una determinata porzione di codice, di per s&amp;egrave; perfettamente funzionante, che indicano errate scelte di design e/o di implementazione, e che rendono il codice stesso difficilmente comprensibile, manutenibile ed espandibile.&lt;/p&gt;


&lt;p&gt;Alla risoluzione di questi &amp;quot;difetti&amp;quot; &amp;egrave; dedicata la restante, e corposa, parte del libro, organizzata in sezioni principali:&lt;/p&gt;

&lt;ul&gt;
	
&lt;li&gt;&lt;strong&gt;Creation&lt;/strong&gt;: miglioramento del design nella fase di costruzione degli oggetti, ad esempio sostituendo un elevato numero di costruttori (che si differenziano tra loro solo per il numero e tipo di parametri) con dei metodi di creazione maggiormente esplicativi.&lt;/li&gt;
	
&lt;li&gt;&lt;strong&gt;Simplification&lt;/strong&gt;: semplificazione di codice attraverso la modifica, eliminazione, sostituzione o isolamento di ben definite porzioni di codice, ad esempio creando metodi brevi e il cui nome comunichi immediatamente la loro funzione e il loro contesto di utilizzo.&lt;/li&gt;
	
&lt;li&gt;&lt;strong&gt;Generalization&lt;/strong&gt;: trasformazione di un codice altamente specifico in un codice pi&amp;ugrave; generico e quindi maggiormante riutilizzabile, ad esempio attraverso l&amp;#39;uso dei &lt;a href="http://www.ugolandini.net/CompositePattern.html"&gt;Composites&lt;/a&gt; in luogo delle relazioni uno-a-molti.&lt;/li&gt;
	
&lt;li&gt;&lt;strong&gt;Protection&lt;/strong&gt;: miglioramento della protezione del proprio codice, ad esempio per evitare InvalidCastExceptions o le NullReferenceExceptions.&lt;/li&gt;
	
&lt;li&gt;&lt;strong&gt;Accumulation&lt;/strong&gt;: linee guida di design per migliorare il modo di recuperare informazioni da una gerarchia omogenea od eterogenea di oggetti, ad esempio usanto il &lt;a href="http://en.wikipedia.org/wiki/Visitor_pattern"&gt;Visitor pattern&lt;/a&gt;.&lt;/li&gt;
	
&lt;li&gt;&lt;strong&gt;Utilities&lt;/strong&gt;: refactorings di utilit&amp;agrave; generale, ad esempio l&amp;#39;unificazione di interfacce o l&amp;#39;estrazione di parametri.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Il &lt;a href="http://www.industriallogic.com/xp/refactoring/catalog.html"&gt;catalogo completo dei refactorings presenti&lt;/a&gt; &amp;egrave; visualizzabile sul &lt;a href="http://www.industriallogic.com/index.html"&gt;sito web&lt;/a&gt;, insieme ad ulteriori refactorings proposti dall&amp;#39;autore e dai suoi collaboratori.&lt;/p&gt;


&lt;p&gt;Refactoring To Patterns &amp;egrave; semplicemente una lettura indispensabile per qualsiasi sviluppatore interessato a migliorare il design e la qualit&amp;agrave; del proprio codice. Innanzitutto &amp;egrave; un libro molto pratico: tutti i refactorings proposti per &amp;quot;abbracciare&amp;quot; un determinato pattern sono versioni semplificate di refactoring effettivamente sperimentati dall&amp;#39;autore su progetti reali, quindi niente esempi fini a se stessi.&lt;/p&gt;


&lt;p&gt;Inoltre, la chiarezza espositiva &amp;egrave; esemplare, in pieno stile GoF. Per ogni refactoring trattato viene infatti presentato nell&amp;#39;ordine:&lt;/p&gt;

&lt;ul&gt;
	
&lt;li&gt;Schema UML del codice pre-refactoring e del codice a refactoring completato &lt;/li&gt;
	
&lt;li&gt;Spiegazione sintetica del refactoring.&lt;/li&gt;
	
&lt;li&gt;Introduzione &amp;quot;storica&amp;quot;, ovvero la descrizione del progetto reale da cui proviene e le motivazioni che hanno portato alla necessit&amp;agrave; di effettuare le modifiche. &lt;/li&gt;
	
&lt;li&gt;Tabella riassuntiva sui benefici e sugli eventuali problemi derivati dall&amp;#39;adozione del refactoring. &lt;/li&gt;
	
&lt;li&gt;Dettaglio delle meccaniche di trasformazione, vale a dire tutti i refactoring steps necessari per modificare il codice al fine di migliorarne il design. &lt;/li&gt;
	
&lt;li&gt;Uno o pi&amp;ugrave; esempi completi, con spiegazione dettagliata di tutti i passaggi necessari.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Il testo &amp;egrave; inoltre molto interessante per vedere &amp;quot;in campo&amp;quot; alcune tecniche di sviluppo di cui magari si sente spesso parlare ma che per limiti teorico-pratici o di tempo non &amp;egrave; mai stato possibile applicare ai propri progetti software: innumerevoli sono infatti i riferimenti ad alcune pratiche di &lt;a href="http://www.agilemovement.it/"&gt;Agile Development&lt;/a&gt; (ad esempio il DRY - Don&amp;#39;t Repete Yourself - ovvero l&amp;#39;evitare in ogni modo le duplicazioni di codice), e di &lt;a href="http://www.extremeprogramming.org/"&gt;Extreme Programming&lt;/a&gt; (spesso l&amp;#39;autore cita il contributo del suo &amp;quot;compagno di tastiera&amp;quot; nell&amp;#39;elaborazione dei corretti refactorings); in aggiunta, praticamente ogni esempio del libro &amp;egrave; realizzato in base al &lt;a href="http://www.testdriven.com/modules/news/"&gt;Test-Driven Development&lt;/a&gt;, giudicato dall&amp;#39;autore l&amp;#39;unico metodo realmente efficace per affrontare in tutta sicurezza i refactorings pi&amp;ugrave; spinti.&lt;/p&gt;


&lt;p&gt;Consiglio quindi senza riserve a tutti questo testo, sia per la chiarezza espositiva (il libro &amp;egrave; perfettamente fruibile anche da parte di sviluppatori non particolarmente a proprio agio con i Design Patterns o con le pratiche di refactoring, anzi pu&amp;ograve; essere considerato un valido stimolo per l&amp;#39;approfondimento) che per gli innumerevoli suggerimenti di sviluppo che contiene: non sar&amp;agrave; raro, leggendo gli esempi riportati, pensare ai propri progetti e a come migliorarli in base ai dettami del libro.&lt;/p&gt;


&lt;p&gt;L&amp;#39;unica nota &amp;quot;negativa&amp;quot; del testo: il codice riportato negli esempi &amp;egrave; codice Java! Ci&amp;ograve; non pregiudica in alcun modo la leggibilit&amp;agrave; o la comprensibilit&amp;agrave; degli esempi, soprattutto per sviluppatori C++ o C#, ma ferisce un p&amp;ograve; l&amp;#39;orgoglio degli sviluppatori .NET...&lt;/p&gt;


&lt;p&gt;P.S: inevitabilmente, una volta letto il libro vi verr&amp;agrave; voglia di comprare pure &lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper&lt;/a&gt;...&lt;/p&gt;

&lt;div class="subHeading"&gt;Appendice: HelloWorld from a patterns-happy developer ...&lt;/div&gt;
&lt;p&gt;Fonte: &lt;a href="http://developers.slashdot.org/comments.pl?sid=33602&amp;amp;cid=3636102"&gt;SlashDot - Conceptual models of a program?&lt;/a&gt;&lt;/p&gt;

&lt;textarea class="csharp:nogutter:nocontrols" cols="80" name="code" rows="20"&gt;public interface MessageStrategy 
{
   public void sendMessage();
}
public abstract class AbstractStrategyFactory 
{
   public abstract MessageStrategy createStrategy(MessageBody mb);
}
public class MessageBody
{
   Object payload;
   public Object getPayload()
   {
      return payload;
   }
   public void configure(Object obj) 
   {
      payload = obj; 
   }
  
   public void send(MessageStrategy ms) 
   {
      ms.sendMessage();
   }
}
public class DefaultFactory extends AbstractStrategyFactory 
{
   private DefaultFactory() { }
   static DefaultFactory instance;
   public static AbstractStrategyFactory getInstance()
   {
      if (instance==null) 
         instance = new DefaultFactory();
      return instance;
   }
   public MessageStrategy createStrategy(final MessageBody mb) 
   {
      return new MessageStrategy() 
      {
         MessageBody body = mb;
         public void sendMessage() 
         {
            Object obj = body.getPayload();
            System.out.println((String)obj);
         }
      };
   }
}
public class HelloWorld 
{
   public static void main(String[] args) 
   {
      MessageBody mb = new MessageBody();
      mb.configure(&amp;quot;Hello World!&amp;quot;);
      AbstractStrategyFactory asf = DefaultFactory.getInstance();
      MessageStrategy strategy = asf.createStrategy(mb);
      mb.send(strategy);
   }
} 
&lt;/textarea&gt;


&lt;/div&gt;
    &lt;div class="mainAuthor"&gt;
      
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
						Data di pubblicazione:
						30/
						8/
						2006&lt;/p&gt;
      
&lt;p&gt;
						Biografia:
						Appassionato di informatica e di programmazione sin dai tempi del basic su Commodore 64, attualmente si occupa di sviluppo applicazioni e servizi GIS su piattaforma .NET e Java.&lt;/p&gt;
    &lt;/div&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=386" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/recensioni/archive/tags/Libri/default.aspx">Libri</category></item></channel></rss>