Node.js kontra Java: epicka bitwa o dzielenie się umysłami programistów

W historii informatyki 1995 był szalonym okresem. Najpierw pojawiła się Java, potem tuż po jej piętach pojawił się JavaScript. Imiona sprawiały, że wyglądali jak zrośnięte bliźnięta, które dopiero co się odłączyły, ale nie mogły się bardziej różnić. Jeden z nich jest kompilowany i wpisywany statycznie; druga interpretowana i dynamicznie wpisywana. To dopiero początek technicznych różnic między tymi dwoma niezwykle odmiennymi językami, które od tamtego czasu przeszły na swego rodzaju kolizyjny kurs dzięki Node.js.

Jeśli jesteś na tyle dorosły, aby być w pobliżu, być może pamiętasz wczesny, epicki szczyt Javy. Opuścił laboratoria i przypiął miernik szumu. Wszyscy postrzegali to jako rewolucję, która zakończy się niczym innym jak całkowitym przejęciem informatyki. Ta prognoza okazała się tylko częściowo poprawna. Obecnie Java dominuje w telefonach z systemem Android, komputerach korporacyjnych i niektórych wbudowanych światach, takich jak dyski Blu-ray.

Jednak pomimo całego swojego sukcesu Java nigdy nie była zbyt popularna na komputerze stacjonarnym ani w przeglądarce. Ludzie chwalili moc apletów i narzędzi opartych na Javie, ale gunk zawsze mylił te kombinacje. Serwery stały się ulubionym miejscem Javy.

W międzyczasie to, co programiści początkowo mylili jako głupi bliźniak, stało się samo. Jasne, JavaScript działał przez kilka lat, ponieważ HTML i sieć wyciągnęły Borga na świat. Ale to się zmieniło dzięki AJAX. Nagle głupi bliźniak uzyskał moc.

Następnie pojawił się Node.js, zwracając uwagę programistów swoją prędkością. JavaScript nie tylko działał szybciej na serwerze, niż ktokolwiek się spodziewał, ale często był szybszy niż Java i inne opcje. Stała dieta małych, szybkich i niekończących się żądań danych sprawiła, że ​​Node.js stał się od tego czasu bardziej powszechny, ponieważ strony internetowe stały się bardziej dynamiczne.

Chociaż 20 lat temu było to nie do pomyślenia, quasi-bliźniaki są teraz zamknięte w walce o kontrolę nad światem programowania. Z jednej strony są głębokie fundamenty solidnej inżynierii i architektury. Z drugiej strony prostota i wszechobecność. Czy oparty na kompilatorach oldschoolowy świat Javy utrzyma się na swoim miejscu, czy też szybkość i elastyczność Node.js pomoże JavaScriptowi nadal pochłaniać wszystko na swojej drodze?

Gdzie wygrywa Java: solidne podstawy

Słyszę śmiech programistów. Niektórzy mogą nawet umierać z powodu niewydolności serca. Tak, Java ma usterki i błędy, ale relatywnie rzecz biorąc, jest to Rock of Gibraltar. Ta sama wiara w Node.js ma wiele lat. W rzeczywistości mogą upłynąć dziesięciolecia, zanim załoga JavaScript napisze prawie tyle testów regresji, ile Sun / Oracle opracowało do testowania wirtualnej maszyny języka Java. Po uruchomieniu maszyny JVM otrzymujesz 20-letnie doświadczenie od solidnego kuratora zdeterminowanego, aby zdominować serwer korporacyjny. 

Świat JavaScript szybko nadrabia zaległości. Kiedy znaczna część całej sieci zależy od silnika wykonawczego JavaScript, dopracowanie wszystkich krawędzi zajmuje miliard godzin pracy programistów. Jednak wszystkie te innowacje mają wadę, ponieważ nowe funkcje mogą rozprzestrzeniać się szybciej, niż jest w stanie je wchłonąć baza programistów. Deweloperzy starej szkoły są często zdezorientowani kodem wypełnionym nowszymi ulepszeniami składni ECMAScript - i ten sam nowy kod po cichu zawiesza niektóre starsze przeglądarki. Niekończące się dostawy innowacyjnych preprocesorów, takich jak CoffeeScript i JSX, mogą być świetne dla programistów, którzy chcą tych funkcji, ale utrudniają reszcie z nas otwarcie losowego pliku i natychmiastowe jego zrozumienie.

