Secondo la cosiddetta legge di Moore, la complessità di un microcircuito raddoppia ogni 18 mesi. Questa deduzione empirica di Gordon Moore (uno dei fondatori di Intel), basata sull’osservazione dell’andamento della tecnologia elettronica, è stata per decenni un comodo paravento dietro cui si è nascosta un’attenzione sempre più ridotta verso l’efficienza del software, ovvero uno dei parametri essenziali per giudicare qualsiasi applicativo.
I limiti possono essere una leva per sperimentare nuove strade
La nascita dei primi personal computer ha aperto le porte dell’informatica a nuove categorie di programmatori, che hanno saputo dimostrare, in particolare negli anni ’80, come la scarsità delle risorse di calcolo potesse rappresentare non tanto una limitazione, quanto un’opportunità per mostrare la propria abilità e percorrere sentieri non ancora battuti.
Nel corso degli anni questo spirito pionieristico si è perduto; le cause sono molte, tutte ugualmente rilevanti; lo sviluppo del software è spesso diventato un lavoro di massa, con progetti giganteschi su cui lavorano molte migliaia di programmatori, ciascuno dei quali è responsabile soltanto di una piccola frazione del codice. In queste circostanze, la standardizzazione delle metodologie di sviluppo e la rapidità di esecuzione sono molto più importanti rispetto alla creatività e alla ricerca dell’efficienza.
L’idea del codice leggero è andata persa nel tempo
Inoltre, lo sviluppo della tecnologia ha portato due conseguenze interconnesse tra loro: le piattaforme su cui si lavora si rinnovano più rapidamente rispetto al passato, rendendo difficile una conoscenza intima, presupposto essenziale per poterne sfruttare a fondo tutte le potenzialità; e, infine, la continua crescita della potenza di calcolo ha reso meno pressante l’esigenza di scrivere codice leggero, compatto ed efficiente. Basta pensare alla diffusione dei progetti software anche di basso livello basati su codice interpretato o pseudo compilato per rendersi conto di come l’efficienza non sia più considerata un requisito fondamentale e neppure rilevante nella maggior parte degli scenari.
Un nuovo stimolo all’efficienza software
Ma la situazione potrebbe essere sul punto di cambiare, per l’azione combinata di due tendenze di origine diversa; da un lato, la diffusione dei dispositivi smart e IoT sta spostando la capacità computazionale dai tradizionali computer, o dai server ospitati nei centri di calcolo delle grandi aziende, verso oggetti compatti ed economici, in cui le risorse (capacità computazionale pura, così come memoria di massa e di lavoro) ritornano a essere fattori davvero limitanti.
Dall’altro, invece, la spinta globale verso l’efficienza energetica sta crescendo e rappresenta un freno alla scorciatoia utilizzata più spesso fino a oggi: se le risorse locali non bastano, spesso si utilizza il dispositivo locale solo per raccogliere le informazioni ed eventualmente mettere in atto le decisioni prese, mentre l’intelligenza è scaricata verso qualche server remoto che garantisce tutta la capacità di calcolo necessaria. Ma il trasporto di informazioni da locale a remoto e viceversa, e l’esistenza stessa di questa “seconda gamba” necessaria per mantenere in piedi il sistema rappresentano grandi sacche di inefficienza, in primo luogo economica ma anche energetica. L’azione combinata di queste spinte sta riportando in auge la ricerca dell’efficienza del software, valorizzando le capacità di chi è in grado di lavorare su architetture caratterizzate da risorse limitate e le sfrutta a fondo.