Internet è pieno di grandi codici. Essi formano le fondamenta su cui sono costruite varie infrastrutture. Anche la stessa piattaforma su cui state leggendo questo articolo è costruita con una dedizione alla creazione di grandi codici. Mentre l’utente medio non ci fa caso, i buoni sviluppatori, d’altra parte, cercano sempre di rendere le loro applicazioni (e quindi, il loro codice) migliori.
Le fondamenta su cui viene scritto un grande codice si basano sull’abilità dello sviluppatore e sul suo linguaggio di scelta. Questo porta inevitabilmente a qualche scontro epico tra gli sviluppatori non solo sul livello di abilità, ma soprattutto sul loro linguaggio preferito. Questo è il risultato che è più probabile ottenere quando si mettono due grandi linguaggi di programmazione come Golang (Go) e Python fianco a fianco.
Tuttavia, facciamo un passo indietro e valutiamo entrambi i linguaggi dal punto di merito e funzionalità. Togliamo i pregiudizi e le preferenze personali. Poi livelliamo il campo di gioco, dal punto di vista delle competenze. Ora, tutto ciò che ci rimane sono due grandi scelte: Go contro Python. La domanda ora diventa: quale è giusto per te?
- Il racconto di Python
- Parlando di Golang(Go)
- Prestazioni di Golang vs Python
- Ricerca binaria
- Bubble sort
- Lettura da file
- Gestione delle richieste HTTP
- Python vs Golang web frameworks
- Gin
- Echo
- Go kit
- Società che usano Golang
- PayPal Taps Golang to Modernize and Scale
- American Express usa Golang per i pagamenti &ricompense
- Salesforce ha abbandonato Python per Golang in Einstein Analytics
- Stream – Perché siamo passati da Python a Go
- Pydio ha riscritto il filesharing enterprise-ready in Golang
- Repustate ha migrato l’API da Python (prima Django poi Falcon) a Go
- Che scegliere?
- Golang è veloce da imparare, sviluppare ed eseguire
Il racconto di Python
Chiedete ad alcuni sviluppatori e sentirete che non c’era niente prima di Python e non ci sarà niente dopo. Nel corso degli anni, è riuscito a guadagnare un seguito di culto perché è un ottimo linguaggio di programmazione. Internet è piena di meraviglie create con Python.
Python è vecchio, in termini di anni di programmazione. È stato concettualizzato per la prima volta nel 1991. E con l’età arrivano alcuni vantaggi. Ha un ampio seguito che si traduce nell’essere stabile e ben documentato. Nella maggior parte dei casi, troverete librerie per quasi tutto e campioni di codice per quasi tutto quello che vi viene in mente. Ciò significa per gli sviluppatori e le aziende che la scelta di usare Python porta con sé una ricchezza di esperienza e codifica che aspetta solo di essere utilizzata.
Ci sono molti progetti open-source che usano Python come base, quindi nella maggior parte dei casi, non si parte da zero. È ben integrato nelle applicazioni aziendali e può essere utilizzato in applicazioni di linguaggio macchina e AI. Ma ha i suoi lati negativi. Per esempio, non è ideale per compiti ad alta intensità di memoria, un po’ lento per le esecuzioni e inadatto allo sviluppo di applicazioni mobili.
Parlando di Golang(Go)
Sviluppato da Google nel 2009. Go era una soluzione a un problema. Il suo obiettivo era quello di creare un linguaggio che togliesse tutto il bagaglio e gli eccessi che si trovano in linguaggi come il C++. Questo gli conferisce un aumento delle prestazioni e della velocità che rende il lavoro un piacere. Inoltre, la maggior parte degli sviluppatori che prendono Go per la prima volta non saranno lasciati alla deriva perché gli elementi familiari e la facilità d’uso saranno una piacevole sorpresa.
Questo non significa che il linguaggio sia perfetto in tutti i casi. Mentre porta la velocità e l’eleganza ad un livello superiore, lascia comunque alcune cose da desiderare. Per esempio, non ha un’ampia libreria, né il supporto per l’ereditarietà. Inoltre, non c’è alcuna libreria GUI o supporto per la programmazione orientata agli oggetti. Ciò che ha a suo favore è un thread leggero (Goroutines), una libreria standard intelligente, una forte sicurezza integrata ed è facile da codificare con una sintassi minima.
Prestazioni di Golang vs Python
Possiamo parlare all’infinito dei pro e dei contro di Golang o Python, ma quando si arriva al dunque, ciò che tutti cerchiamo è come si comportano. Così abbiamo fatto alcuni test sul nostro impianto di prova con una CPU Intel® Core™ i7-9700K @ 3.60GHz × 8 core. E il codice usato è disponibile qui.
Ricerca binaria
Abbiamo creato liste di ints (da 1 a 100000) e poi usato la ricerca binaria per trovare sempre lo stesso numero 729. I risultati sono:
Language | Speed |
---|---|
Go | 20.8 ns/op |
Python | 2442.13377 ns/op |
Bubble sort
Di nuovo abbiamo generato una lista di interi (questa volta casuali, lunghi 10000 elementi) e li abbiamo ordinati usando algoritmi di bubble sort.
Language | Speed |
---|---|
Go | 90805247 ns/op (0,09s) |
Python | 6708160950.6 ns/op (6,7s) |
Lettura da file
Un semplice test di lettura del file di testo “lorem ipsum”.
Lingua | Velocità |
---|---|
Go | 5305 ns/op |
Python | 58359 ns/op |
Gestione delle richieste HTTP
Fare un server HTTP è davvero facile, ma abbiamo fatto uno sforzo e abbiamo fatto quello analogico in Python. Abbiamo controllato quanto tempo ci vuole per rispondere con un semplice messaggio “ciao mondo!”.
Lingua | Velocità |
---|---|
Go | 0.070 ms/RQ |
Python | 1.261 ms/RQ |
Python vs Golang web frameworks
Uno dei più grandi vantaggi di usare Python è la vasta collezione di librerie e frameworks che sono disponibili. Django e Flask sono due dei framework web Python più popolari che consentono di costruire un’applicazione web o API nel più breve tempo possibile.
Golang non ha un singolo framework dominante come Django per Python o Laravel per PHP e la comunità Go è in un certo senso avversa ai framework. I risultati del sondaggio Go 2018 mostrano che lo sviluppo web di Golang è il più prevalente al 65%, e ha aumentato la sua dominanza come area primaria in cui lavorano gli intervistati del sondaggio (dal 61% dello scorso anno): lo sviluppo web è stato il dominio più comune per lo sviluppo Go dal 2016.
Ecco i framework web Golang più popolari:
Gin
Gin è un framework web Golang che è noto per lo sviluppo di API ad alte prestazioni. È anche uno dei framework più semplici da imparare. Ci vogliono circa 10 minuti per abituarsi. Se avete bisogno di prestazioni e buona produttività, amerete Gin.
Caratteristiche
- Prestazioni più veloci: Radix tree based routing, piccola impronta di memoria
- Supporto middleware: Una richiesta HTTP in arrivo può essere gestita da una catena di middleware e l’azione finale
- Raggruppamento di rotte: Organizza meglio i tuoi percorsi
- Gestione degli errori: Gin fornisce un modo conveniente per raccogliere tutti gli errori verificatisi durante una richiesta HTTP
- Rendering integrato: Gin fornisce una API facile da usare per il rendering JSON, XML e HTML
- Extendibile: Creare un nuovo middleware è così facile, basta controllare i codici di esempio
Echo
Echo è un framework web Go ad alte prestazioni, estensibile e minimalista che fornisce router HTTP ottimizzati, API di gruppo, data binding per JSON e XML, supporto HTTP/2 e molto altro.
Mentre Gin è un po’ più popolare (36k stelle GitHub), molti sviluppatori scelgono Echo (16k stelle GitHub) perché ha una documentazione migliore ed è un framework leggermente più veloce.
Caratteristiche
- Router HTTP ottimizzato che dà priorità alle rotte in modo intelligente
- Api RESTful robuste e scalabili, facilmente organizzate in gruppi
- Quadro middleware estensibile, molti middleware integrati, il middleware può essere impostato a livello di root, gruppo o rotta
- Data binding per JSON, XML e form payload
- Funzioni utili per inviare una varietà di risposte HTTP, tra cui JSON, XML, HTML, File, Allegato, Inline, Stream o Blob
- Gestione centrale personalizzata degli errori HTTP e API facilmente estendibile
Go kit
Go kit è un toolkit di programmazione per costruire microservizi (o eleganti monoliti). Go Kit è un framework di opinioni. Risolve i problemi comuni nei sistemi distribuiti e nell’architettura delle applicazioni in modo da potersi concentrare sulla fornitura di valore aziendale.
Caratteristiche
- Opera in una SOA eterogenea – aspettati di interagire con servizi non Gokit services
- RPC come modello primario di messaggistica
- Serializzazione e trasporto collegabile – non solo JSON su HTTP
- Opera all’interno di infrastrutture esistenti – nessun mandato per strumenti o tecnologie specifiche
Società che usano Golang
Golang è ampiamente adottato dalle migliori società. Ci sono più di un milione di sviluppatori che usano Go in tutto il mondo – abbracciando banche e commercio, giochi e media, tecnologia e altri settori, in imprese diverse come PayPal, Capital One, IBM, Salesforce, Twitch, Uber, Dropbox, e naturalmente Google.
Qui ci sono alcuni esempi di casi di studio:
PayPal Taps Golang to Modernize and Scale
Il valore di Go nella produzione di codice pulito ed efficiente che si adatta facilmente all’implementazione del software ha reso il linguaggio un ottimo supporto per gli obiettivi di PayPal.
Vedi il caso di studio →
American Express usa Golang per i pagamenti &ricompense
Go fornisce ad American Express la velocità e la scalabilità di cui ha bisogno sia per le sue reti di pagamento che di ricompense.
Vedi il caso di studio →
Salesforce ha abbandonato Python per Golang in Einstein Analytics
Salesforce spiega perché il linguaggio di programmazione Go di Google è più adatto di Python e C per Einstein Analytics.
Vedi il caso di studio →
Stream – Perché siamo passati da Python a Go
Abbiamo un piccolo team di sviluppo a Stream che alimenta feed e chat per oltre 500 milioni di utenti finali. La combinazione di Go di un grande ecosistema, un facile onboarding per i nuovi sviluppatori, prestazioni veloci, un solido supporto per la concorrenza e un ambiente di programmazione produttivo lo rendono una grande scelta.
Vedi il caso di studio →
Pydio ha riscritto il filesharing enterprise-ready in Golang
Pydio, soluzione di cloud storage da prima di Dropbox, è diventata una piattaforma Sync-and-Share a tutti gli effetti e l’applicazione è rimasta fedele al suo stack tecnico iniziale: LAMP, come Linux/Apache/MySQL/PHP. Leggi un articolo sulle motivazioni della riscrittura interamente in Golang, la nuova architettura e le scelte dietro di essa.
Vedi il caso studio →
Repustate ha migrato l’API da Python (prima Django poi Falcon) a Go
La migrazione ha ridotto il numero di istanze EC2 richieste dell’85% e il tempo medio di risposta di una chiamata API da 100ms a 10ms. Grazie alla somiglianza tra Python e Go, sono stati in grado di riproporre rapidamente i nostri test unitari scritti a naso per adattarli alla struttura richiesta da Go con pochi semplici script sed.
Vedi il caso di studio →
Che scegliere?
Mentre Python è rimasto uno dei preferiti della comunità mantenendo il secondo posto nel primo trimestre del 2019 per il linguaggio di programmazione più veloce su GitHub in termini di richieste di pull (+17%), Golang non è così lontano ed è caldo sui suoi tacchi al #4 (+8%). La scelta tra Golang e Python diventa ancora più sfocata. Indipendentemente da ciò, ci sono alcune cose da considerare quando si sceglie quale potrebbe essere giusto per voi.
-
Scalabilità: Golang è stato creato con la scalabilità in mente. È dotato di concorrenza incorporata per gestire più compiti allo stesso tempo. Python usa la concorrenza ma non è integrata; implementa il parallelismo attraverso i thread. Questo significa che se avete intenzione di lavorare con grandi insiemi di dati, allora Golang sembra essere una scelta più adatta.
-
Performance: Python non è noto per essere amico della memoria o della CPU, ma con il suo enorme numero di librerie, Python funziona in modo efficiente per i compiti di sviluppo di base. Golang è dotato di caratteristiche integrate ed è più adatto per architetture software microservizi.
-
Applicazioni: Python brilla quando viene usato per scrivere codici per l’intelligenza artificiale, l’analisi dei dati, l’apprendimento profondo e lo sviluppo web. Mentre Golang è stato usato per la programmazione di sistema, è amato dagli sviluppatori che lo usano per applicazioni di cloud computing e cluster computing.
-
Community & Library: Come accennato in precedenza, l’età di Python gli dà alcuni vantaggi. Uno di questi è il numero di librerie che ha e la grande comunità che lo supporta. Golang, d’altra parte, è ancora un linguaggio in crescita e non ha il numero di librerie e il supporto della comunità che Python comanda. Eppure non dovremmo contare Go ancora. Il suo tasso di crescita e di adozione è incredibile e si sta espandendo ogni giorno.
-
Esecuzione: Se la velocità è il nome del gioco, allora Golang vince di un miglio.
Dopo aver preso in considerazione tutti questi elementi, il vostro caso d’uso sarà il fattore determinante in quale linguaggio adottare. Dato uno scenario in cui si sta creando un team di sviluppo per creare microservizi, Golang sarebbe la scelta più ragionevole in quanto è veloce, facile da codificare e può scalare eccellentemente bene. Python, d’altra parte, è più orientato verso AI, ML e analisi dei dati.
Quindi, in un testa a testa, Go risulterebbe superiore nella maggior parte dei casi ed è considerato una valida alternativa all’uso di Python. Gli sviluppatori devono scegliere un linguaggio di programmazione considerando la natura e la dimensione del progetto di sviluppo, nonché il set di abilità delle persone coinvolte.
La buona notizia, tuttavia, è che indipendentemente dalla scelta, entrambi i linguaggi sono in continua evoluzione. Mentre Golang potrebbe sembrare una scelta ovvia nella maggior parte dei casi, la comunità Python non sta semplicemente sedendosi e non facendo nulla. Entrambi i linguaggi si stanno espandendo e crescendo. Questo significa che vedremo più funzionalità e miglioramenti in futuro.