Node.js contro Java: una battaglia epica per lo sviluppatore mindshare

Nella storia dell'informatica, il 1995 è stato un periodo pazzo. Prima è apparso Java, poi subito dopo è arrivato JavaScript. I nomi li facevano sembrare gemelli siamesi appena staccati, ma non potrebbero essere più diversi. Uno di questi è compilato e digitato staticamente; l'altro interpretato e digitato dinamicamente. Questo è solo l'inizio delle differenze tecniche tra questi due linguaggi selvaggiamente distinti che da allora sono passati a una sorta di rotta di collisione, grazie a Node.js.

Se sei abbastanza grande per essere stato in giro allora, potresti ricordare il primo, epico picco di Java. Ha lasciato i laboratori e il suo misuratore di pubblicità è stato bloccato. Tutti l'hanno vista come una rivoluzione che si sarebbe fermata a niente di meno che a una totale acquisizione del computer. Quella previsione finì per essere corretta solo parzialmente. Oggi, Java domina i telefoni Android, i computer aziendali e alcuni mondi incorporati come i dischi Blu-ray.

Nonostante tutto il suo successo, tuttavia, Java non ha mai avuto molta trazione sul desktop o nel browser. La gente pubblicizzava la potenza delle applet e degli strumenti basati su Java, ma gunk ha sempre alterato queste combinazioni. I server sono diventati il ​​punto debole di Java.

Nel frattempo, quello che i programmatori inizialmente avevano scambiato per il gemello stupido è diventato di per sé. Certo, JavaScript è stato etichettato per alcuni anni come HTML e il web hanno portato un Borg nel mondo. Ma le cose sono cambiate con AJAX. All'improvviso, lo stupido gemello ebbe il potere.

Quindi è stato generato Node.js, che ha fatto girare la testa agli sviluppatori con la sua velocità. Non solo JavaScript era più veloce sul server di quanto chiunque si aspettasse, ma era spesso più veloce di Java e di altre opzioni. La sua dieta costante di piccole, rapide e infinite richieste di dati ha reso Node.js più comune, poiché le pagine web sono diventate più dinamiche.

Anche se 20 anni fa poteva essere impensabile, i quasi gemelli sono ora impegnati in una battaglia per il controllo del mondo della programmazione. Da un lato ci sono le fondamenta profonde di una solida ingegneria e architettura. Dall'altro lato ci sono semplicità e ubiquità. Il mondo Java basato sui compilatori della vecchia scuola terrà la sua posizione o la velocità e la flessibilità di Node.js aiuteranno JavaScript a continuare a divorare tutto sul suo cammino?

Dove vince Java: fondamenta solide

Posso sentire gli sviluppatori ridere. Alcuni potrebbero persino morire di insufficienza cardiaca. Sì, Java ha glitch e bug, ma relativamente parlando, è la Rocca di Gibilterra. La stessa fiducia in Node.js è lontana da molti anni. In effetti, potrebbero passare decenni prima che il team JavaScript scriva quasi tanti test di regressione quanti Sun / Oracle hanno sviluppato per testare la Java Virtual Machine. Quando avvii una JVM, ottieni 20 anni di esperienza da un solido curatore determinato a dominare il server aziendale. 

Il mondo JavaScript sta recuperando rapidamente. Quando gran parte dell'intero Web dipende dal motore di esecuzione JavaScript, un miliardo di ore per sviluppatori si dedicano a lucidare tutti i bordi. Ma tutta l'innovazione ha uno svantaggio perché le nuove funzionalità potrebbero proliferare più velocemente di quanto la base di sviluppatori possa assorbirle. Gli sviluppatori della vecchia scuola sono spesso confusi dal codice riempito con i più recenti miglioramenti della sintassi ECMAScript e questo stesso nuovo codice manderà in crash alcuni browser meno recenti. La scorta infinita di preprocessori innovativi come CoffeeScript e JSX può essere ottima per gli sviluppatori che desiderano queste funzionalità, ma rendono più difficile per il resto di noi aprire un file casuale e capirlo immediatamente.

Java ha la sua quota di nuove funzionalità e opzioni, ma per la maggior parte è una piattaforma stabile. Ciò rende la vita molto più semplice per gli sviluppatori che stanno costruendo qualcosa per durare.

Dove vince Node.js: Ubiquity

Grazie a Node.js, JavaScript trova una casa sul server e nel browser. Il codice che scrivi per uno funzionerà molto probabilmente allo stesso modo su entrambi. Niente è garantito nella vita, ma questo è il più vicino possibile al business dei computer. È molto più facile attenersi a JavaScript per entrambi i lati della divisione client / server piuttosto che scrivere qualcosa una volta in Java e di nuovo in JavaScript, cosa che probabilmente dovresti fare se decidessi di spostare la logica di business che hai scritto in Java per il server al browser. O forse il capo insisterà affinché la logica che hai costruito per il browser venga spostata sul server. In entrambe le direzioni, Node.js e JavaScript rendono molto più semplice la migrazione del codice.

