Node.js vs. Java: Epska bitka za razvijanje uma programera

U povijesti računarstva 1995. bilo je ludo vrijeme. Prvo se pojavila Java, a zatim joj je za petama došao JavaScript. Imena su im se činila poput spojenih blizanaca koji su se tek odvojili, ali ne mogu biti drukčiji. Jedan od njih sastavljen je i statički upisan; druga interpretirana i dinamički tipkana. To je samo početak tehničkih razlika između ova dva neobično različita jezika koja su se od tada preusmjerila na svojevrsni tijek sudara, zahvaljujući Node.js.

Ako ste dovoljno stari da ste tada već bili tu, možda se sjećate ranog, epskog vrhunca Jave. Napustio je laboratorije, a njegov hype metar prikvačio. Svi su to doživljavali kao revoluciju koja se neće zaustaviti ni na čemu manje nego na potpunom preuzimanju računalstva. To predviđanje na kraju je bilo samo djelomično točno. Danas Java dominira Android telefonima, poslovnim računarstvom i nekim ugrađenim svjetovima poput Blu-ray diskova.

Unatoč svom uspjehu, Java nikada nije uspostavila veliku snagu na radnoj površini ili u pregledniku. Ljudi su hvalili moć apleta i alata temeljenih na Javi, ali gunk je uvijek provalio ove kombinacije. Poslužitelji su postali Javina slatka točka.

U međuvremenu, ono što su programeri u početku pogrešno shvatili kao glupog blizanca došlo je na svoje. Jasno, JavaScript se nekoliko godina označavao kao HTML i web koji su Borga izvukli na svijet. Ali to se promijenilo s AJAX-om. Odjednom je glupi blizanac imao moć.

Tada je nastao Node.js koji je brzinom okretao glavu programera. JavaScript je na poslužitelju bio ne samo brži nego što je itko očekivao, već je često bio brži od Jave i drugih opcija. Njegova postojana dijeta malih, brzih, nepreglednih zahtjeva za podacima otad čini Node.js češćim, jer su web stranice postajale dinamičnije.

Iako je to možda bilo nezamislivo prije 20 godina, kvazi blizanci su sada uključeni u bitku za kontrolu nad programskim svijetom. S jedne su strane duboki temelji čvrstog inženjerstva i arhitekture. S druge strane su jednostavnost i sveprisutnost. Hoće li svijet Jave vođen kompajlerima, ili će brzina i fleksibilnost Node.js-a pomoći da JavaScript nastavi proždirati sve što mu se nađe na putu?

Gdje Java pobjeđuje: Čvrsti temelji

Mogu čuti kako se programeri smiju. Neki možda umiru od zatajenja srca. Da, Java ima problema i grešaka, ali relativno gledano, to je Gibraltarska stijena. Ista vjera u Node.js dugo je godina. U stvari, mogu proći desetljeća prije nego što JavaScript posada napiše gotovo onoliko regresijskih testova koliko ih je Sun / Oracle razvio za testiranje Java virtualnog stroja. Kada pokrenete JVM, dobivate 20 godina iskustva od solidnog kustosa odlučnog da dominira poslovnim poslužiteljem. 

JavaScript svijet brzo sustiže. Kada veći dio cijele mreže ovisi o mehanizmu za izvršavanje JavaScript-a, milion sati programera ulazi u poliranje svih rubova. Ali sve inovacije imaju lošu stranu jer se nove značajke mogu širiti brže nego što ih baza programera može apsorbirati. Stare programere često zbunjuje kod ispunjen novijim poboljšanjima sintakse ECMAScript - a isti taj novi kod tiho će srušiti neke starije preglednike. Beskrajna ponuda inovativnih pretprocesora kao što su CoffeeScript i JSX možda je izvrsna za programere koji žele te značajke, ali nama ostalima otežavaju otvaranje slučajne datoteke i njezino razumijevanje odmah.

Java ima svoj udio novih značajki i opcija, ali većinom je stabilna platforma. To mnogo olakšava život programerima koji grade nešto da potraje.

Gdje Node.js pobjeđuje: Sveprisutnost

Zahvaljujući Node.js, JavaScript pronalazi dom na poslužitelju i u pregledniku. Kôd koji napišete za jedan više će vjerojatno raditi na isti način na oba. U životu ništa nije zajamčeno, ali ovo je onoliko blizu koliko je to blizu u računalnom poslu. Puno je lakše držati se JavaScripta za obje strane podjele klijent / poslužitelj, nego napisati nešto jednom u Javi i opet u JavaScript, što biste vjerojatno trebali učiniti ako odlučite premjestiti poslovnu logiku koju ste napisali u Javi za poslužitelju u preglednik. Ili će možda šef inzistirati da se logika koju ste izgradili za preglednik premjesti na poslužitelj. U oba smjera, Node.js i JavaScript znatno olakšavaju migraciju koda.

