Sono stato un bambino degli anni '80 e ricordo bene il senso di fiducia nel futuro che mi accompagnava durante la scuola media, mentre imparavo il Basic del Commodore 64 convinto di poter aiutare il mondo a progredire.
Sono stato un adolescente degli anni '90, con un computer, un modem e le prime BBS ad insegnarmi la buona educazione informatica, la condivisione della conoscenza e le potenzialità dello sviluppo collaborativo.
Sono stato un giovane del 2000 ed ho vissuto la bolla delle dot-com lavorando in una web-TV, assistendo in prima persona al momento in cui i media hanno smesso di usare la parola "progresso".
L'esplosione della bolla della new economy è stata una delusione sociale e tecnologica per la quale molti hanno perso fiducia nello sviluppo e nel futuro. Abusato negli anni precedenti, improvvisamente il termine "progresso" è diventato troppo impegnativo e foriero di cattivi ricordi; c'era bisogno di un nuovo termine, meno impegnativo, moralmente neutro e rassicurante. E' nata così l'innovazione.
Anziché andare avanti, consolidando le fondamenta e costruendo il futuro, il nuovo mantra dei tecnologi è presentare delle novita', anche se inutili, per potersi fregiare del titolo di innovatori. Se poi il prodotto non dovesse rivelarsi commerciale a sufficienza, l'anno successivo potrà essere innovato nuovamente senza troppi problemi.
Durante la conferenza per gli sviluppatori Apple WWDC 2010, Steve Jobs ha presentato l'iPhone 4 definendolo "il migliore iPhone di sempre". Una mossa di puro marketing senza alcun riscontro evidente perche', sebbene sia logico che la tecnologia vada avanti con processori più potenti ed apparecchi più performanti, dalla presentazione del nuovo telefono abbiamo assistito al più alto numero di delazioni che un apparecchio di larga diffusione possa ricevere. Non mi riferisco solo all'effettiva fragilità dello schermo, ampiamente preannunciata da diversi specialisti del settore, od ai problemi del sensore di prossimita', già riscontrata con lo stesso tipo di sensori su altri telefoni, ma anche e soprattutto all'antennagate a cui la Apple, a partire da Steve Jobs, ha risposto prima minimizzando, poi beffeggiando ed infine elargendo il contentino del bumper gratuito.
Eppure, appena un anno prima, durante la conferenza per gli sviluppatori Apple WWDC 2009, lo stesso Steve Jobs presentò Mac Os X 10.6 Snow Leopard affermando chiaramente di aver messo in pausa l'aggiunta di nuove funzionalità affinché potessero perfezionare ulteriormente la già ottima versione precedente. Di questo compito, di solito relegato a qualche aggiornamento minore, venne investita invece la nuova major release: una scelta discussa perchè infrange la legge degli aggiornamenti software.
Chi deve guadagnare sulla vendita di un software crede infatti che, se non aggiunge nuove funzionalità ogni anno, nessuno comprerà l'aggiornamento e non ci saranno guadagni. Questo per Apple non vale. Apple potrebbe anche regalare il proprio sistema operativo perché il suo core business è la vendita di hardware ed il software è solo l'incentivo, il valore aggiunto.
Questi due comportamenti contrapposti di Apple mi hanno indotto a riflettere: da una parte i computer della Mela Morsicata progrediscono e dall'altra i telefoni della stessa azienda restano vittime dell'innovazione.
Cos'è cambiato in appena un anno?
Mac Os X è un nano che guarda lontano dalle spalle del gigante Unix
L'iPhone, al contrario, è un esperimento a cui manca ancora la maturità necessaria a mantenere le promesse del marketing
Oggi le aziende tecnologiche sono ben lontane dal riuscire a stupire una platea di destinatari di massa; la tecnologia nel settore smartphone/PC ha raggiunto la maturità ed è quindi più difficile innovare e stupire allo stesso tempo. Siamo al momento in cui le tecnologie del futuro sono ancora acerbe e costose e le attuali possono solo essere perfezionate. Tra qualche anno vedremo schermi flessibili e sistemi operativi olografici ma oggi, come negli ultimi anni, le aziende più mature sono chiamate ad ottimizzare quanto di buono fatto finora: devono perfezionare, progredire, prima di poter innovare nuovamente.
Con l'avvento delle interfacce Web, i metodi di progettazione stanno evolvendo a danno dell'autoreferenzialita'. Le nuove WebApp sono parte di un'architettura in cui ogni componente può contribuire al meglio: sul server dobbiamo garantire sinergia tra Sistema Operativo, RDBMS, Applicativi ed Interpreti; sul client bisogna usare browser aggiornati che rispettino gli standard.
Il progettista che conosce a fondo l'architettura di sistema non replica ciò che già esiste e sa affidarsi allo strumento minimo necessario per ottenere codice più veloce, compatto e parco di risorse, coordinando strumenti eterogenei. Ad esempio, se un lavoro può farlo il WebServer Apache, non lo chiede all'interprete Java, per trasformare i dati usa XSLT ed impara a sfruttare ogni nuovo framework solo dove serve.
Grande importanza rivestono quelle accortezze che rendono migliore la manutenzione dei sistemi come evitare di fare cache ad ogni livello[1], sfruttare un modulo centralizzato per l'autenticazione o l'interrogazione delle banche dati terze. Su quest'ultimo aspetto voglio spendere due parole di esempio: se affidi il compito di recuperare i dati esterni ad un apposito modulo locale[2] nel caso in cui cambino le condizioni della risorsa esterna la manutenzione sarà immediata perché basterà intervenire su un singolo pezzo di codice. Se si tratta di un microservizio REST autonomo, è anche meglio.
Sulla condivisione e la presentazione dei dati al di fuori dell'architettura si combatteranno le sfide più grandi: l'esperienza con programmatori più bravi di me mi ha insegnato che ogni componente che restituisce dati, deve farlo con un'interfaccia REST in un formato documentato e deve esserci un unico collettore che raccolga i dati da tutti i componenti, li organizzi e li presenti all'esterno, senza bisogno che sappia come quei dati vengano inseriti o prodotti.
Il strada per il futuro passa attraverso nuovi approcci alla manipolazione ed alla condivisione delle informazioni e delle risorse anche nella programmazione: ogni aspetto della struttura aziendale ha bisogno di un direttore d'orchestra che indichi le linee guida e supervisioni il perseguimento degli obiettivi garantendo la massima collaborazione e rimuovendo quegli ostacoli che potrebbero incrinare il buon equilibrio del team. Il reparto sviluppo necessita di un coordinatore che sappia anche valutare la compartimentazione per massimizzare la continuità operativa garantendo la migliore manutenzione possibile.
Perfezionare, migliorare, ottimizzare sono tutti sinonimi per indicare un'azione che le aziende non fanno più tanto volentieri: investire nella manutenzione dei propri apparati con interventi di pulizia notevoli finalizzati ad ottenere sistemi più solidi e software più performanti.
Si innesca invece una dinamica opposta: poiché il programmatore ha un costo alto ed i dispositivi elettronici, sempre più potenti, costano sempre meno, i tecnici preferiscono programmi pesanti, ridondanti ed infarciti di inutili funzioni pur di risparmiare tempo ed al contempo servire "innovazioni" a chi si occupa del marketing.
La lezione di Snow Leopard dovremmo insegnarla nei corsi universitari tanto di informatica quanto di marketing: l'importanza del tuning, inteso non solo come l'ottimizzazione secondo i parametri di utilizzo ma soprattutto come il mantenimento di una solida base su cui costruire l'architettura telematica aziendale.
Come Apple, che con gli interventi di perfezionamento di Snow Leopard ha ottenuto una migliore esperienza d'uso sotto tutti i punti di vista ed un sistema più veloce, più stabile, più leggero e meglio organizzato della versione precedente, così ogni azienda dovrebbe pianificare periodicamente una pausa di riflessione per rivedere l'esistente, eliminare il superfluo e razionalizzare l'infrastruttura, semplificando l'utilizzo delle risorse a disposizione e migliorando le prestazioni.
L'imprevisto si può presentare ad ogni livello: usare sistemi complessi per fare cose semplici, solo perché i sistemi complessi costano comunque poco, non paga nel lungo periodo.
Dopo l'innovazione arrivano la manutenzione e la riparazione: il mantenimento delle infrastrutture, il lavoro di sostegno alla piena funzionalità ed efficienza dei sistemi ha un impatto maggiore sulla vita quotidiana delle persone rispetto alla stragrande maggioranza delle innovazioni tecnologiche.
Un sistema complesso sarà più difficile e costoso da manutenere e riparare, andando ad incidere negativamente sulla qualità della vita dei suoi utenti.
In questo caso, un esempio potrebbe essere il pannello informativo della stazione: i cartelloni meccanici che mostrano solo l'orario di partenza e la destinazione sono affidabili e sempre operativi; i monitor informativi che sfruttano computer e connessioni ad internet per mostrare anche il meteo, le notizie del giorno, i loghi e la pubblicità presentano messaggi di errore almeno due giorni a settimana.
Donald Norman, ingegnere psicologo ed esperto di design, presenta da anni una teoria secondo la quale la tecnologia migliore è quella talmente semplice da diventare trasparente.
Termini come usabilita', computazione ubiqua e informatica pervasiva sono ormai così diffusi da essere noti anche ai non addetti ai lavori.
L'eliminazione della complessità comporta risultati tanto evidenti da far tornare in auge il rasoio di Occam nel tuning di sistemi complessi.
Il compito di chi gestisce sistemi informatici e di telecomunicazioni è chiaro e difficile: trovare il giusto equilibrio tra innovazione ed ottimizzazione per perseguire il reale progresso.
Joram Marino - Luglio 2010
Note
[1]: Cache stratificate succhiano risorse inutili e soprattutto aggiungono possibili errori e disallineamenti: non fare la cache di un filesystem locale, lascia che ci pensi il filesystem; non fare la cache delle query, è compito del RDBMS!
[2]: Alcuni lo chiamano moniker, nome che in origine rappresentava un metodo di collegamento di oggetti derivato dalla tecnologia Microsoft OLE. Oggi chiamiamo così un modulo che sappia come interfacciarsi ad una banca dati, ne gestisca credenziali e caratteristiche specifiche, integri i metadati, restituisca sempre i valori del tipo corretto, garantisca una risposta consistente anche in caso di errore, si occupi di adeguare i formati se cambiano e ne gestisca la cache. Compito del moniker è fornire a tutti gli altri componenti un'interfaccia univoca di accesso ai dati di quella risorsa.