giovedì 26 novembre 2009

Chi più ne ha più ne metta

Qualche tempo fa, a seguito della pubblicazione di una mia considerazione sul lento abbandono di Windows Mobile negli smartphone, e sul proliferare di nuovi sistemi operativi dedicati a questi device, un commento lamentava che "...come utente tutto questo crea solo confusione. L'assenza di standard è un grande incubo per l'utente, e per quanto si voglia criticare Windows è stato il principale motore dell'informatica "generalistica" proprio per la sua funzione di standard..."; e ancora: "Mi chiedo come possano pensare queste case che gli sviluppatori siano in grado di seguire tutte le piattaforme e al tempo stesso migliorare i propri prodotti e concretizzare nuove idee."
Vorrei rispondere a questa osservazione affrontando l'argomento in maniera più ampia, senza considerare specificatamente gli smartphone (ma entrando in dettaglio, quando necessario, anche solo a titolo esemplificativo). Le tematiche sulle quali vorrei porre l'attenzione sono l'importanza degli standard, il ruolo di Windows, e lo sviluppo per più piattaforme.

Partiamo dagli standard; sicuramente è più che giusto dire che l'assenza di standard è un incubo per l'utente, ma "cosa" deve essere interessato dagli standard? Facendo il classico paragone automobilistico, voi sareste contenti se ci fosse un solo produttore di auto, che fa solo 2 modelli standard, con un solo tipo di motore, per un solo venditore di carburante? Non credo... l'importante è che l'auto rispetti certi standard a livello di comandi e di sicurezza, e che la benzina in vendita ai vari distributori rispetti certe caratteristiche predefinite, altrimenti il motore non funziona... Anche in campo informatico, le regole dovrebbero essere simili: l'importante è che il prodotto finale del nostro lavoro rispetti determinati standard, ma non che sia standard il modo di produrlo. Io devo avere la possibilità di creare, modificare, e visualizzare una JPG con più applicazioni su diversi sistemi operativi, o comunque, se fossi uno sviluppatore, dovrei avere la possibilità di realizzare un'applicazione per qualsiasi sistema operativo in grado di "maneggiare" lo standard JGP: nessuno sarebbe contento se (per esempio) per visualizzare una JPG fosse "obbligatorio" comprare la versione Windows di Photoshop, e non ci fosse altro modo.
La possibilità di scelta tra applicazioni è un grosso vantaggio per l'utente: il professionista può scegliere il software costoso che gli offre la maggiore flessibilità e potenzialità di modifica, l'hobbysta può optare per uno shareware che gli consenta comunque una certa libertà di azione, mentre al semplice "consumatore" può bastare un software di visualizzazione. Tutto questo accade quotidinamente quanto mandate una mail o quando visitate una pagina Web: Windows, Mac OS X, Linux, iPhone, Explorer, Firefox, Safari, Opera, e chi più ne ha più ne metta, sono tutti in grado di visualizzare le stesse pagine grazie ad uno standard... ma si tratta di uno standard dei documenti, non dell'applicazione o del sistema operativo utilizzato.

Ma passiamo al secondo argomento: il ruolo che avrebbe avuto Windows come motore dell'informatica "generalista", grazie alla sua funzione di diffusione di un ambiente di lavoro standard. Su questo aspetto si possono fare le ipotesi più disparate, senza giungere ad un risposta vera e propria. Se è vero che il boom dell'informatica "generalista" coincide grossomodo con l'uscita di Windows 95, è stato davvero Windows 95 a creare il boom, o Windows 95 ha semplicemente cavalcato il successo di un boom che sarebbe comunque arrivato in quegli anni? E soprattutto, anche ammesso che sia stato il sistema operativo di Redmond a creare il boom (dopotutto non c'erano riusciti né la Apple con il Mac, né la Commodore con l'Amiga, probabilmente per via dell'hardware proprietario), possiamo affermare con certezza che la diffusione quasi monopolistica di un OS abbia fatto da motore dell'informatica? O piuttosto ha causato un certo "appiattimento" del settore, vista la poca incidenza della concorrenza? Sono domande alle quali non troveremo mai una risposta, ma possiamo osservare che se in quegli anni l'hardware era al disotto delle richieste del software, e lo sviluppo delle applicazioni richiedava una certa cura nell'ottimizzazione, al giorno d'oggi l'hardware ha fatto progressi tali che (anche se non è bello) ci si può permettere di sviluppare il software (o quantomeno alcuni software) con linguaggi di più alto livello, senza preoccuparsi più di tanto degli sprechi... e qui arriviamo al terzo punto: lo sviluppo.

