Node.js vs Java: En episk kamp för utvecklarens mindshare

I databehandlingen var 1995 en galen tid. Först Java dök upp, sedan på sina klackar kom JavaScript. Namnen fick dem att verka som sammansatta tvillingar som nyligen var fristående, men de kunde inte vara mer olika. En av dem är sammanställt och typiskt skriven; den andra tolkas och dynamiskt skrivs. Det är bara början på de tekniska skillnaderna mellan dessa två väldigt olika språk som sedan har skiftat till en slags kollisionskurs, tack vare Node.js.

Om du är tillräckligt gammal för att ha varit där då kanske du kommer ihåg Java tidiga, episka topp. Det lämnade laboratorierna och dess hype-mätare fästs. Alla såg det som en revolution som skulle sluta med inget mindre än en total övertagande av datorer. Den förutsägelsen slutade bara vara delvis korrekt. Idag dominerar Java Android-telefoner, företagsdatorer och vissa inbäddade världar som Blu-ray-skivor.

Trots all sin framgång skapade Java dock aldrig mycket dragkraft på skrivbordet eller i webbläsaren. Människor pratade om kraften i applikationer och Java-baserade verktyg, men gunk glitched alltid upp dessa kombinationer. Servrar blev Java's sweet spot.

Under tiden vad programmerare ursprungligen misstag som den dumma tvillingen har kommit till sin rätt. Visst, JavaScript taggade i några år som HTML och webben drog en Borg på världen. Men det förändrades med AJAX. Plötsligt hade den dumma tvillingen makt.

Sedan skapades Node.js och vred utvecklarens huvuden med sin hastighet. JavaScript var inte bara snabbare på servern än någon hade förväntat sig, men det var ofta snabbare än Java och andra alternativ. Dess stadiga kost med små, snabba, oändliga begäranden om data har sedan gjort Node.js vanligare, eftersom webbsidor har blivit mer dynamiska.

Även om det kan ha varit otänkbart för 20 år sedan, är kvasitvillingarna nu låsta i en kamp om kontroll över programmeringsvärlden. På ena sidan finns de djupa grunden för solid teknik och arkitektur. På andra sidan är enkelhet och allestädes närvarande. Kommer den gammaldags kompilerdrivna världen av Java att hålla sin mark, eller kommer hastigheten och flexibiliteten hos Node.js att hjälpa JavaScript att fortsätta att sluka allt i dess väg?

Där Java vinner: Bunnsolid grund

Jag kan höra utvecklarna skratta. Vissa kan till och med dö av hjärtsvikt. Ja, Java har problem och buggar, men relativt sett är det Gibraltar Rock. Samma tro på Node.js har många års ledighet. Det kan faktiskt dröja decennier innan JavaScript-besättningen skriver nästan lika många regressionstester som Sun / Oracle utvecklade för att testa Java Virtual Machine. När du startar upp en JVM får du 20 års erfarenhet av en solid kurator som är fast besluten att dominera företagsservern. 

JavaScript-världen hämtar snabbt. När mycket av hela webben beror på JavaScript-exekveringsmotorn går en bazillion-utvecklartimmar till att polera alla kanter. Men all innovation har en nackdel eftersom de nya funktionerna kan växa snabbare än utvecklarbasen kan absorbera dem. Old school-utvecklare förväxlas ofta av kod fylld med de nyare förbättringarna av ECMAScript-syntax - och samma nya kod kommer tyst att krascha några äldre webbläsare. Det oändliga utbudet av innovativa förprocessorer som CoffeeScript och JSX kan vara bra för utvecklare som vill ha dessa funktioner, men de gör det svårare för resten av oss att öppna en slumpmässig fil och förstå den omedelbart.

Java har sin andel av nya funktioner och alternativ, men för det mesta är det en stabil plattform. Det gör livet mycket lättare för utvecklare som bygger något för att hålla.

Där Node.js vinner: Ubiquity

Tack vare Node.js hittar JavaScript ett hem på servern och i webbläsaren. Koden du skriver för en kommer mer än troligtvis att köras på samma sätt på båda. Ingenting är garanterat i livet, men det är så nära som det kommer i datorbranschen. Det är mycket lättare att hålla fast med JavaScript för båda sidor av klienten / serverdelningen än att skriva något en gång i Java och igen i JavaScript, vilket du sannolikt skulle behöva göra om du bestämde dig för att flytta affärslogik som du skrev i Java för server till webbläsaren. Eller kanske chefen kommer att insistera på att den logik du byggde för webbläsaren flyttas till servern. I båda riktningarna gör Node.js och JavaScript det mycket lättare att migrera kod.