Čini se da se vodstvo Nodea na ovom svijetu samo širi. Najsofisticiraniji mrežni okviri, poput React, odlučit će u posljednjoj sekundi hoće li kôd pokrenuti na poslužitelju ili klijentu. Jednoga će se dana pokrenuti na klijentu, a drugi dan na poslužitelju. Neka pametna logika donijet će odluku u hodu na temelju opterećenja ili rezervnog RAM-a ili nečeg drugog. Neki okviri šalju JavaScript u bazu podataka kao upit gdje se izvršava. Vaš se kôd može pokretati bilo gdje, a sve je teže pratiti ga jer ne šalje razglednicu kući. Samo budite sretni jer ne trebate razmišljati o detaljima.

Gdje Java pobjeđuje: bolji IDE-i

Programeri Java imaju Eclipse, NetBeans ili IntelliJ, tri vrhunska alata koji su dobro integrirani s programima za otklanjanje pogrešaka, dekompajlerima i poslužiteljima. Svaki od njih ima godine razvoja, posvećene korisnike i solidne ekosustave ispunjene dodacima.

U međuvremenu, većina programera Node.js upisuje riječi u naredbeni redak i kodira u svoj omiljeni uređivač teksta. Da, neki od najboljih uređivača teksta poput Atoma imaju razrađenu kolekciju dodataka koji rade gotovo sve, ali čak i tada se čini da je Node.js starija škola od Eclipsea. Uskoro ćemo svog miša zamijeniti Atari radosnim štapom.

Neki programeri koriste Eclipse ili Visual Studio, koji podržavaju Node.js. Naravno, porast zanimanja za Node.js znači da dolaze novi alati, od kojih neki poput IBM-ovog Node-RED nude intrigantne pristupe, ali još uvijek su daleko od toga da budu cjeloviti ili dominantni poput Eclipsea ili IntelliJ-a.

Čudna je stvar što programeri ne koriste ove alate. Naredbeni redak trebao je nestati prije 35 godina dolaskom Maca, ali nitko nije rekao programerima Node.js. Mogućnosti postoje. Na primjer, WebStorm je solidan komercijalni alat tvrtke JetBrains koji uključuje mnoge alate za izgradnju naredbenog retka.

Naravno, ako tražite IDE koji uređuje i žonglira kodom, novi alati koji podržavaju Node.js dovoljno su dobri. Ali ako zatražite da vam IDE omogući uređivanje dok radite na pokrenutom izvornom kodu kao što kardiokirurg kriškama otvara škrinju, pa, Java alati su puno moćniji. Sve je tu, a sve je lokalno.

Gdje Node.js pobjeđuje: Upiti baze podataka

Upiti za neke novije baze podataka, poput CouchDB i MongoDB, napisani su u JavaScript-u. Miješanje Node.js-a i poziva u bazu podataka ne zahtijeva prebacivanje brzina, a kamoli potrebu za pamćenjem sintaksnih razlika. 

U međuvremenu, mnogi programeri Java koriste SQL. Čak i kada koriste Java DB - nekada Derby, bazu podataka napisanu na Javi za Java programere - svoje upite pišu u SQL-u. Pomislili biste da bi jednostavno pozvali Java metode, ali pogriješili biste. Morate napisati kod baze podataka u SQL, a zatim pustiti Derbyja da raščlani SQL. SQL je lijep jezik, ali se potpuno razlikuje od Jave, a mnogi razvojni timovi trebaju različite ljude za pisanje SQL-a i Java-e.

Da stvar bude gora, mnogi Java koderi koriste složene knjižnice i sheme za pretvaranje podataka iz SQL upita u Java objekte samo da bi ih mogli preoblikovati u predloške. To je lud proces i u konačnici prilično rasipan.

Gdje Java pobjeđuje: Tipovi 

Mnogi uvodni tečajevi programiranja i dalje koriste Javu jer mnogi ozbiljni programeri vole statički upisani kôd i zbog jednostavnosti i zbog sigurnosti. Kôd se jednostavno osjeća rigoroznije nakon što kompajler uhvati očite greške.

JavaScript, međutim, sustiže i neki programeri prelaze na TypeScript, statički otkucani nabor JavaScripta koji primjenjuje svu čaroliju provjere tipa prije nego što ispljune nešto što se pokreće u JavaScript stogu vašeg preglednika. Ako volite tipove, ovo će vam možda biti dovoljno da prihvatite JavaScript. Ili biste jednostavno mogli prepoznati imitaciju kao najiskreniji oblik laskanja i držati se Jave koja je od početka prihvaćala statično tipkanje.

Gdje Node.js pobjeđuje: Sintaksička fleksibilnost

JavaScript je nekada bio jednostavan jezik za iskakanje neželjenih okvira upozorenja i dvostruku provjeru unosa obrazaca. Tada je zajednica programera stvorila mnogo različitih verzija jezika koje bi se mogle pretočiti u nešto za preglednik. Mnoštvo CoffeeScript nudi pregršt različitih sintaksa dizajniranih da zadovolje ukus za čistiju interpunkciju. Postoji mnoštvo React / Vue koja miješa HTML i JavaScript samo zato što je čišći. Postoji TypeScript za ljubitelje tipova i LiveScript za ljubitelje funkcionalnih jezika.

