Perché programmare con GO?
Perché imparare a programmare con Go
Scegliere un linguaggio di programmazione da imparare non è mai semplice.
A volte si può scegliere un linguaggio perché è trendy, a volte perché qualcuno ce lo consiglia. Spesso si è attirati dalla curiosità di scoprire quali vantaggi abbia rispetto ai suoi predecessori.
Dando un'occhiata al stackoverflow survey 2019, scopriamo che Go è uno tra i linguaggi di programmazione più amati e richiesti a livello globale.
Come abbiamo già detto spiegando che cos’è Go, questo linguaggio è stato sviluppato per rendere la scrittura, la documentazione e la manutenzione del codice più efficienti e più semplici.
Semplificare la vita a sviluppatori e ingegneri significa prioritizzare alcuni aspetti del linguaggio rispetto ad altri e concentrarsi su una visione d'insieme di tutto il processo per non perdere di vista l’obiettivo: scrivere un software ben strutturato, documentato e di facile manutenzione.
Le priorità di Go
Durante lo sviluppo del linguaggio ci si è quindi concentrati sul risolvere alcune problematiche classiche dell’ingegneria del software, che necessitano una visione di tutto il processo di sviluppo e generalmente non vengono affrontate durante la definizione delle proprietà di un linguaggio:
-
lentezza della compilazione
-
“personalizzazione” del codice
-
dipendenze incontrollate
-
difficoltà di lettura e comprensione del codice
-
documentazione inesistente o non automaticamente generabile
-
costo degli aggiornamenti
-
difficoltà nello scrivere strumenti per gestire il linguaggio
Durante una presentazione sulle scelte sintattiche e semantiche del linguaggio, Rob Pike (uno dei creatori del linguaggio) descrive con un esempio come si è deciso di utilizzare l’indentazione con parentesi graffe rispetto ad altri tipi:
“Come esempio consideriamo la rappresentazione della struttura di un programma. Qualcuno potrebbe preferire l’uso di indentazione, nello stile di Python o Haskell, al posto dei blocchi di codice delimitati da parentesi graffe (come nel C). Nonostante le preferenze di ciascuno, l’esperienza maturata osservando e analizzando le build di codice e i test falliti ci ha portato a concludere che molti problemi sono causati da dettagli come l’invisibile variazione di indentazione di un pezzo di codice. La nostra posizione a questo proposito è che anche se usare gli spazi per l’indentazione è una soluzione carina per programmi di piccole dimensioni, la scelta non scala a sufficienza e, più grande e più eterogeneo è il software, maggiori problemi può causare. È meglio rinunciare alla comodità per sicurezza e affidabilità, quindi Go ha blocchi limitati da parentesi graffe.”
Con questa logica, il risultato è stato un linguaggio con queste caratteristiche:
-
veloce da compilare (molto veloce, rispetto ad altri linguaggi come il C)
-
codice standard (regole ben definite e tool per la corretta manutenzione)
-
dipendenze controllate (utilizzando il sistema di dipendenze di Go)
-
codice facile da leggere e comprendere (grazie alla standardizzazione e le regole promosse in fase di compilazione)
-
documentazione autogenerata dal codice (attraverso un uso intelligente dei commenti)
-
aggiornamenti più agevoli (grazie anche al codice standardizzato)
-
strumenti avanzati per un'analisi del codice e delle sue componenti (gli strumenti del go tooling)
Alcuni punti di forza di Go
-
Go include un framework completo per il testing e la profilazione di un programma.
-
La documentazione è generata automaticamente partendo dai commenti all’interno del codice, rendendo standard anche questa.
-
Go è fortemente tipizzato, garantendo la sicurezza rispetto ai tipi (e al loro utilizzo).
-
Go ha un codice molto leggibile, grazie anche ad un vocabolario molto ristretto di 25 parole chiave.
-
I programmi sono suddivisi in packages che offrono una chiara separazione del codice.
-
Go implementa la concorrenza di default. Grazie a goroutines e channels, con una singola parola chiave (go) si può rendere una funzione concorrente.
-
Le performance di Go sono estremamente concorrenziali: il codice compilato offre prestazioni molto simili ai linguaggi più performanti come il C.
-
L’uso di un garbage collector molto efficiente permette di non doversi preoccupare della gestione della memoria e, al prezzo di pochi istanti, si evitano problematiche legate alla allocazione e liberazione della memoria.
-
La standard library di Go include numerosissimi packages in grado di risolvere numerosissimi problemi, senza dover usare dipendenze esterne.
-
Go compila nativamente su numerosissime piattaforme, tra cui: Darwin (MacOS), Linux e Windows, permettendo di creare strumenti multipiattaforma in maniera semplice.
-
La community Go è ampia e variegata. Oltre a numerosi eventi in Europa e nel Mondo, anche a Milano abbiamo l’onore di ospitare la community del Meetup Golang Milano che si ritrova ogni due mesi per discutere e approfondire tematiche legate al linguaggio.