Java vs Google's Go: un'epica battaglia per la condivisione della mente degli sviluppatori

Go vs. Java non è una battaglia ben bilanciata tra pari. Uno è un mostruoso peso massimo che ha dominato l'industria per anni. L'altro è un nuovo arrivato grintoso e leggero che mostra molta giovinezza e promessa ma ha solo pochi pugni.

Java e Go affrontano anche nicchie diverse. Uno è rivolto direttamente alle app Web lato server, un'area in cui l'altro una volta era un attore importante. L'altro ha superato la vita nei rack ed è ora una scelta popolare per i dispositivi.

Ma non tutti si sono allontanati da Java sul lato server delle applicazioni web, il territorio che Go sta attaccando, erodendo la base di Java. E il passaggio non è un salto terribilmente grande, poiché i due sono simili sotto molti aspetti. Entrambi sono affettuosi omaggi al C, se non sotto, almeno in superficie dove molti sviluppatori trascorrono le loro vite alle prese con la sintassi. Sono entrambi semplici e imperativi con abbastanza somiglianze strutturali che non è difficile convertire il codice tra i due. (Il progetto TardisGo, ad esempio, è uno strumento che trasformerà Go in Java, C # o JavaScript.)

Considera questo un match di gabbia che vede due cugini da lati diversi delle tracce di programmazione in competizione per il tuo prossimo stack di applicazioni.

La lunga storia di Java porta effetti di rete che aiutano tutti

Java esiste dal 1995, attirando ogni anno più condivisione mentale. Tutto, dai minuscoli processori incorporati agli enormi chip per server, esegue Java in modo rapido ed efficiente grazie alla sua agile macchina virtuale just-in-time. Android è diventato un vantaggio per Java, in quanto piattaforma di gran lunga più popolare nel mondo mobile. Ecco perché Java rimane al primo posto nelle classifiche come l'indice Tiobe e PyPL. Questa ampia adozione significa che c'è un sacco di codice da riutilizzare e gran parte di esso è open source per semplificarti la vita. Sarai sulle spalle dei giganti quando inizierai a ricucire le miliardi di righe di codice Java disponibile gratuitamente.

La breve storia di Go lo rende immediatamente rilevante

Certo, è bello carpire codice Java gratuito dal web. Ma aspetta, è scritto per Java 1.3 e il tuo capo vuole che tu usi Java 1.8. Non preoccuparti, probabilmente puoi farlo funzionare di nuovo con un po 'di riscrittura. Spostiamo di nuovo quella scadenza ... e ancora. Il vecchio codice può sembrare un regalo, ma non è sempre una schiacciata e a volte è più un problema di quanto valga la pena.

La breve storia di Go, d'altra parte, significa che è scritta per gli standard web di oggi. Non c'è traccia dei tempi in cui le applet avrebbero dominato il mondo. Non ci sono idee dimenticate da tempo come Java Beans o J2EE in giro come seccature allettanti. È semplicemente nuovo e progettato per il modo in cui le persone stanno costruendo il Web oggi.

Java ti consente di toccare altre lingue

La JVM è la base per dozzine di linguaggi interessanti che dipendono da Java in fase di runtime. Ognuno può essere facilmente collegato al tuo codice, permettendoti di scrivere una parte in Kotlin, un'altra in Scala, e magari incollare il tutto insieme a Clojure. Se vuoi usare linguaggi come Python, JavaScript o Ruby, tutti e tre possono essere eseguiti direttamente in Java Land usando emulatori che sono spesso la prima scelta. Java ti dà la libertà di lasciare che ogni sub-stream e sottoprogetto scelga la lingua giusta per il lavoro mentre è ancora in esecuzione nella stessa JVM. Non è necessario utilizzarlo, ma l'opportunità è sempre lì.

Go promuove l'armonia

Sì, puoi creare un'applicazione super intelligente che mescola il meglio del nuovo e del trendy, scegliendo il linguaggio assolutamente migliore per ogni parte della tua meravigliosa opera magnum sulla JVM. Puoi persino mescolare vecchi successi come Rexx e Common Lisp per onorare il loro posto nella storia informatica degli anni '70. Buona fortuna a trovare qualcuno con gli stessi gusti e talenti che manterrà questa Torre di Babele. A parte il mescolare in poche librerie ben realizzate, non è sempre un buon piano emulare Rube Goldberg quando si progetta un buon codice. A volte è utile e necessario, ma ciò non significa che sia un buon piano. L'armonia e la coerenza semplificano la vita a tutti. Il mondo Go lo offre.

La JVM di Java è snella e potente

I file di classe Java vengono spesso misurati in centinaia di byte. I file JAR che li collegano insieme sono in genere solo pochi megabyte. Il codice Java stesso è piccolo perché la macchina virtuale detiene così tanto potere per la gestione e la sicurezza della memoria. Se prevedi di spostare molto codice, ha senso lasciare la funzionalità in uno strumento di runtime comune. Ci sono altri vantaggi nella centralizzazione. Se si verifica un problema di sicurezza nei livelli più bassi di Java, non è necessario ricompilare e ricollegare tutto il codice. Molti problemi vengono risolti aggiornando solo la JVM.

Go crea il pacchetto completo

La JVM è meravigliosa finché non scopri di avere installata la versione sbagliata. Se vuoi eseguire un JAR imballato con Java 1.8, ma hai solo la versione 1.6 della JVM, non andrai da nessuna parte finché non lo trovi. Il compilatore Go produce binari pronti per essere eseguiti. Sì, sono un po 'grandi, ma è perché Go aggiunge tutto il codice extra nel binario per te. È tutto in un semplice pacchetto.

Java rende i thread estremamente semplici

Far funzionare in modo indipendente varie parti di un programma non è un compito facile. Java ha conquistato i primi fan perché il suo modello per i thread era abbastanza semplice da capire mentre abbastanza potente da essere utile. La JVM fa un buon lavoro mappando i thread su diversi core sulla macchina. Non è facile da fare, ma è a causa della complessità del problema, non di Java. Gli utenti di Go possono amare le loro goroutine e canali, ma aggiungono un altro nodoso strato di complessità a un pasticcio già nodoso. Ti ritroverai a chiederti se si tratta di un thread verde o di un thread del sistema operativo. Quindi ti chiederai della complessità dei canali di sincronizzazione. Java è più semplice.

Go alleggerisce il carico del thread, in modo intelligente

I thread di Java e le primitive di sincronizzazione possono fare il lavoro, ma a un costo elevato. Creare e distruggere i thread è così laborioso e richiede molta memoria che i programmatori Java li riciclano sempre con pool di thread. Java ha perso trazione sul server perché ogni hit sul sito web necessita del proprio thread. Go ha oggetti più leggeri e flessibili chiamati goroutine che sono collegati a code di sincronizzazione intelligenti chiamate canali. Mentre la maggior parte dei server sembra arrivare a 1.000 o forse 10.000 thread Java, le persone segnalano regolarmente l'esecuzione di centinaia di migliaia di goroutine sullo stesso hardware.

Il modello di Go è più sofisticato e moderno perché più giovane. Il campo ha imparato molto sulla fornitura di sofisticati algoritmi multiprocessore e potresti anche trarne vantaggio.

Gli strumenti Java sono provati e veri

La maturità di Java significa che hai molte ottime opzioni per gli strumenti: Eclipse, IntelliJ e altro. Esistono strumenti di compilazione sofisticati come Ant e Maven ei principali repository sono ottimizzati per gestire il codice Java. Sono disponibili anche analisi di meta codice per tutto, dall'applicazione delle regole del codice alla ricerca di condizioni di gara. Potrebbero non funzionare con la tua versione del codice, ma spesso lo fanno. Questo è il motivo per cui Java è un tale juggernaut.

Gli strumenti Go sono moderni e nuovi

Go è stato creato per il moderno mondo multithread e gli strumenti di codice sono ottimizzati per le sfide odierne. C'è un rilevatore di condizioni di gara integrato nel debugger e nel runtime, quindi è molto più semplice affrontare i problemi fastidiosi. Il codice sorgente può essere verificato da golint e da un analizzatore statico chiamato "go vet" che ha una serie di euristiche per rilevare codice Go scritto male o anche male. Tutto questo e altro sono ottimizzati per mantenere il codice in esecuzione rapidamente in una macchina multicore.

Java ha i costrutti che desideri

Nel corso degli anni, la comunità Java ha desiderato molte funzionalità; qualche volta, sono stati concessi. Sono state aggiunte chiusure, generici, lambda e altro ancora. Se c'è una nuova idea nei linguaggi di programmazione, ci sono buone probabilità che qualcuno l'abbia introdotta nel mondo Java. Potrebbe non essere l'ideale, ma le opzioni ci sono. Puoi scrivere il codice brillante che il tuo cervello immagina grazie alla continua evoluzione di Java.

Go evita la confusione dei costrutti

La libertà di utilizzare dozzine di strutture di codifica intelligenti sembra ottima finché tutti i membri del team non iniziano a farlo. Quindi leggere il codice di qualcun altro diventa più difficile perché stanno usando la funzione intelligente A mentre il tuo cervello è abituato alla funzione intelligente B. La confusione combinatoria si accumula con ogni sviluppatore che inserisce il suo costrutto preferito nel mix.

Go, d'altra parte, è stato progettato per essere semplice. È stato costruito esplicitamente in modo che un buon programmatore potesse imparare Go in poche ore. Non ci sono dozzine di idee intelligenti che riempiono centinaia di pagine di documentazione. Ciò può essere limitante durante la scrittura del codice, ma è rilassante quando si legge il codice da altri membri del team. Tutti usano gli stessi idiomi perché tutti usano le stesse funzionalità di base. Non è solo un'esperienza di team building, come Outward Bound. Si tratta di efficienza.

Java è maturo

L'età porta saggezza, maturità e stabilità: tutte le ragioni per scegliere una base di codice ampia e ben progettata, profonda più di due decenni. I ragazzi di oggi continuano ad imparare Java all'inizio del loro viaggio con l'informatica e la piattaforma più dominante, Android, è costruita su di essa. A meno che non ci sia una buona ragione per cambiare, dovresti restare con il meglio.

Go è una lavagna pulita

A volte è meglio lasciarsi alle spalle il passato. Dopo tutto, il progresso spesso significa ricominciare da capo. Go ti offre l'opportunità di lavorare con uno strumento pulito, nitido e moderno ottimizzato per ciò che facciamo oggi. Ti permette di godere della semplicità e della libertà di lasciarti alle spalle il passato.

E semplicemente perché Google ha avviato Go per portare un po 'di semplicità nella codifica per le loro infinite server farm, ciò non significa che non possa diventare troppo grande. Alcuni lo stanno già utilizzando per eseguire droni, robot e altri dispositivi. Gli smartphone possono essere molto indietro?

Articoli Correlati

  • Tocca la potenza della lingua Go di Google
  • I migliori IDE ed editor di lingue Go
  • Recensione: i quattro grandi IDE Java a confronto
  • Angular vs. React: una battaglia epica per la condivisione della mente degli sviluppatori
  • Java vs Node.js: una battaglia epica per la condivisione della mente degli sviluppatori
  • PHP vs Node.js: una battaglia epica per la condivisione della mente degli sviluppatori
  • Python vs R: La battaglia per la condivisione della mente degli scienziati dei dati
  • 21 tendenze di programmazione calde e 21 fredde
  • 9 bugie che i programmatori si raccontano
  • Trucchi di carriera: cose da fare e da non fare professionali per gli sviluppatori