Ciao, e benvenuto nell'ottava puntata della ventesima stagione. Nelle scorse puntate abbiamo visto salire i linguaggi e moltiplicarsi i modi di pensare. Oggi affrontiamo un fatto che chiunque si affacci a questo mondo nota subito, spesso con smarrimento: esistono tantissimi linguaggi di programmazione, decine e decine, forse centinaia. Perché così tanti? Non sarebbe meglio uno solo? E come si affronta questa moltitudine? Oggi capiamo perché i linguaggi si sono moltiplicati, e la ricerca di un terreno comune che permetta di far girare i programmi ovunque.
Partiamo dalla domanda naturale: perché tanti linguaggi diversi, invece di uno solo perfetto? La risposta è che non esiste un linguaggio perfetto per tutto, perché esigenze diverse richiedono strumenti diversi. Un linguaggio pensato per la massima velocità, vicino alla macchina, sarà diverso da uno pensato per la facilità e la rapidità di scrittura. Uno pensato per programmi enormi e robusti sarà diverso da uno per piccoli compiti veloci. Uno adatto a un certo campo, come il calcolo scientifico, sarà diverso da uno adatto a un altro. Ogni linguaggio nasce da un insieme di scelte e priorità, e siccome le priorità legittime sono tante e diverse, sono nati tanti linguaggi diversi.
Voglio evidenziare un aspetto affascinante di questa varietà, che spesso sfugge: ogni linguaggio incarna dei valori, una filosofia. Un linguaggio non è solo un insieme di regole tecniche: riflette delle scelte su cosa conta di più. C'è chi privilegia la velocità di esecuzione sopra ogni cosa. Chi privilegia la sicurezza, il proteggere il programmatore dagli errori. Chi privilegia la semplicità e la facilità di apprendimento. Chi privilegia l'espressività, il poter dire tanto in poco. Chi privilegia la robustezza per programmi giganteschi. Queste priorità diverse, questi valori diversi, plasmano linguaggi diversi, ciascuno con la sua personalità. Scegliere un linguaggio è, in parte, scegliere quali valori contano di più per te e per il tuo problema.
Ma questa moltitudine crea anche un problema, che riprende un tema della stagione sulla rete: la frammentazione. Se ci sono tanti linguaggi diversi, e ricordi che ogni linguaggio va tradotto nei numeri di ogni specifica macchina, ci si ritrova con una complessità enorme: tanti linguaggi per tante macchine diverse, una moltiplicazione di traduttori e di incompatibilità. E soprattutto, un programma scritto in un certo linguaggio e tradotto per una certa macchina resta legato a quella combinazione. Riemerge, in forma nuova, il vecchio sogno che avevamo all'inizio: poter scrivere qualcosa e farlo girare ovunque, su qualsiasi macchina, senza rifare tutto ogni volta.
Ed ecco l'idea ingegnosa che affronta questo problema, e che è bella perché riprende un concetto già incontrato: creare un terreno comune, un livello intermedio. Invece di tradurre ogni linguaggio direttamente nei numeri di ogni specifica macchina, si inventa un linguaggio intermedio, comune, e una specie di macchina finta, immaginaria, che capisce quel linguaggio intermedio. I vari linguaggi vengono tradotti in questo intermedio comune. E poi, per ogni macchina reale, basta costruire una volta uno strumento che sappia eseguire quel linguaggio intermedio su quella macchina. Così, un programma tradotto nell'intermedio può girare su qualsiasi macchina che abbia quello strumento, senza essere ritradotto.
Voglio farti apprezzare l'eleganza di questa soluzione, perché realizza finalmente il sogno del far girare ovunque. Con questo livello intermedio comune, scrivi il tuo programma, lo traduci una volta nell'intermedio, e quello stesso risultato può girare su computer diversissimi, purché ciascuno abbia lo strumento che sa eseguire l'intermedio. Scrivi una volta, esegui ovunque. È un po' come una lingua franca, una lingua ponte condivisa: invece di dover tradurre tra ogni possibile coppia di lingue, tutti traducono verso e da quella lingua comune, e il numero di traduzioni necessarie crolla. Il terreno comune intermedio è la lingua franca che unisce linguaggi diversi e macchine diverse.
Voglio collegare esplicitamente questa idea a un tema profondo del podcast, perché è la stessa saggezza sotto forme diverse. Ricordi come internet unì reti diverse con un protocollo comune, un accordo universale? E come tante cose complesse si risolvono trovando uno strato comune condiviso a cui tutti si appoggiano? Il terreno intermedio dei linguaggi è esattamente questo: uno strato comune concordato che fa da ponte tra la varietà sopra, i tanti linguaggi, e la varietà sotto, le tante macchine. Ogni volta che c'è da unire tante cose diverse, la soluzione elegante è spesso la stessa: non uniformarle, ma trovare un terreno comune che le colleghi. È una delle idee più feconde dell'informatica.
Per oggi ci fermiamo qui. Esistono tanti linguaggi perché non ne esiste uno perfetto per tutto: esigenze e valori diversi, velocità, sicurezza, semplicità, espressività, plasmano linguaggi diversi, ciascuno con la sua filosofia. Questa varietà crea però frammentazione, e riemerge il sogno di far girare i programmi ovunque. La soluzione elegante è un terreno comune intermedio: un linguaggio ponte in cui tradurre i vari linguaggi, eseguibile su qualsiasi macchina che abbia lo strumento adatto, come una lingua franca. È la stessa idea del protocollo comune di internet: unire la varietà con uno strato condiviso. Nella prossima puntata affrontiamo il compromesso tra sicurezza e comodità: il linguaggio che ti protegge. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.