Java ma wiele nowych funkcji i opcji, ale w większości jest to stabilna platforma. To znacznie ułatwia życie programistom, którzy budują coś, co trwa.

Gdzie Node.js wygrywa: Ubiquity

Dzięki Node.js JavaScript znajduje swoje miejsce na serwerze iw przeglądarce. Kod, który napiszesz dla jednego, będzie prawdopodobnie działał w ten sam sposób na obu. W życiu nic nie jest gwarantowane, ale jest to tak bliskie, jak w branży komputerowej. O wiele łatwiej jest trzymać się JavaScript po obu stronach podziału klient / serwer niż pisać coś raz w Javie i jeszcze raz w JavaScript, co prawdopodobnie musiałbyś zrobić, gdybyś zdecydował się przenieść logikę biznesową napisaną w Javie dla serwer do przeglądarki. A może szef będzie nalegał, aby logika, którą zbudowałeś dla przeglądarki, została przeniesiona na serwer. W obu kierunkach Node.js i JavaScript znacznie ułatwiają migrację kodu.

Wydaje się, że przewaga Node na tym świecie tylko się rozszerza. Najbardziej wyrafinowane frameworki internetowe, takie jak React, decydują w ostatniej sekundzie, czy uruchomić kod na serwerze, czy na kliencie. Jednego dnia będzie działał na kliencie, a innego na serwerze. Jakaś inteligentna logika podejmie decyzję w locie na podstawie obciążenia, wolnej pamięci RAM lub czegoś innego. Niektóre frameworki wysyłają JavaScript do bazy danych jako zapytanie, w którym jest wykonywany. Twój kod może działać wszędzie, a nadążanie za nim jest coraz trudniejsze, ponieważ nie powoduje wysłania pocztówki do domu. Po prostu ciesz się, ponieważ nie musisz myśleć o szczegółach.

Gdzie wygrywa Java: lepsze środowiska IDE

Programiści Java mają Eclipse, NetBeans lub IntelliJ, trzy najwyższej klasy narzędzia, które są dobrze zintegrowane z debuggerami, dekompilatorami i serwerami. Każdy ma lata rozwoju, oddanych użytkowników i solidne ekosystemy wypełnione wtyczkami.

W międzyczasie większość programistów Node.js wpisuje słowa w wierszu poleceń i koduje w swoim ulubionym edytorze tekstu. Tak, niektóre z najlepszych edytorów tekstu, takie jak Atom, mają rozbudowane kolekcje wtyczek, które robią prawie wszystko, ale nawet wtedy wydaje się, że Node.js jest bardziej oldschoolowy niż Eclipse. Wkrótce zastąpimy naszą mysz radiem Atari.

Niektórzy programiści używają Eclipse lub Visual Studio, z których oba obsługują Node.js. Oczywiście wzrost zainteresowania Node.js oznacza, że ​​pojawiają się nowe narzędzia, z których niektóre, takie jak IBM Node-RED, oferują intrygujące rozwiązania, ale wciąż daleko im do tak kompletności lub dominacji jak Eclipse czy IntelliJ.

Dziwne jest to, że programiści nie używają tych narzędzi. Linia poleceń miała zniknąć 35 lat temu wraz z pojawieniem się Maca, ale nikt nie powiedział o tym deweloperom Node.js. Opcje są dostępne. Na przykład WebStorm jest solidnym narzędziem komercyjnym firmy JetBrains, które zawiera wiele narzędzi do budowania z wiersza poleceń.

Oczywiście, jeśli szukasz IDE, które edytuje i żongluje kodem, nowe narzędzia obsługujące Node.js są wystarczająco dobre. Ale jeśli poprosisz swoje IDE, aby pozwoliło ci edytować, podczas gdy działasz na działającym kodzie źródłowym, tak jak plastry serca otwierają klatkę piersiową, cóż, narzędzia Java są znacznie potężniejsze. Wszystko tam jest i wszystko jest lokalne.

