Durante la scrittura del libro "Microsoft .NET: Architecting Applications for the Enterprise" con Andrea abbiamo spesso discusso delle caratteristiche dei possibili lettori ideali. E ci siamo trovati d'accordo che i contenuti del capitolo 3 ("Design principles and patterns") sono di fatto patrimonio comune di architetti e sviluppatori di ogni ordine e grado e persino di manager e IT people.

Il design del software e l'ingegneria del software non sono nulla di nuovo. Ma sono qualcosa che, almeno nel mondo MS, è andato scomparendo--anzi non è mai entrato--nel corso degli anni. E' evidente la differenza con il mondo Java: da una parte strumenti di sviluppo straordinari e sostenibili; dall'altra la cieca (e persino a volte ottusa) implementazione di pattern e regole di design.

Ora che MS sembra curarsi un po' piu' del design del codice che gli sviluppatori VS andranno a scrivere si nota un livello di cultura del design non del tutto atteso. Come avrebbe detto la mia professoressa di italiano/storia/geografia alle medie, al ragazzo (MS) mancano un po' le basi. Ma ha volontà di imparare e magari ce la farà. Sia pure a suon di strafalcioni.

C'è una sessione che ho presentato a DevConnections e che presenterò a un po' di DevDays in giro che sia pure con vari titoli affronta i principi base del software design e li inquadra in ottica .NET. Roba come high cohesion, low coupling, composition vs inheritance, information hiding, dependency inversion. Tutti più o meno sanno di che si parla, pochi li applicano sistematicamente. Pochi davvero conoscono la high cohesion e il Single Responsibility Principle. Va molto meglio con il low coupling e il programming-to-interfaces.

Addirittura mi è stato fatto notare che sarebbe un fulgido esempio di Green IT. Più codice scritto correttamente la prima volta, meno testing, meno debugging, meno ore in ufficio, meno traffico nell'ora di punta, meno condizionatori, meno riscaldamento, meno energia elettrica.

Facciamoci un favore--scriviamo codice migliore. Il futuro del software è nella qualità. Non nella quantità