Nodes ledning i denna värld verkar bara växa ut. De mest sofistikerade webbramarna, som React, bestämmer i sista sekunden om koden ska köras på servern eller klienten. En dag körs den på klienten och en annan dag körs den på servern. Någon smart logik kommer att fatta beslut i farten baserat på last eller reserv RAM eller något annat. Vissa ramar skickar JavaScript till databasen som en fråga där den körs. Din kod kan köras var som helst och det blir svårare att följa med eftersom det inte skickar ett vykort hem. Var bara glad för att du inte behöver tänka på detaljerna.

Där Java vinner: Bättre IDE

Java-utvecklare har Eclipse, NetBeans eller IntelliJ, tre förstklassiga verktyg som är väl integrerade med avlusare, dekompilatorer och servrar. Var och en har år av utveckling, dedikerade användare och solida ekosystem fyllda med plug-ins.

Under tiden skriver de flesta Node.js-utvecklarna ord i kommandoraden och kodar in i deras favorittextredigerare. Ja, några av de bästa textredigerarna som Atom har omfattande samlingar av plugin-program som gör nästan vad som helst, men även då känns det som om Node.js är mer gammal än Eclipse. Snart ersätter vi musen med en Atari joystick.

Vissa utvecklare använder Eclipse eller Visual Studio, som båda stöder Node.js. Naturligtvis betyder intresset för Node.js att nya verktyg kommer fram, varav några, liksom IBMs Node-RED, erbjuder spännande tillvägagångssätt, men de är fortfarande långt ifrån så kompletta eller lika dominerande som Eclipse eller IntelliJ.

Det konstiga är att utvecklarna inte verkar använda dessa verktyg. Kommandoraden skulle försvinna för 35 år sedan med Mac-ankomsten, men ingen berättade för Node.js-utvecklarna. Alternativen finns. WebStorm, till exempel, är ett gediget kommersiellt verktyg från JetBrains som innehåller många kommandoradsverktyg.

Naturligtvis, om du letar efter en IDE som redigerar och jonglerar kod, är de nya verktygen som stöder Node.js tillräckligt bra. Men om du ber din IDE att låta dig redigera medan du arbetar på den löpande källkoden som en hjärtkirurg skär upp en bröstkorg, ja, Java-verktyg är mycket kraftfullare. Det finns allt och allt är lokalt.

Där Node.js vinner: databasfrågor

Frågor för några av de nyare databaserna, som CouchDB och MongoDB, skrivs i JavaScript. Att blanda Node.js och ett samtal till databasen kräver ingen växling, än mindre något behov av att komma ihåg syntaxskillnader. 

Under tiden använder många Java-utvecklare SQL. Även när de använder Java DB - tidigare Derby, en databas skriven i Java för Java-utvecklare - skriver de sina frågor i SQL. Du skulle tro att de helt enkelt skulle kalla Java-metoder, men du hade fel. Du måste skriva din databaskod i SQL och sedan låta Derby analysera SQL. SQL är ett trevligt språk, men det skiljer sig helt från Java, och många utvecklingsteam behöver olika personer för att skriva SQL och Java.

För att göra saken värre använder många Java-kodare detaljerade bibliotek och scheman för att konvertera data från SQL-frågan till Java-objekt bara så att de kan omarbeta dem till mallar. Det är en galen process och i slutändan ganska slöseri.

Var Java vinner: Typer 

Många av de inledande programmeringskurserna fortsätter att använda Java eftersom många seriösa programmerare tenderar att gilla statiskt skriven kod både för enkelhet och säkerhet. Koden känns bara mer rigorös efter att kompilatorn fångat de uppenbara buggarna.

JavaScript kommer dock att komma ikapp och vissa utvecklare byter till TypeScript, en statiskt skriven superset av JavaScript som tillämpar all typkontrollmagi innan de spottar ut något som körs i webbläsarens JavaScript-stack. Om du älskar typer kan det vara tillräckligt för att du ska kunna använda JavaScript. Eller så kan du bara känna igen imitationen som den uppriktigaste formen av smicker och hålla fast vid Java, som omfattade statisk typning från början.

Där Node.js vinner: Syntaktisk flexibilitet

JavaScript brukade vara ett enkelt språk för att poppa upp oönskade varningsrutor och dubbelkontrollera formulärinmatning. Sedan skapade utvecklargemenskapen många olika versioner av språket som kunde transpileras till något för webbläsaren. Det finns CoffeeScript-publiken som erbjuder en handfull olika syntaxer utformade för att tillfredsställa en smak för renare skiljetecken. Det finns React / Vue-publiken som blandar ihop HTML och JavaScript bara för att det är renare. Det finns TypeScript för typälskare och LiveScript för funktionella språkanvändare.

