La prima premessa scontata di questo post è che sono un grandissimo fan di tutto lo sviluppo marcato Microsoft. Ho scatole storiche come il compilatore C 5.1 per DOS, QuickC, VC++ 1.0, Developer Studio, la Visual C++ subscription che fu, di fatto, la vera prima versione dell'abbonamento MSDN.
Non c'è dubbio che se il vostro target è quello di sviluppare per l'ambiente Microsoft, disponete dei tool più "cool" e, oltre a lavorare, riuscirete anche a divertirvi, perlomeno è quello che io e i miei collaboratori facciamo quotidianamente su PC.
Fino a pochi anni fa MS non solo aveva il sistema operativo più diffuso, Windows, ma anche la fetta di mercato prevalente del mercato mobile. La situazione di oggi è chiara a tutti e WP7 sta piano piano tornando nel mercato.
Come sviluppatore guardo a cosa ci offrono i vari vendor Apple, Android, BlackBerry, Nokia e Microsoft e senza dubbio, ancora una volta (come peraltro ho sempre sostenuto) lo sviluppo per Windows Phone è senza dubbio quello più agevole e "comodo".
C'è però un problema, della nostra comodità non importa a nessuno. Io ho sempre sviluppato per Windows certamente non solo perché aveva degli strumenti di sviluppo belli e geek ma perché Windows è il sistema operativo leader e quindi le mie applicazioni sono più fruibili rispetto a quelle sviluppate per tutto il resto. A quanto leggo su internet WP7 ha una fetta di mercato del 5.6% e quindi se devo sviluppare per il mercato mobile devo prima considerare gli altri device.
Devo aprire una parentesi ri-spiegando perché non sono un fan sfegatato di WP7: 1. è un prodotto a se stante invece di essere parte della "platform" (che è da sempre la mossa vincente di Microsoft). 2. perché avrei voluto, sempre in chiave platform, vedere dentro WP7 il kernel di Windows full e non, ancora, un derivato di Windows CE, come già scrissi tempo fa. Il secondo punto, a quanto si mormora, sembra diventerà finalmente realtà. Ancora una volta tutto questo, per noi sviluppatori, importa poco o niente. Non siamo noi a decidere dove sviluppare ma è il mercato a chiederti applicazioni per l'uno o l'altro device.
La seconda premessa (scontata anche questa) è che sono un super-tifoso dello sviluppo xaml-based. Da sempre attendo con ansia l'unione di WPF e Silverlight, ma, nel frattempo, ho realizzato tanti progetti WPF (alcuni dei quali sono un vero orgoglio per me) e altrettanti sono in corso di sviluppo. Dire che WPF mi piaccia è assolutamente riduttivo; Silverlight è decisamente una magnifica soluzione anche se lo vedo un po' spiazzato rispetto ai trend attuali, ma pur sempre un'adorabile tecnologia su cui ho sviluppato alcune piccole cosette che mi hanno dato molta soddisfazione.
Come sviluppatore devo osservare che i recenti propositi di Microsoft per Windows 8 e le recenti tecnologie annunciate in CTP da Microsoft mi impongono di prendere atto che conoscere lo sviluppo basato su Html5 e jQuery è un passo dovuto. Sempre per lo stesso teorema di cui sopra, cioè guardare cosa impone il mercato, non si può fare a meno di osservare che gli altri vendor puntano moltissimo su Html5 e jQuery. Browser e device (cellulari, slate e tablet) sono html5 ready (ok, con qualche colpo di tosse ma per lo più le cose funzionano benone). Dopo averci lavorato parecchio in questi ultimi mesi posso affermare che html5 e jQuery consentono di realizzare interfacce complesse e che coprono la maggior parte degli scenari più comuni.
Sempre sul lato device ho sempre riposto grande fiducia in "mono for Android" e "monotouch" (oggi di Xamarin) perché mi consentono di riutilizzare le mie conoscenze di C# e di Framework.net. Sembrava la soluzione più ovvia (arrivando dal Framework.NET) per sviluppare applicazioni basate su mono con C#. Il punto vincente delle librerie è di fornire un vasto wrapper su iPhone/Android per sfruttare a fondo le singole peculiarità. D'altro canto questo vantaggio significa anche di dover gestire due differenti applicazioni per iPhone/iPad e Android e questo implica un costo di ciclo di vita di cui bisogna tenere conto.
Aggiungi ancora che tutto il codice C# deve essere ampiamente elaborato per farlo girare su WP7 e sopratutto che l'interfaccia utente è un discorso ancora più complesso.
Perciò ho rivisto la mia posizione, ho fatto un passo indietro valutando altre soluzioni e mi accorgo che PhoneGap e Titanium sono l'uovo di colombo. Lungi da me confrontarli perché non ho ancora esperienza su questi due sdk, ma entrambi sono basati sul concetto di sviluppo della UI in Html5 e un layer di astrazione che permette di usare i device e la sensoristica in modo da eseguire il porting tra iPhone, Android ed altri device in modo molto semplice (leggo così da chi l'ha già fatto). Titanium permette di creare addirittura una applicazione "quasi-nativa" in modo da ottenere migliori performance. PhoneGap invece è più web-based e, grazie all'uso congiunto (opzionale) di jQuery-Mobile permette di riciclare l'applicazione come applicazione web classica.
Questi due ultimi toolkit (ce ne sono diversi altri) mi hanno favorevolmente impressionato perché:
- posso raggiungere più velocemente un target installato che supera abbondantemente il 60% del mercato (sono stato volutamente molto scarso)
- posso usare gli skill di html5 che saranno preziosi anche sotto Windows 8
- posso (almeno teoricamente) sviluppare anche per Windows Mobile 6 che nel mondo industriale c'è ancora anche se barcolla vistosamente (ma gli investimenti non si buttano velocemente)
Va da se che se ho i numeri (aka mercato) posso permettermi di realizzare tante applicazioni native quante sono le piattaforme di mercato. Costi alti ma giustificati se ho una applicazione come Angry Birds o anche un pochino meno di successo ;-)
A questo punto mi chiedo se l'SDK di Windows Phone 7 non abbia la necessità di essere riveduto e corretto. Se devo sviluppare mobile mi rivolgo prima a chi possiede lo share di mercato più alto e non credo proprio di dire nulla di folle. E se, fatto questo, voglio allargare a WP7 dovrei avere vita facile, e non cominciare un progetto da zero.
Proviamo ad applicare lo stesso ragionamento a chi ha lo share di mercato più alto nelle applicazioni PC, cioè Windows. Sullo sviluppo desktop non avrei dubbi a cominciare a sviluppare per Windows con Visual Studio una bella applicazione WPF o Silverlight, per poi cercare di salvare il salvabile utilizzando mono, moonlight o quant'altro vogliate. La prevalenza di Windows sul mercato è tale che per molte applicazioni posso anche permettermi di non fare alcun porting sugli altri OS. (Non me ne vogliano gli sviluppatori java, sul mio PC di sviluppo ho installato Eclipse, Aptana e Netbeans, ma se sviluppo per Windows e posso scegliere, la mia preferenza è per Visual Studio e il Framework.)
Per la Build Conference a cui parteciperò tra poche settimane non mi aspetto alcuna novità su questo specifico aspetto dello sviluppo ma ovviamente mi aspetto fuochi artificiali per tutto il resto.