I u svijetu Jave pronaći ćete ogromnu kreativnost, ali iz nekog razloga to nije izraženo kod mnogih pretprocesora. Postoji niz jezika poput Kotlina, Scale i Clojurea koji su pretvoreni u bajt kôd za JVM, ali nekako se osjećaju dovoljno različito da bi se izdvojili kao zasebni jezici. Svi pretprocesori čine život zabavnijim za JavaScript programere koji vole različite načine formuliranja ili interpunkcije svog koda.

Gdje Java pobjeđuje: Jednostavan postupak gradnje 

Komplicirani alati za izradu poput Ant i Maven revolucionirali su Java programiranje. Ali postoji samo jedno pitanje. Specifikaciju pišete u XML, format podataka koji nije dizajniran da podržava programsku logiku. Svakako, razmjerno je lako izraziti grananje ugniježđenim oznakama, ali postoji nešto neugodno u prebacivanju zupčanika s Jave na XML samo da bi se nešto izgradilo. S JavaScriptom nema prebacivanja brzina. 

Node.js je imao jednostavniju izradu. Samo biste uredili kôd i zatim pritisnuli "run". Tada je to bilo. Kako su programeri Node-a "poboljšali" postupak, dodali su pretprocesore koji uzimaju vaš omiljeni poddijalekt JavaScript i pretvaraju ga u nešto za izvođenje. Tada upravitelj paketa Node mora pronaći pravu knjižnicu. Većinu vremena to jednostavno uspije, ali ponekad ne i tada trošite vrijeme tražeći pravi broj verzije nekog artefakta koji sami gradite u zasebnom koraku. A ako počinite neku pogrešku u spremištu artefakata, taj broj verzije se snima i morate ponovno okrenuti kotačiće brojača kilometara.

Java također ima složeni proces izrade koji je prilično sličan metodi Node.js, ali čini se da nije postao složeniji. Maven i Ant nekako se sada čine kao dio Java temelja. Mnogi hrapavi rubovi su odavno nestali, a građevine samo rade češće. Da postoji neka apsolutna mjera gnjavaže oko gradnje, ta bi dva jezika mogla biti slična, ali brza eksplozija složenosti JavaScript-a znači da Java pobjeđuje.

Povezani videozapis: Savjeti i trikovi za Node.js

U ovom videu s objašnjenjima naučite nekoliko tehnika koje mogu poboljšati vaše iskustvo razvoja Nodea.

Gdje Node.js pobjeđuje: JSON

Kad baze podataka ispljunu odgovore, Java se razrađuje kako bi rezultate pretvorila u Java objekte. Programeri će se satima svađati oko POJO mapiranja, hibernacije i drugih alata. Njihova konfiguracija može potrajati satima ili čak danima. Na kraju, Java kod dobiva Java objekte nakon cijele pretvorbe. A što se tiče konfiguracije, svijet Java i dalje se drži XML-a, pa čak nudi dva glavna parsera kako bi programerima dao više razloga za uznemirenje.

Danas mnoge web usluge i baze podataka vraćaju podatke u JSON-u, prirodnom dijelu JavaScript-a. JSON je sada toliko uobičajen i koristan da mnogi programeri Java koriste format, a niz dobrih JSON parsera dostupan je i kao Java knjižnice. Ali JSON je dio temelja JavaScripta. Ne trebaju vam knjižnice. Sve je tu i spremno za polazak.

Gdje Java pobjeđuje: Daljinsko ispravljanje pogrešaka

Java se može pohvaliti nevjerojatnim alatima za nadgledanje klastera strojeva. U JVM postoje duboke kuke i razrađeni alati za profiliranje koji pomažu identificirati uska grla i kvarove. Java Enterprise stog pokreće neke od najsofisticiranijih poslužitelja na planetu, a tvrtke koje koriste te poslužitelje zahtijevale su najbolje u telemetriji. Svi ovi alati za praćenje i uklanjanje pogrešaka prilično su zreli i spremni za vašu implementaciju.

Gdje Node.js pobjeđuje: Desktop

Možda se tamo poneki Java Java izvršava, a ja još uvijek održavam neke Java JAR datoteke na koje mogu kliknuti za pokretanje, ali većinom je stolni svijet uglavnom bez Java. JavaScript, s druge strane, nastavlja bilježiti sve više i više radnji jer preglednik jede većinu uloga naše radne površine. Kad je Microsoft prepisao Office da radi u pregledniku, matrica je izbačena. Ako se i dalje pitate, postoje zanimljive opcije poput Electrona koje uzimaju vaš web kôd i pretvaraju ga u samostalnu radnu površinu.

Gdje Java pobjeđuje: Ručni uređaji

Android aplikacije su često napisane na Javi, a 90 posto novih telefona pokreće neku verziju Androida. Mnogi ljudi više ni ne koriste radne površine jer su telefoni dovoljno dobri za sve.

Naravno da postoji malo zabune. Mnogi programeri pišu web aplikacije Node.js koje ciljaju mobilne preglednike na iPhoneu i Androidu. Ako se to dobro izvede, izvedba je često dovoljno dobra.