Non appena vengono annunciate nuove versioni di un programma che utilizza, un buon programmatore comincia a farsi consumare la mente da un tarlo: quello della curiosità. Per prima cosa inizia la spasmodica caccia a ogni dettaglio che fornisca utili informazioni su quali siano le innovazioni apportate e le impressioni d’uso di chi ha potuto metterci sopra le mani.
Dopo l’assimilazione delle notizie si passa all’attesa fortemente onirica e di fantozziana memoria caratterizzata da visioni a occhi aperti in qualsiasi momento della giornata: le meraviglie di cui si è venuti a conoscenza si materializzano improvvisamente e ci si lascia trasportare dal dolce e ammaliante canto delle sirene che osannano questa o l’altra funzionalità di cui ovviamente non se ne può certo fare a meno (ma prima come abbiamo fatto a vivere senza?!?).
Il ritorno alla realtà è doloroso quanto un destro di Mike Tyson: purtroppo passare alla nuova versione non è possibile; almeno non subito. Le motivazioni sono diverse; il costo (per i programmi a pagamento) potrebbe sembrare un (forte) deterrente, ma i fattori più importanti sono rappresentati dalle dipendenze, dall’adeguamento del codice esistente, e dalla schedule da fissare per l’aggiornamento della piattaforma aziendale (che spesso comporta un disservizio temporaneo).
Non è possibile pensare di passare a una nuova versione di un’applicazione senza avere a che fare con questi vincoli.
Le dipendenze sono rappresentate dalle librerie impiegate e/o da altre applicazioni di cui facciamo uso. Esattamente come per i nostri programmi, il loro codice va adeguato, e soltanto dopo che è stato finalizzato e testato si provvederà al rilascio. Inoltre non è affatto scontato che le varie librerie verranno aggiornate e rilasciate.
Ad esempio il 1 ottobre scorso è stato rilasciato Python 2.6, che presenta delle caratteristiche molto utili (il multiprocessing in primis per sfruttare tutti i core presenti nel sistema; ovviamente ha anche tante altre cose utili). Ebbene, a due mesi e mezzo di distanza, tre librerie (di quelle che uso) non sono state aggiornate.
Passi per ClearSilver, che è un piccolo progetto (che ho usato una sola volta, fortunatamente), ma all’appello manca l’usatissimo mod_python di Apache; manca anche Ice che è il framework alla base di tutti i server che finora ho sviluppato. Senza almeno questi ultimi due non possono nemmeno lontamente pensare di aggiornare la mia macchina prima e i sistemi in produzione dopo.
Superati questi scogli c’è l’adeguamento del codice. A volte gli aggiornamenti rendono necessari dei ritocchi, anche se generalmente c’è retrocompabilità. Dico generalmente perché ciò non è affatto scontato. Se prendiamo Python 3.0, come ho già riportato, notiamo che il linguaggio è stato “ripulito” senza garantire una perfetta compatibilità all’indietro. Passare quindi a questa nuova versione richiederà un notevole sforzo per riadattare il codice esistente.
Fortunatamente Python 2.6 è stato pensato per agevolare il passaggio (è possibile abilitare in qualsiasi momento molti dei cambiamenti non retrocompatibili, e quindi testare il codice esistente ed eventualmente modificarlo), e inoltre è stato fornito un tool per automatizzare per buona parte l’aggiornamento. Inutile dire che una buona batteria di test è a dir poco fondamentale onde evitare spiacevoli sorprese.
Si potrebbe pensare che arrivati finalmente a questo punto (librerie e proprio codice aggiornati) la strada sia spianata. Niente affatto. L’aggiornamento delle macchine di produzione è sicuramente l’ostacolo più grande da superare. Ostacolo non in senso negativo, in quanto non c’è nessuno che vuol metterci i bastoni fra le ruote soltanto per il gusto di farlo, ma perché si tratta di un’operazione estremamente delicata e un errore che saltasse fuori potrebbe causare serii danni.
In questa fase è fondamentale convincere gli amministratori di sistema e i propri responsabili che l’aggiornamento comporterà benefici tali da compensare e superare i costi necessari all’adeguamento di tutte le macchine coinvolte, perché ciò può richiedere anche diversi giorni lavorativi. Fatto questo, bisognerà schedulare opportunatamente tutta la fase di adeguamento.
Nulla, quindi, è scontato. Se è vero che a casa magari si ha più libertà nello sperimentare nuove soluzioni, in ambito lavorativo bisogna giustamente fare i conti con tutta una serie di vincoli che non si possono assolutamente ignorare o prendere a cuor leggero.
Quindi in attesa che tutti i questi problemi vengano via via risolti, non ci resta che… continuare a sognare.