Il vantaggio di Node in questo mondo sembra solo espandersi. I framework web più sofisticati, come React, decideranno all'ultimo secondo se eseguire il codice sul server o sul client. Un giorno verrà eseguito sul client e un altro giorno verrà eseguito sul server. Una logica intelligente prenderà la decisione al volo in base al carico o alla RAM di riserva o qualcos'altro. Alcuni framework invieranno JavaScript al database come query in cui viene eseguito. Il tuo codice potrebbe essere eseguito ovunque ed è sempre più difficile mantenerlo perché non invia una cartolina a casa. Sii felice perché non devi pensare ai dettagli.

Dove vince Java: IDE migliori

Gli sviluppatori Java hanno Eclipse, NetBeans o IntelliJ, tre strumenti di prim'ordine ben integrati con debugger, decompilatori e server. Ognuno ha anni di sviluppo, utenti dedicati e ecosistemi solidi pieni di plug-in.

Nel frattempo, la maggior parte degli sviluppatori di Node.js digita le parole nella riga di comando e il codice nel proprio editor di testo preferito. Sì, alcuni dei migliori editor di testo come Atom hanno raccolte elaborate di plug-in che fanno quasi tutto, ma anche allora sembra che Node.js sia più vecchia scuola di Eclipse. Presto sostituiremo il nostro mouse con un joystick Atari.

Alcuni sviluppatori usano Eclipse o Visual Studio, entrambi supportano Node.js. Naturalmente, l'aumento dell'interesse per Node.js significa che stanno arrivando nuovi strumenti, alcuni dei quali, come Node-RED di IBM, offrono approcci intriganti, ma sono ancora molto lontani dall'essere completi o dominanti come Eclipse o IntelliJ.

La cosa strana è che gli sviluppatori non sembrano utilizzare questi strumenti. La riga di comando avrebbe dovuto scomparire 35 anni fa con l'arrivo del Mac, ma nessuno lo ha detto agli sviluppatori di Node.js. Le opzioni ci sono. WebStorm, ad esempio, è un solido strumento commerciale di JetBrains che incorpora molti strumenti di compilazione da riga di comando.

Ovviamente, se stai cercando un IDE che modifichi e manipoli il codice, i nuovi strumenti che supportano Node.js sono abbastanza buoni. Ma se chiedi al tuo IDE di permetterti di modificare mentre operi sul codice sorgente in esecuzione come un cardiochirurgo apre una cassa, beh, gli strumenti Java sono molto più potenti. È tutto lì, ed è tutto locale.

Dove vince Node.js: query di database

Le query per alcuni dei database più recenti, come CouchDB e MongoDB, sono scritte in JavaScript. Mescolare Node.js e una chiamata al database non richiede alcun cambio di marcia, per non parlare della necessità di ricordare le differenze di sintassi. 

Nel frattempo, molti sviluppatori Java utilizzano SQL. Anche quando utilizzano il database Java, in precedenza Derby, un database scritto in Java per gli sviluppatori Java, scrivono le query in SQL. Penseresti che chiamerebbero semplicemente metodi Java, ma ti sbaglieresti. Devi scrivere il codice del database in SQL, quindi lasciare che Derby analizzi l'SQL. SQL è un bel linguaggio, ma è completamente diverso da Java e molti team di sviluppo hanno bisogno di persone diverse per scrivere SQL e Java.

A peggiorare le cose, molti programmatori Java utilizzano librerie e schemi elaborati per convertire i dati dalla query SQL in oggetti Java solo in modo da poterli riformulare in modelli. È un processo folle e alla fine piuttosto dispendioso.

Dove vince Java: i tipi 

Molti dei corsi introduttivi alla programmazione continuano a utilizzare Java perché molti programmatori seri tendono ad apprezzare il codice digitato staticamente sia per la semplicità che per la sicurezza. Il codice sembra più rigoroso dopo che il compilatore rileva i bug evidenti.

JavaScript, tuttavia, sta recuperando terreno e alcuni sviluppatori stanno passando a TypeScript, un superset di JavaScript tipizzato staticamente che applica tutta la magia del controllo del tipo prima di emettere qualcosa che viene eseguito nello stack JavaScript del browser. Se ami i tipi, questo potrebbe essere sufficiente per abbracciare JavaScript. Oppure potresti semplicemente riconoscere l'imitazione come la forma più sincera di adulazione e restare fedele a Java, che ha abbracciato la digitazione statica sin dall'inizio.

Dove vince Node.js: flessibilità sintattica

JavaScript era un linguaggio semplice per far apparire caselle di avviso indesiderate e ricontrollare l'input del modulo. Quindi la comunità degli sviluppatori ha creato molte versioni diverse del linguaggio che potrebbero essere trasferite in qualcosa per il browser. C'è la folla di CoffeeScript che offre una manciata di sintassi diverse progettate per soddisfare il gusto per la punteggiatura più pulita. C'è la folla React / Vue che mescola HTML e JavaScript solo perché è più pulito. C'è TypeScript per gli amanti dei tipi e LiveScript per i devoti del linguaggio funzionale.

