C’è sempre stata una tensione nell’evoluzione dell’informatica: ogni volta che la tecnologia si è aperta a un numero maggiore di persone, ha ceduto qualcosa in termini di precisione, consapevolezza e controllo. Ottimizzazione e democratizzazione si muovono in direzioni opposte.
Negli anni in cui i computer erano accessibili solo a pochi laboratori e grandi aziende, la scarsità di risorse era la condizione fondamentale entro cui si esercitava la professione del programmatore. La memoria disponibile si misurava in kilobyte, la capacità di calcolo era rigidamente limitata, le operazioni di input e output con le periferiche esterne erano lente e costose.
In questo contesto, ogni santa istruzione scritta aveva un peso specifico. Ogni benedetto ciclo di clock sprecato era una perdita reale, che poteva compromettere l’intera esecuzione di un programma.
Chi programmava in quella generazione doveva conoscere la macchina in profondità, sapere come il processore gestiva i registri, come la memoria veniva allocata e liberata, come le istruzioni venivano eseguite a livello fisico, perché era una necessità imposta dalla realtà hardware.
Il risultato era una cultura professionale in cui l’ottimizzazione significava scrivere codice efficiente, non c’erano alternative. La scarsità era un vincolo epistemicamente fertile: obbligava a capire.
La fine della scarsità è arrivata con l’avvento del personal computer e, sottostante a esso, con la dinamica descritta da Gordon Moore nel 1965: la densità dei transistor nei circuiti integrati raddoppia a intervalli regolari, con conseguente raddoppio delle prestazioni computazionali. Questa legge empirica, rimasta valida per decenni, ha trasformato l’informatica. Le risorse sono diventate progressivamente abbondanti e a basso costo. Ciò che prima richiedeva un calcolatore che occupava un’intera stanza è diventato disponibile su una scrivania, poi su un portatile, poi in tasca.
Questa trasformazione non è solo quantitativa, infatti ha cambiato la relazione tra l’utente, la macchina e chi la programma.
La democratizzazione dell’informatica si è realizzata attraverso un processo di stratificazione. Ogni nuovo strato aggiunto sopra i precedenti ha reso l’accesso più semplice, nascondendo la complessità sottostante. I linguaggi di alto livello hanno sollevato il programmatore dalla gestione diretta dei registri e della memoria. I sistemi operativi con interfaccia grafica hanno sollevato l’utente dalla necessità di conoscere i comandi testuali. I framework e le librerie hanno sollevato lo sviluppatore dalla necessità di riscrivere algoritmi fondamentali. Le piattaforme cloud hanno sollevato l’organizzazione dalla necessità di gestire fisicamente l’infrastruttura. Questa nuova condizione ha reso possibile una democratizzazione senza precedenti: non era più necessario conoscere la macchina in profondità per usarla, né per programmarla.
Il punto terminale di questa traiettoria è rappresentato oggi dal vibe coding: la pratica di descrivere in linguaggio naturale ciò che si vuole ottenere, delegando a un modello di intelligenza artificiale la scrittura del codice. Non è richiesta alcuna conoscenza di sintassi, strutture dati, algoritmi, architettura dei sistemi. Chiunque abbia un’idea e la capacità di formularla verbalmente può ottenere un programma funzionante. La soglia di ingresso all’informatica non è mai stata così bassa nella storia della disciplina.
Tuttavia, ogni strato aggiunto ha anche aumentato la distanza tra chi usa lo strumento e la realtà fisica. La competenza si è spostata verso l’alto nella catena delle astrazioni, allontanandosi dalla macchina reale.
Questo spostamento non è neutro. Chi conosce solo gli strati superiori può costruire e operare, ma la semplicità d’uso è stata acquisita al prezzo di una fragilità latente, che non si manifesta finché le condizioni rimangono stabili.
Si prenda un’analogia meccanica. Chi lavora su un motore automobilistico sa che sostituire il propulsore non è un’operazione isolata. Il nuovo motore deve interfacciarsi con il sistema di trasmissione, con la batteria e il circuito elettrico, con il sistema di raffreddamento, con il telaio e le sue geometrie. Modificare un componente senza considerare le relazioni che lo legano agli altri può produrre un sistema che, pur dotato di un componente migliore, funziona peggio del precedente perché si arriva prima al collo di bottiglia preesistente.
Chi costruisce sistemi oggi, con l’aiuto di modelli linguistici, ha la responsabilità di sapere fin dove si estende la propria comprensione e dove inizia il territorio sconosciuto. La consapevolezza del confine è utile anche per gli analisti che devono comprendere questo lock-in cultural-tecnologico quando fanno le previsioni finanziarie. L’ottimizzazione e la democratizzazione rimarranno in tensione: quando uno avanza, l’altro arretra.
Ciò che si può scegliere è di non ignorare questa tensione, e di non scambiare la semplicità d’uso e di programmazione per la comprensione del sistema.