Du hittar en enorm mängd kreativitet i Java-världen också, men av någon anledning uttrycks det inte med många förprocessorer. Det finns ett antal språk som Kotlin, Scala och Clojure som förvandlas till byte-kod för JVM, men på något sätt känner de sig annorlunda för att skilja sig från varandra som separata språk. Alla förprocessorerna gör livet roligare för JavaScript-programmerare som älskar olika sätt att formulera eller punktera sin kod.

Där Java vinner: Enkel byggprocess 

Komplicerade byggverktyg som Ant och Maven har revolutionerat Java-programmeringen. Men det finns bara en fråga. Du skriver specifikationen i XML, ett dataformat som inte var utformat för att stödja programmeringslogik. Visst, det är relativt enkelt att uttrycka förgrening med kapslade taggar, men det är något irriterande med att växla växlar från Java till XML bara för att bygga något. Med JavaScript finns det inga växlar. 

Node.js brukade vara enklare att bygga. Du skulle bara redigera koden och sedan trycka på "kör". Det var då. Eftersom Node-utvecklarna har "förbättrat" ​​processen har de lagt till förprocessorer som tar din favoritunderdialect av JavaScript och gör den till något körbar. Då måste Node-pakethanteraren hitta rätt bibliotek. För det mesta fungerar det bara, men ibland fungerar det inte och då spenderar du tid på att leta efter rätt version av någon artefakt som du bygger dig själv i ett separat steg. Och om du gör något misstag till artefaktförvaret, ja, det versionnumret skjuts och du måste vrida vägmätarhjulen igen.

Java har också en komplex byggprocess som är ganska lik Node.js-metoden, men det känns inte som att den har blivit mer komplex. På något sätt verkar Maven och Ant som en del av Java-stiftelsen nu. Många av de grova kanterna är långt borta och byggnaderna fungerar bara oftare. Om det fanns något absolut mått på byggproblem kan de två språken vara lika, men den snabba explosionen av JavaScript-komplexitet innebär att Java vinner.

Relaterad video: Node.js tips och tricks

I den här förklaringsvideoen lär du dig flera tekniker som kan förbättra din utvecklingsupplevelse för nod.

Där Node.js vinner: JSON

När databaser spottar ut svar går Java ut på detaljerade längder för att göra resultaten till Java-objekt. Utvecklare kommer att argumentera i timmar om POJO-mappningar, viloläge och andra verktyg. Att konfigurera dem kan ta timmar eller till och med dagar. Så småningom får Java-koden Java-objekt efter hela konverteringen. Och när det gäller konfiguration håller Java-världen fortfarande fast vid XML och till och med erbjuder två stora parsers för att ge utvecklare fler anledningar att oroa sig.

Idag returnerar många webbtjänster och databaser data i JSON, en naturlig del av JavaScript. JSON är nu så vanligt och användbart att många Java-utvecklare använder formatet och ett antal bra JSON-parsers finns också som Java-bibliotek. Men JSON är en del av grunden för JavaScript. Du behöver inte bibliotek. Allt är där och redo att gå.

Där Java vinner: Fjärrfelsökning

Java har otroliga verktyg för övervakning av kluster av maskiner. Det finns djupa krokar i JVM och utarbetade profileringsverktyg för att identifiera flaskhalsar och fel. Java-företagsstacken driver några av de mest sofistikerade servrarna på planeten, och de företag som använder dessa servrar har krävt det allra bästa inom telemetri. Alla dessa övervaknings- och felsökningsverktyg är ganska mogna och redo att distribueras.

Där Node.js vinner: Desktop

Det kan finnas några Java-applets som körs där ute, och jag har fortfarande några Java JAR-filer som jag kan klicka på för att köra, men för det mesta är skrivbordsvärlden till stor del Java-fri. JavaScript, å andra sidan, fortsätter att fånga mer och mer av åtgärden när webbläsaren äter upp de flesta rollerna för vårt skrivbord. När Microsoft omskrivit Office för att arbeta i webbläsaren gjutes formen. Om du fortfarande undrar finns det intressanta alternativ som Electron som tar din webbkod och gör den till en fristående skrivbordsapp.

Där Java vinner: Handhelds

Android-appar är ofta skrivna i Java och 90 procent av de nya telefonerna kör någon version av Android. Många använder inte ens stationära datorer längre eftersom telefonerna är tillräckligt bra för allt.

Naturligtvis finns det lite förvirring. Många utvecklare skriver Node.js webbappar som riktar sig till mobilwebbläsarna på både iPhone och Androids. Om detta görs bra är prestanda ofta tillräckligt bra.