Gdzie Node.js wygrywa: zapytania do bazy danych

Zapytania do niektórych nowszych baz danych, takich jak CouchDB i MongoDB, są pisane w języku JavaScript. Mieszanie Node.js i wywołania bazy danych nie wymaga zmiany biegu, nie mówiąc już o konieczności zapamiętywania różnic w składni. 

Tymczasem wielu programistów Java używa języka SQL. Nawet gdy używają bazy danych Java - dawniej Derby, bazy danych napisanej w języku Java dla programistów Java - piszą swoje zapytania w języku SQL. Można by pomyśleć, że po prostu wywołają metody Java, ale byłbyś w błędzie. Musisz napisać kod bazy danych w SQL, a następnie pozwolić Derby przeanalizować SQL. SQL to fajny język, ale jest zupełnie inny niż Java, a wiele zespołów programistycznych potrzebuje różnych ludzi do pisania SQL i Java.

Co gorsza, wielu programistów Javy używa skomplikowanych bibliotek i schematów do konwersji danych z zapytania SQL na obiekty Java, aby mogli przekształcić je w szablony. To szalony proces i ostatecznie dość marnotrawny.

Gdzie wygrywa Java: typy 

Wiele kursów programowania wprowadzających nadal korzysta z języka Java, ponieważ wielu poważnych programistów lubi kod statyczny, zarówno ze względu na prostotę, jak i bezpieczeństwo. Kod wydaje się bardziej rygorystyczny po tym, jak kompilator wychwyci oczywiste błędy.

JavaScript jednak nadrabia zaległości, a niektórzy programiści przechodzą na TypeScript, statycznie typowany nadzbiór JavaScript, który stosuje całą magię sprawdzania typów, zanim wypluje coś, co działa w stosie JavaScript przeglądarki. Jeśli kochasz typy, może to wystarczyć, aby zaakceptować JavaScript. Możesz też po prostu rozpoznać naśladownictwo jako najszczerszą formę pochlebstwa i trzymać się Javy, która od początku obejmowała statyczne pisanie.

Gdzie Node.js wygrywa: elastyczność składni

JavaScript był kiedyś prostym językiem do wyświetlania niechcianych okien ostrzeżeń i podwójnego sprawdzania danych wejściowych w formularzach. Następnie społeczność programistów stworzyła wiele różnych wersji języka, które można przetransponować na coś dla przeglądarki. Jest tłum CoffeeScript oferujący garść różnych składni zaprojektowanych tak, aby zaspokoić gust czystszej interpunkcji. Istnieje tłum React / Vue, który łączy ze sobą HTML i JavaScript tylko dlatego, że jest bardziej przejrzysty. Jest TypeScript dla miłośników czcionek i LiveScript dla wielbicieli języka funkcjonalnego.

W świecie Javy znajdziesz również ogromną kreatywność, ale z jakiegoś powodu nie jest ona wyrażana w wielu preprocesorach. Istnieje wiele języków, takich jak Kotlin, Scala i Clojure, które są przekształcane w kod bajtowy dla JVM, ale w jakiś sposób wydają się na tyle różne, że wyróżniają się jako oddzielne języki. Wszystkie preprocesory sprawiają, że życie jest przyjemniejsze dla programistów JavaScript, którzy uwielbiają różne sposoby formułowania lub interpunkcji kodu.

Gdzie wygrywa Java: prosty proces budowania 

Skomplikowane narzędzia do budowania, takie jak Ant i Maven, zrewolucjonizowały programowanie w języku Java. Ale jest tylko jeden problem. Piszesz specyfikację w XML, formacie danych, który nie został zaprojektowany do obsługi logiki programowania. Oczywiście, stosunkowo łatwo jest wyrazić rozgałęzienie za pomocą zagnieżdżonych tagów, ale jest coś irytującego w przełączaniu narzędzi z Java na XML tylko po to, aby coś zbudować. W JavaScript nie ma przełączania biegów. 

