Ciao, e benvenuto nella prima puntata della ventesima stagione di questo podcast. Venti stagioni: è un piccolo traguardo, e voglio ringraziarti per avermi accompagnato fin qui. Per l'occasione, raccontiamo una storia bellissima, che sta al cuore stesso del nostro mestiere: la storia dei linguaggi di programmazione. Come siamo passati dal parlare alle macchine nella loro lingua fatta di numeri, incomprensibile per noi, a esprimere le nostre idee in qualcosa di sempre più vicino al pensiero umano. È la storia di una lunga scalata verso l'alto, e oggi partiamo dal fondo, da dove tutto è cominciato.
Partiamo da una verità fondamentale, che sta alla base di tutto e che spesso dimentichiamo: nel profondo, un computer capisce solo numeri. Sotto ogni cosa, una macchina non comprende parole, né idee, né concetti: comprende soltanto sequenze di numeri, ridotti alla loro forma più elementare, fatta di due soli simboli, che possiamo immaginare come acceso e spento, uno e zero. Tutto ciò che un computer fa, in fondo, è manipolare queste sequenze di uno e zero secondo istruzioni che sono, anch'esse, numeri. È una macchina che pensa, se così vogliamo dire, esclusivamente in numeri. E questa è la lingua madre, l'unica lingua nativa, di ogni computer.
Ora immagina cosa significasse, agli albori, programmare una macchina simile, perché è quasi inconcepibile. Per farle fare qualcosa, dovevi darle istruzioni nella sua lingua: cioè sequenze di numeri. Il programmatore doveva letteralmente scrivere lunghe file di numeri, ciascuno un'istruzione elementare che la macchina sapeva eseguire, componendo a mano, cifra dopo cifra, tutto ciò che voleva far fare al computer. Era un lavoro terribilmente faticoso, lentissimo, e facilissimo da sbagliare: un solo numero sbagliato in mezzo a migliaia, e tutto andava storto, senza che fosse facile capire dove. Programmare significava pensare come la macchina, nei suoi minuscoli passi numerici, ben lontano da come pensa un essere umano.
C'era poi un secondo problema, altrettanto grave, in questo modo di programmare: era legato a una macchina sola. I numeri che rappresentavano le istruzioni erano specifici di un certo tipo di computer: cambiando macchina, cambiavano i numeri, e il programma scritto per una non funzionava più su un'altra. Dovevi riscrivere tutto da capo per ogni tipo di macchina diversa. Il tuo lavoro era prigioniero dell'hardware per cui l'avevi scritto, incatenato a quella specifica macchina. Non esisteva l'idea di un programma che potesse vivere e girare su computer diversi: ogni programma nasceva e moriva legato al suo hardware.
Ed è proprio da questa enorme fatica che nasce il sogno che guiderà tutta la storia dei linguaggi, il filo conduttore di questa stagione. Il sogno è colmare il divario, il divario enorme tra come pensiamo noi, umani, per idee e concetti e parole, e come pensa la macchina, per numeri elementari. Tutta la storia dei linguaggi di programmazione è la storia di questo avvicinamento: costruire modi di esprimersi sempre più vicini al pensiero umano, e insegnare alla macchina a colmare da sola la distanza, traducendo ciò che scriviamo nella sua lingua di numeri. È una scalata, gradino dopo gradino, dal fondo dei numeri della macchina verso l'alto del pensiero umano.
Voglio darti fin d'ora questa immagine della scala, perché è la lente di tutta la stagione. Immagina una lunga scala verticale. In fondo, al livello più basso, c'è la macchina, con la sua lingua di numeri. In cima, in alto, c'è il pensiero umano, con le sue idee e i suoi concetti. Ogni linguaggio di programmazione è un gradino di questa scala, a una certa altezza tra i due estremi. I primi linguaggi erano gradini bassissimi, vicini alla macchina. Man mano, sono nati gradini sempre più alti, più vicini al modo umano di pensare. La storia che racconteremo è la storia di questa salita: come, gradino dopo gradino, siamo saliti dalla lingua della macchina verso la lingua dell'uomo.
Voglio anche anticiparti una tensione che percorrerà tutta la stagione, perché è profonda e affascinante. Salire la scala, avvicinarsi al pensiero umano, ha vantaggi enormi: si programma più facilmente, più velocemente, con meno errori. Ma ha anche un prezzo. Più ti allontani dalla macchina, verso l'alto, più perdi il controllo diretto e minuzioso su ciò che la macchina fa, e a volte un po' di velocità. Stare in basso, vicino alla macchina, dà controllo assoluto e massima velocità, ma è faticoso e pericoloso. Stare in alto è comodo e sicuro, ma più lontano dai dettagli. Questo compromesso tra vicinanza alla macchina e vicinanza al pensiero è una delle tensioni eterne di tutta la storia dei linguaggi.
Per oggi ci fermiamo qui. Nel profondo, un computer capisce solo numeri, sequenze di uno e zero, e programmare agli albori significava scrivere a mano lunghe file di numeri, faticosissimo, pieno di errori, e per giunta legato a una singola macchina. Da questa fatica nasce il sogno che guida tutta la storia dei linguaggi: colmare il divario tra il pensiero umano e la lingua numerica della macchina, salendo una scala di astrazione, gradino dopo gradino, dai numeri della macchina verso le idee dell'uomo, con una tensione costante tra il controllo della vicinanza alla macchina e la comodità della vicinanza al pensiero. Nella prossima puntata saliamo il primo gradino: dai numeri ai nomi. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.