Da quel che posso vedere intorno a me, sicuramente non c'è carenza di sviluppatori: se anche le piattaforme si moltiplicassero, ci sarebbe lavoro per tutti (al di là poi di vedere quanto sia remunerativo). Vogliamo fare un esempio inerente al discorso iniziale? Dall'uscita dell'iPhone, pare che tutti siano diventati sviluppatori per Smartphone, visto che sull'AppStore, in un anno e mezzo di vita, sono state realizzate 100'000 applicazioni (più o meno valide che siano). Cambiando target, e passando ai normali computer, anche lì mi pare che il software abbondi ovunque ci sia un minimo di diffusione della piattaforma: ovviamente un OS nuovo che parte da zero ha bisogno di qualcosa che gli dia un primo stimolo, ma una volta innescato il meccanismo, si instaura un circolo vizioso per cui più aumenta la diffusione, più ci sarà software, e più software c'è, più aumenta la diffusione. Sui normali computer la cosa è un po' più difficile perché oltre ad un discorso "storico" e "culturale" (il quasi monopolio raggiunto da Windows fa si che molta gente non sappia nemmeno che esistono "altri" sistemi operativi) entrano in gioco anche discorsi di software professionali e investimenti aziendali a vari livelli (anche se nell'eventualità di una maggiore standardizzazione di tutti i documenti, questo tipo di problematica sarebbe molto più ristretta); sugli smartphone, che sono prodotti più consumer, e (volendo) soggetti anche alle mode, la situazione è invece più semplice: se un produttore decide di adottare un certo sistema, al di là del successo che può avere o meno quel particolare modello di telefono, un minimo di livello di diffusione è comunque assicurato, visto che l'utente non ha certo la possibilità di comprare un qualsiasi telefono Symbian per installarci Android o Win Mobile (né tantomeno iPhone OS o WebOS), o viceversa... Tornando a parlare di computer, vale comunque la pena di osservare che esistono ambienti di sviluppo che consentono di compilare lo stesso codice per più sistemi operativi (per esempio REALbasic), o linguaggi interpretati che per loro natura sono multipiattaforma: è vero che al momento attuale non sono adatti per tutti i compiti, ma se la crescita dell'hardware continua a questi ritmi, e/o la connessione alla rete diventa sempre più importante, lo scenario futuro potrebbe essere molto diverso, perché l'informatica è una scienza ancora molto giovane...

