Ciao, e benvenuto nella prima puntata della ventitreesima stagione di questo podcast. Nella stagione sulla storia dei linguaggi abbiamo visto come ognuno di essi nasca da certe scelte e certi valori. Oggi cominciamo a raccontarne uno in particolare, un linguaggio moderno che ha conquistato un posto importantissimo nel mondo del software, soprattutto in quello dell'infrastruttura e dei servizi in rete: si chiama Go. E la sua storia è affascinante, perché nasce da un'idea quasi provocatoria: che, nella programmazione, meno può essere meglio, e che la semplicità è una scelta radicale e potente. Oggi partiamo dal perché è nato.
Partiamo dal problema che Go voleva risolvere, perché lo capisce bene chi ha lavorato su grandi sistemi. Go è nato dentro una grande azienda tecnologica, che costruiva software enorme, con team enormi, su una scala gigantesca. E chi ci lavorava era frustrato. I linguaggi che avevano a disposizione sembravano offrire solo scelte insoddisfacenti: da un lato, linguaggi velocissimi ma complicati, difficili da imparare, pieni di funzionalità intricate, e per giunta lentissimi da compilare, cioè da tradurre in qualcosa che gira. Dall'altro, linguaggi più semplici e comodi, ma spesso troppo lenti nell'esecuzione. Sembrava di dover scegliere tra potenza e semplicità, tra velocità e comodità, senza poter avere tutto.
Voglio farti sentire quali fossero, concretamente, i dolori di chi costruiva grandi sistemi, perché sono il seme di tutto. Primo dolore: la compilazione lentissima. Con certi linguaggi, tradurre un grande programma richiedeva minuti, a volte moltissimi minuti, ogni volta che cambiavi qualcosa. Immagina di aspettare, fermo, ogni volta che vuoi provare una modifica: un'agonia che spezza il ritmo del lavoro. Secondo dolore: la complessità. I linguaggi si erano riempiti negli anni di funzionalità su funzionalità, diventando così ricchi e intricati che nessuno li conosceva davvero per intero, e il codice scritto da uno diventava difficile da capire per un altro. Terzo dolore: far collaborare tante persone su un codice enorme era faticoso, perché il linguaggio non aiutava a scrivere in modo chiaro e uniforme.
Ed ecco la risposta di Go a tutti questi dolori, che è tanto semplice quanto rivoluzionaria, e voglio che la afferri bene. Invece di cercare di avere sempre più funzionalità, Go ha scelto la strada opposta: essere deliberatamente semplice, piccolo, essenziale. Un linguaggio con poche funzionalità, poche parole chiave, poche cose da imparare. Facile da compilare in un lampo, così da non aspettare mai. Facile da leggere, così che il codice di uno sia chiaro per un altro. Pensato fin dall'inizio per grandi team, grandi sistemi, e per il software che vive in rete. Go ha fatto una scommessa controcorrente: che in un mondo di linguaggi sempre più complessi, la semplicità radicale fosse la scelta vincente.
Voglio soffermarmi su quanto sia controintuitiva questa scelta, perché è il cuore di tutta la stagione. Nella tecnologia, di solito, si tende ad aggiungere: più funzionalità, più opzioni, più potenza espressiva, come se di più fosse sempre meglio. Go ha detto no. Ha scelto consapevolmente di togliere, di rinunciare a funzionalità che altri linguaggi consideravano importanti, per restare piccolo e semplice. È come la differenza tra un coltellino svizzero con cinquanta lame, potente ma ingombrante e complicato, e un coltello semplice ed essenziale, che fa poche cose ma benissimo, ed è comodo da usare ogni giorno. Go ha scelto di essere il coltello semplice, scommettendo che, per il lavoro vero di tutti i giorni su grandi sistemi, la semplicità batte la ricchezza.
Voglio anche anticiparti il grande superpotere di Go, quello che più di ogni altra cosa ne ha decretato il successo. Go è nato per il software che vive in rete, quei sistemi che devono fare tante cose contemporaneamente, gestire migliaia di richieste insieme. E ha reso questa cosa, il fare tante cose insieme, di solito difficilissima, sorprendentemente facile e naturale. Questa capacità di gestire con semplicità la concorrenza è ciò che ha fatto di Go il linguaggio prediletto per i servizi in rete e l'infrastruttura moderna. Ma di questo parleremo più avanti.
Voglio darti fin d'ora la lente di tutta la stagione, che ti guiderà. Per capire Go, non devi tanto imparare le sue funzionalità, che sono poche, quanto capire la sua filosofia: la semplicità come scelta radicale e consapevole. Ogni cosa in Go, ciò che c'è e soprattutto ciò che manca, si spiega con questa filosofia: privilegiare la chiarezza sulla furbizia, la leggibilità sulla ricchezza, il lavoro di squadra sull'espressività individuale, la manutenibilità nel tempo sull'eleganza del momento. Tieni a mente questa lente, la semplicità come scelta radicale, e ogni scelta di Go, anche quelle che all'inizio sorprendono, avrà un senso.
Per oggi ci fermiamo qui. Go è nato dalla frustrazione di chi costruiva software enorme con team enormi, stanco di dover scegliere tra linguaggi veloci ma complicati e lenti da compilare, e linguaggi semplici ma lenti a girare. La sua risposta è stata controcorrente: essere deliberatamente semplice, piccolo ed essenziale, facile da compilare in un lampo e da leggere, pensato per grandi team e per il software in rete. Ha scelto di togliere invece di aggiungere, di essere il coltello semplice invece del coltellino con cinquanta lame, scommettendo che la semplicità radicale fosse la scelta vincente. E il suo superpotere, che vedremo, è aver reso facile il fare tante cose insieme. Nella prossima puntata approfondiamo la filosofia del linguaggio piccolo: meno è meglio. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.