Node.js miał prostszą kompilację. Wystarczy edytować kod, a następnie nacisnąć „Uruchom”. To było wtedy. Ponieważ programiści Node „ulepszyli” ten proces, dodali preprocesory, które pobierają ulubiony subdialekt JavaScript i przekształcają go w coś, co można uruchomić. Następnie menedżer pakietów Node musi znaleźć odpowiednią bibliotekę. W większości przypadków to po prostu działa, ale czasami tak nie jest, a potem spędzasz czas na poszukiwaniu odpowiedniego numeru wersji jakiegoś artefaktu, który tworzysz samodzielnie w osobnym kroku. A jeśli popełnisz jakiś błąd w repozytorium artefaktów, cóż, numer wersji zostanie zapisany i musisz ponownie obrócić koła licznika kilometrów.

Java ma również złożony proces kompilacji, który jest dość podobny do metody Node.js, ale nie wydaje się, aby stał się bardziej złożony. W jakiś sposób Maven i Ant wydają się być teraz częścią fundacji Java. Wiele szorstkich krawędzi już dawno zniknęło, a kompilacje po prostu działają częściej. Gdyby istniała jakaś absolutna miara kłopotów z kompilacją, te dwa języki mogłyby być podobne, ale gwałtowna eksplozja złożoności JavaScript oznacza, że ​​wygrywa Java.

Powiązane wideo: porady i wskazówki dotyczące Node.js.

W tym filmie wyjaśniającym poznaj kilka technik, które mogą poprawić wrażenia z programowania Node.

Gdzie Node.js wygrywa: JSON

Gdy bazy danych wypluwają odpowiedzi, Java dokłada wszelkich starań, aby przekształcić wyniki w obiekty Java. Programiści będą spierać się godzinami o mapowania POJO, hibernację i inne narzędzia. Konfiguracja ich może zająć godziny, a nawet dni. Ostatecznie kod Java pobiera obiekty Java po całej konwersji. A jeśli chodzi o konfigurację, świat Javy nadal trzyma się XML, a nawet oferuje dwa główne parsery, aby dać programistom więcej powodów do niepokoju.

Obecnie wiele usług internetowych i baz danych zwraca dane w formacie JSON, będącym naturalną częścią JavaScript. JSON jest teraz tak powszechny i ​​przydatny, że wielu programistów Java używa tego formatu, a wiele dobrych parserów JSON jest również dostępnych jako biblioteki Java. Ale JSON jest częścią fundamentu JavaScript. Nie potrzebujesz bibliotek. Wszystko jest gotowe i gotowe.

Gdzie wygrywa Java: zdalne debugowanie

Java oferuje niesamowite narzędzia do monitorowania klastrów maszyn. W JVM istnieją głębokie zaczepki i rozbudowane narzędzia do profilowania, które pomagają identyfikować wąskie gardła i awarie. Java Enterprise stack obsługuje jedne z najbardziej wyrafinowanych serwerów na świecie, a firmy, które używają tych serwerów, domagały się najlepszych rozwiązań telemetrycznych. Wszystkie te narzędzia do monitorowania i debugowania są dość dojrzałe i gotowe do wdrożenia.

Gdzie Node.js wygrywa: Desktop

Mogą tam być uruchomione aplety Javy i nadal utrzymuję kilka plików JAR JAR, które mogę kliknąć, aby je uruchomić, ale w większości środowisko pulpitu jest w większości wolne od Javy. Z drugiej strony JavaScript nadal rejestruje coraz więcej akcji, ponieważ przeglądarka pochłania większość ról naszego pulpitu. Kiedy Microsoft przepisał Office do pracy w przeglądarce, kość została rzucona. Jeśli nadal się zastanawiasz, istnieją ciekawe opcje, takie jak Electron, które pobierają Twój kod internetowy i przekształcają go w samodzielną aplikację komputerową.

Gdzie wygrywa Java: komputery kieszonkowe

Aplikacje na Androida są często napisane w Javie, a 90 procent nowych telefonów ma jakąś wersję Androida. Wiele osób nie używa już komputerów stacjonarnych, ponieważ telefony są wystarczająco dobre do wszystkiego.

Oczywiście jest trochę zamieszania. Wielu programistów pisze aplikacje internetowe Node.js przeznaczone dla przeglądarek mobilnych zarówno na iPhone'a, jak i na Androida. Jeśli jest to zrobione dobrze, wydajność jest często wystarczająco dobra.