Troverai un'enorme quantità di creatività anche nel mondo Java, ma per qualche motivo non è espressa con molti pre-processori. Ci sono un certo numero di linguaggi come Kotlin, Scala e Clojure che vengono trasformati in byte code per la JVM, ma in qualche modo si sentono abbastanza diversi da distinguersi come lingue separate. Tutti i preprocessori rendono la vita più divertente per i programmatori JavaScript che amano modi diversi di formulare o punteggiare il proprio codice.

Dove vince Java: processo di compilazione semplice 

Strumenti di compilazione complicati come Ant e Maven hanno rivoluzionato la programmazione Java. Ma c'è solo un problema. Scrivi la specifica in XML, un formato di dati che non è stato progettato per supportare la logica di programmazione. Certo, è relativamente facile esprimere branching con tag annidati, ma c'è qualcosa di fastidioso nel cambiare marcia da Java a XML semplicemente per creare qualcosa. Con JavaScript, non è possibile cambiare marcia. 

Node.js aveva la build più semplice. Dovresti semplicemente modificare il codice e poi premere "esegui". Questo è stato allora. Poiché gli sviluppatori di Node hanno "migliorato" il processo, hanno aggiunto dei preprocessori che prendono il tuo sottodialetto preferito di JavaScript e lo trasformano in qualcosa di eseguibile. Quindi il gestore di pacchetti Node deve trovare la libreria giusta. La maggior parte delle volte funziona, ma a volte no e poi passi del tempo a cercare il numero di versione corretto di alcuni artefatti che stai costruendo da solo in un passaggio separato. E se commetti qualche errore nel repository di artefatti, beh, quel numero di versione viene sparato e devi girare di nuovo le ruote del contachilometri.

Java ha anche un processo di compilazione complesso che è abbastanza simile al metodo Node.js, ma non sembra che sia diventato più complesso. In qualche modo Maven e Ant sembrano ormai parte della fondazione Java. Molti dei bordi grezzi sono spariti da tempo e le build funzionano più spesso. Se ci fosse una misura assoluta del problema di compilazione, i due linguaggi potrebbero essere simili, ma la rapida esplosione della complessità di JavaScript significa che Java vince.

Video correlato: suggerimenti e trucchi per Node.js.

In questo video esplicativo, impara diverse tecniche che possono migliorare la tua esperienza di sviluppo di Node.

Dove vince Node.js: JSON

Quando i database emettono risposte, Java fa di tutto per trasformare i risultati in oggetti Java. Gli sviluppatori discuteranno per ore sulle mappature POJO, Hibernate e altri strumenti. La loro configurazione può richiedere ore o addirittura giorni. Alla fine, il codice Java ottiene gli oggetti Java dopo tutta la conversione. E quando si tratta di configurazione, il mondo Java si aggrappa ancora a XML e offre anche due principali parser per dare agli sviluppatori più motivi per preoccuparsi.

Oggi, molti servizi Web e database restituiscono dati in JSON, una parte naturale di JavaScript. JSON è ora così comune e utile che molti sviluppatori Java utilizzano il formato e sono disponibili anche numerosi buoni parser JSON come librerie Java. Ma JSON fa parte delle fondamenta di JavaScript. Non hai bisogno di biblioteche. È tutto lì e pronto per partire.

Dove vince Java: debug remoto

Java vanta strumenti incredibili per il monitoraggio di cluster di macchine. Esistono agganci profondi nella JVM e strumenti di profilazione elaborati per aiutare a identificare i colli di bottiglia e gli errori. Lo stack aziendale Java esegue alcuni dei server più sofisticati del pianeta e le aziende che utilizzano questi server hanno richiesto il meglio in fatto di telemetria. Tutti questi strumenti di monitoraggio e debug sono abbastanza maturi e pronti per la distribuzione.

Dove vince Node.js: Desktop

Potrebbero esserci alcune applet Java in esecuzione là fuori e mantengo ancora alcuni file JAR Java su cui posso fare clic per eseguire, ma per la maggior parte il mondo desktop è in gran parte privo di Java. JavaScript, d'altra parte, continua a catturare sempre più azioni poiché il browser occupa la maggior parte dei ruoli per il nostro desktop. Quando Microsoft ha riscritto Office per funzionare nel browser, il dado era tratto. Se ti stai ancora chiedendo, ci sono opzioni interessanti come Electron che prendono il tuo codice web e lo trasformano in un'app desktop autonoma.

Dove vince Java: palmari

Le app Android sono spesso scritte in Java e il 90 percento dei nuovi telefoni esegue una versione di Android. Molte persone non usano più i desktop perché i telefoni sono abbastanza buoni per tutto.

Ovviamente c'è un po 'di confusione. Molti sviluppatori stanno scrivendo app web Node.js che prendono di mira i browser mobili su iPhone e Android. Se questo è fatto bene, le prestazioni sono spesso abbastanza buone.