Anche questo anno ho avuto la fortuna di partecipare a DevCon e devo dire che come per lo scorso anno il bilancio è decisamente positivo. Innanzitutto sembra strano ma anche in questo caso, avere già l'esperienza di una devcon alle spalle ha sicuramente giovato sia nella scelta delle sessioni da seguire (2 track parallelle) che nell' aver acquisito una certà familiarità con alcuni dei concetti esposti. Senza entrare troppo nel dettaglio cercherò di evidenziare alcune riflessioni personali nate dalle sessioni che ho seguito.
WCF
Per quanto riguarda WCF, c'è davvero poco da dire in quanto i benefici che questa piattaforma ha portato nello sviluppo di applicazioni distribuite è sin troppo evidente. Delle tre sessioni che ho seguito, quella in cui Paolo ha illustrato i concetti maggiormente nuovi ed interessanti per me è sicuramente "WCF Web Centric". Durante i primi minuti della sessione Paolo ha fatto un bel ripasso su come funziona il protocollo HTTP, evidenziando le caratteristiche e le differenze in termini di payload fra i vari metodi che presenta (HTTP POST,HTTP GET, HTTP PUT...); questo succulento ripassino ha portato all' introduzione dell'architettura REST e di come sia possibile definire dei tipi di Web Service secondo questo stile architetturale. Personalmente il messagio che ho colto è quello che REST anche se meno formale nella definizione dello scambio dei dati, basandosi sulle intestazioni delle GET e delle POST, permette di utilizzare in modo leggero i meccanismi di request e response alla base del Web, sfruttando un semplice meccanismo legato alle URI. La sessione è proseguita contestualizzando questi concetti all'interno di uno scenario di interazione fra un servizio web ed una pagina ASP.NET basato sulla nuova Syndication API.
WF
Seguendo le sessioni di Rob, ho capito come Workflow Foundation sia uno strumento tanto bello e potente quanto complicato; avere una strumento a disposizione che permette di gestire flussi di informazioni tramite sia diagrammi sequenziali che diagrammi a stati finiti, apre scenari davvero interessanti. Come giustamente Rob ha evidenziato WF essendo uno strumento "general purpose", rappresenta davvero una strumento pervasivo capace di trovare applicazione in scenari eterogenei accumunati dal basilare concetto di flusso; può quindi essere applicato ad esempio per definire il flusso di navigazione all'interno di un sito Web ma al tempo stesso anche per definire ad esempio gli stati di un casello autostradale. Detto questo, WF lavora principalmente in asincrono e già secondo me qui nascono le prima gioie e dolori. Asincrono è sinonimo di efficienza e ottimizzazione ma lato developer secondo viene visto come perdita del controllo, delle precedenti conoscenze; WF si appoggia su un meccanismo di persistenza che offre fault tolerance da una parte ma al tempo stesso può rappresentare se nn correttamente configurato il famigerata bottleneck applicativo. Quello che Rob "penso" abbia messo in evidenza, specie nella sezione di ottimizzazione è come sia necessario riuscire a trovare quel giusto trade off tra affidabilità e performance magari ricorrendo ad un meccanismo di scheduling manuale in cui la gestione dei thread sia quindi a carico dello sviluppatore. Sono stati inoltre mostrate alcune configurazioni che permettono di aumentare leggermente le performance anche se alla fine i fattori che maggiormente entrano in gioco sono l'accesso in I/O su disco in fase di persistenza e caricamento dello xoml.
WEB DEVELOPMENT
La parte di sviluppo Web, sia comprendente tecnologie attuali che future, è stata coperta dalle sessioni di Luka e Rob. Lo sviluppo web come al solito è pieno di insidie e spesso gli scenari in cui il requisito principale è la scalabilità, richiedono conoscenze approfondite sia del funzionamento del web che delle varie tecnologie presenti. Condivido il pensiero secondo cui ultimamente stiamo un pò "tirando il collo" al web che in effetti solo apparentemente mostra una veste 2.0. E' in questa ottica che vedo bene l' inserimento di Silverlight 2.0; sicuramente la strada da fare per recuperare il gap nei confronti di Flash è notevole ma Silverlight può beneficiare di una base solida come il framework .NET che Flash non possiede. A livello di mera multimedialità magari ad oggi verterei sull' utilizzo di Flash, per realizzare una applicazione web senza particolari requisiti di retrocompatibilità o scadenza sicuramente opterei per Silverlight. All' interno della sessione di chiusura della conferenza sono state prese in rassegna anche le ultimissime tecnologie quale ASP.NET Dynamic Data, Astoria ed ASP.NET MVC. Quello che ho seguito con più attenzione è naturalmente MVC poichè incarnando i principi di Separation of Concern favorisce lo sviluppo e il testing del codice prodotto. Chiudo con un monito: mai usare le session!!!!!
LINQ
Quando il gioco si fa duro Linq comincia ad interrogare... avere a disposizione uno strumento per eseguire query indipendentemente dalla sorgente dati non ha prezzo. Da studente le mie attenzioni erano rivolte maggiormente a LINQ To Objects poichè rivoluziona il modo con cui si scrive codice e si implementano i vari algoritmi. Concetti cardine, che stanno alla base di LINQ, quali ad esempio Expression Tree, hanno radici molto lontane che ricalcano i passi compiuti dagli odierni compilatori. Per quanto concerne la diatriba tra LINQ To Sql vs Linq To Entities io sto dalla parte di NHibernate... senza offese ma allo stato attuale delle cose se devo utilizzare perchè necessario un ORM, Linq To Sql non lo ritengo un "ORM for Dummies", non è proprio un ORM; Linq To Entities avrebbe le caratteristiche per essere un ORM ma l' implementazione che è stata fatta rovina l'approccio POCO e di Persistence Ignorancy che altri ORM offrono. Mi hanno inoltre fatto osservare come nei casi reali il degrado di performance che NHibernate introduce a causa dell'utilizzo di reflection sia elevato penso però che il vero collo di bottiglia sulle performance di accesso ai dati sia come al solito il disco i cui tempi di accesso sono di qualche ordine di grandezza superiore rispetto alla memoria principale.
PARALLEL PROGRAMMING
Questa bonus session capeggiata da Marco, è stata quella che sicuramente dal punto di vista della programmazione in senso lato maggiormente mi ha impressionato. Da una parte la possibilità di sfruttare attraverso una libreria come PLINQ le potenzialità delle macchine multicore affascina non poco, dall' altra però si aprono scenari in cui il MultiThread è all' ordine del giorno e penso che le competenze e l'acume richiesto ad un programmatore sia davvero troppo elevato per non incorrere in errori non predicibili a compile time che magari si verificano sporadicamente a runtime. Molto interessante inoltre il confronto tra le scelte architetturali effettuate all'interno di Microsoft Robotics e PLINQ stesso.
Concludo con un doveroso ringraziamento alla DevLeap Gang of Four ed un saluto a Cristian, Guido, Jessica, Sergio ed Alberto. Alla goccia DevCon!!!!