3 commenti:

  1. In generale le considerazioni sono giuste, però il problema c'è e se ne dibatte sempre in tanti ambienti (ogni tanto viene tirato fuori anche per le console, da grandi case come la stessa EA).
    L'esempio della auto è calzante solo in parte e comunque il problema c'è anche li.
    Se cerchi pezzi di ricambio o di modifica è molto più semplice trovarli per modelli e marche affermate che in egual misura per tutti e non per motivi di simpatia dei costruttori di accessori ma perchè è impossibile prevedere linee di produzione e magazzini che coprano tutte le "possibilità" di un mercato tanto diversificato.
    Sono d'accordo che la diversità aumenta la concorrenza e con questa, in teoria, si è spinti maggiormente verso un miglioramento dei propri prodotti, anche se le eccezioni non mancano di certo (vedi flash che per quanto inutile tutti adottano tranne apple che continua ad essere contraria).
    Semplicemente non ci sono solo cose positive.
    Anche tu per esempio hai criticato la "libertà" o la "poca standardizzazione" (a seconda del punto di vista) di WM e Android, segnalandola come difetto per chi sviluppa su quelle piattaforme non come pregio per creare IL modello "ottimale" su cui giri WM o Android.
    Oggi come oggi uno neo sviluppatore si pone la domanda su quale ambiente e a quali clienti rivolgersi.
    Su tutti ? impossibile
    Su iphone ? probabile, ha più mercato ma anche più concorrenza
    Su Android ?
    Su WM, su blackberry, su Palm, su symbian, su maemo, sull'"open" di samsung, su java, su chissà quale altro sistema proprietario ?
    Per un neo sviluppatore una mossa sbagliata, una scelta azzardata può significare sprecare risorse e magari un'ottima idea e si sa che nell'informatica le idee sono copiate velocemente, se non riesci a sfruttarla subito altri ti scavalcano...
    Per capirci non sono contro la varietà e la concorrenza ma attualmente nell'ambiente smartphone ci sono decisamente troppi s.o. diversi (moltiplicati per i modelli diversi), e questo per me è un difetto non un pregio.

    I diversi ambienti/linguaggi di sviluppo sicuramente aiutano ma non risolvono dato che le differenze sono comunque tali da dover procedere ad un'accurata "personalizzazione" del codice.
    Certo con l'hardware che sta diventando più simile (multitouch, sensore giroscopico, fotocamera con autofocus, display capacitivo, ecc.) è vero che le cose stanno migliorando anche in questo senso.

    Apple è apprezzata (e ha fatto la sua fortuna col ritorno di Jobs) perchè da sempre un ristretto ventaglio di possibilità di scelta, nel settore smartphone addirittura 1 sola (non considero la capacità di memoria), 2 se si vuol pensare anche al modello precedente.

    RispondiElimina
  2. Quello che voglio dire è che la ploriferazione di sistemi non è in alcun modo dannosa per l'utente, che ha tutto da guadagnare da una maggiore libertà di scelta. Ovvio che il tutto acquista un certo interesse nel momento in cui c'è una certa "massa critica" che rende il prodotto interessante anche per chi sviluppa il software, ma di sviluppatori ce n'è a sufficienza per tutti i sistemi, e non è certamente la carenza di sviluppatori o la mancanza di un "sistema standard" a determinare il volume di applicazioni disponibili per un certo sistema... il problema, casomai, è la valutazione sul ritorno economico nell'investire in un sistema poco diffuso (che però, essendo meno diffuso, avrà anche minore concorrenza). Se invece di avere Windows al 90%, MacOS al 5%, e gli altri (Linux in testa) a quello che avanza, ci fosse una distribuzione più equa, credo che tutti ne trarrebbero giovamento, utenti e sviluppatori.
    Certo, poi per una singola sw-house (o per il singolo sviluppatore) può essere troppo impegnativo realizzare la stessa applicazione per tutti i sistemi, ma questo di per sé non è un problema: la sw-house "pippo" può fare il sw "pluto" che consente di maneggiare documenti .std per il sistema X, e lo sviluppatore "tizio" fa il sw "caio" che permette di lavorare sugli stessi documenti .std ma sul sistema Y. Ogni sviluppatore sceglie la piattaforma sulla quale riesce a sviluppare meglio, e ogni utente scegli il sw o il sistema che ritiene migliore avendo la consapevolezza che in ogni caso potrà lavorare con i suoi documenti .std.
    Tutto questo senza considerare che entrambi gli sviluppatori potrebbero sviluppare nel linguaggio .uni che potrebbe essere compilato o interpretato allo stesso modo sia per X che per Y (e qui entra in gioco la potenza dell'hardware, visto che con hardware molto potente si potrebbero superare i limiti prestazionali legati ai linguaggi interpretati). O ancora, tutto questo senza considerare che un domani, tutto il sw potrebbe risiedere su server remoti in rete, e i nostri computer potrebbero essere poco più di terminali "stupidi". A quest'ultima soluzione in realtà ci credo fino ad un certo punto, o comunque la vedo realizzabile solo parzialmente per certi scopi: primo perché sono convinto che l'utente preferisca avere un dispositivo che, almeno per certe cose, sia indipendente dalla rete (parlo proprio di indipendenza "operativa", al di là poi di un discorso di privacy dei documenti), secondo perché sarebbe un disastro per i produttori di hardware (te la vedi, adesso, una Intel che butta a mare i Core i7 per fare solo Atom?). Infine, per rendere plausibile una cosa del genere ogni angolo del mondo dovrebbe essere sempre connesso, il che lo vedo mooolto in là nel futuro...

    RispondiElimina
  3. Dimenticavo... la poca standardizzazione di WM o Android è una cosa un pochettino diversa, visto che riguarda una frammentazione interna allo stesso sistema: chi sviluppa per Android è constretto a tenere in considerazioni infinite variabilità dell'hardware, nonché (eventualmente) di alcune parti dello stesso sistema. Magari mi sbaglio, ma IMHO Google dovrebbe dare una direzione ben precisa e più restrittiva su quale hardware supportare e quali parti del sistema modificare. Qui il problerma diventa la "troppa libertà" che cozza con la standardizzazione.

    RispondiElimina