Node.js vs. Java: Pertempuran epik untuk berbagi pikiran pengembang

Dalam sejarah komputasi, 1995 adalah waktu yang gila. Java pertama kali muncul, kemudian JavaScript. Nama-nama itu membuat mereka tampak seperti kembar siam yang baru saja dipisahkan, tetapi mereka sangat berbeda. Salah satunya dikompilasi dan diketik secara statis; yang lain ditafsirkan dan diketik secara dinamis. Itu hanyalah permulaan dari perbedaan teknis antara dua bahasa yang sangat berbeda ini yang telah bergeser ke jalur tabrakan, berkat Node.js.

Jika Anda cukup dewasa untuk berada di sana saat itu, Anda mungkin ingat awal Jawa yang epik, puncak. Itu meninggalkan laboratorium, dan meteran hype-nya disematkan. Semua orang melihatnya sebagai revolusi yang akan berhenti pada pengambilalihan total komputasi. Prediksi itu akhirnya hanya sebagian yang benar. Saat ini, Java mendominasi ponsel Android, komputasi perusahaan, dan beberapa dunia tertanam seperti disk Blu-ray.

Terlepas dari semua keberhasilannya, Java tidak pernah membuat banyak daya tarik di desktop atau di browser. Orang-orang memuji kekuatan applet dan alat berbasis Java, tetapi gunk selalu salah pada kombinasi ini. Server menjadi sweet spot Jawa.

Sementara itu, apa yang awalnya dikira programmer sebagai si kembar bodoh telah menjadi miliknya sendiri. Tentu, JavaScript mengikuti selama beberapa tahun sebagai HTML dan web menarik Borg di dunia. Tapi itu berubah dengan AJAX. Tiba-tiba, si kembar bisu memiliki kekuatan.

Kemudian Node.js muncul, memutar kepala pengembang dengan kecepatannya. JavaScript tidak hanya lebih cepat di server daripada yang diharapkan siapa pun, tetapi sering kali lebih cepat daripada Java dan opsi lainnya. Pola makannya yang stabil dengan permintaan data yang kecil, cepat, dan tanpa akhir telah membuat Node.js lebih umum, karena laman web telah tumbuh lebih dinamis.

Meskipun mungkin tidak terpikirkan 20 tahun yang lalu, si kembar semu sekarang terkunci dalam pertempuran untuk menguasai dunia pemrograman. Di satu sisi adalah fondasi yang dalam dari teknik dan arsitektur yang kokoh. Di sisi lain adalah kesederhanaan dan ada di mana-mana. Akankah dunia Java yang digerakkan oleh compiler sekolah lama akan bertahan, atau akankah kecepatan dan fleksibilitas Node.js membantu JavaScript terus melahap semua yang ada di jalurnya?

Di mana Jawa menang: Fondasi yang kokoh

Saya bisa mendengar para pengembang tertawa. Beberapa bahkan mungkin meninggal karena gagal jantung. Ya, Java memiliki gangguan dan bug, tetapi secara relatif, ini adalah Batu Gibraltar. Keyakinan yang sama di Node.js sudah bertahun-tahun berlalu. Faktanya, mungkin perlu beberapa dekade sebelum kru JavaScript menulis pengujian regresi yang hampir sama banyaknya dengan yang dikembangkan Sun / Oracle untuk menguji Java Virtual Machine. Saat Anda mem-boot JVM, Anda mendapatkan pengalaman 20 tahun dari kurator yang solid yang bertekad untuk mendominasi server perusahaan. 

Dunia JavaScript sedang mengejar dengan cepat. Saat sebagian besar web bergantung pada mesin eksekusi JavaScript, miliaran jam pengembang digunakan untuk memoles semua sisi. Tetapi semua inovasi memiliki sisi negatif karena fitur-fitur baru dapat berkembang biak lebih cepat daripada yang dapat diserap oleh basis pengembang. Pengembang sekolah lama sering bingung dengan kode yang diisi dengan penyempurnaan sintaks ECMAScript yang lebih baru — dan kode baru yang sama ini diam-diam akan merusak beberapa browser lama. Pasokan praprosesor inovatif yang tak ada habisnya seperti CoffeeScript dan JSX mungkin bagus untuk pengembang yang menginginkan fitur tersebut, tetapi mereka mempersulit kita semua untuk membuka file acak dan segera memahaminya.

Java memiliki bagian fitur dan opsi baru, tetapi sebagian besar merupakan platform yang stabil. Itu membuat hidup lebih mudah bagi pengembang yang membangun sesuatu untuk bertahan lama.

Dimana Node.js menang: Ubiquity

Berkat Node.js, JavaScript menemukan rumah di server dan di browser. Kode yang Anda tulis untuk satu kode kemungkinan besar akan berjalan dengan cara yang sama pada keduanya. Tidak ada yang dijamin dalam hidup, tapi ini sedekat yang didapat dalam bisnis komputer. Jauh lebih mudah untuk tetap menggunakan JavaScript untuk kedua sisi pembagian klien / server daripada menulis sesuatu sekali di Java dan sekali lagi di JavaScript, yang mungkin perlu Anda lakukan jika Anda memutuskan untuk memindahkan logika bisnis yang Anda tulis di Java untuk server ke browser. Atau mungkin bos akan bersikeras bahwa logika yang Anda buat untuk browser dipindahkan ke server. Di kedua arah, Node.js dan JavaScript membuatnya lebih mudah untuk memigrasi kode.

Pimpinan Node di dunia ini sepertinya hanya akan berkembang. Kerangka web paling canggih, seperti React, akan memutuskan pada detik terakhir apakah akan menjalankan kode di server atau klien. Suatu hari ini akan berjalan di klien dan di hari lain itu akan berjalan di server. Beberapa logika cerdas akan membuat keputusan dengan cepat berdasarkan beban atau RAM cadangan atau yang lainnya. Beberapa kerangka kerja akan mengirimkan JavaScript ke database sebagai kueri tempat ia dijalankan. Kode Anda dapat berjalan di mana saja dan semakin sulit untuk dipertahankan karena tidak mengirim kartu pos ke rumah. Berbahagialah karena Anda tidak perlu memikirkan detailnya.

Di mana Java menang: IDE yang lebih baik

Pengembang Java memiliki Eclipse, NetBeans, atau IntelliJ, tiga alat terbaik yang terintegrasi dengan baik dengan debugger, pengurai, dan server. Masing-masing memiliki pengembangan bertahun-tahun, pengguna yang berdedikasi, dan ekosistem yang kokoh yang dipenuhi dengan plugin.

Sementara itu, sebagian besar pengembang Node.js mengetikkan kata ke dalam baris perintah dan kode ke editor teks favorit mereka. Ya, beberapa editor teks terbaik seperti Atom memiliki koleksi plug-in rumit yang melakukan hampir semua hal, tetapi meskipun demikian Node.js terasa lebih kuno daripada Eclipse. Kami akan segera mengganti mouse kami dengan joystick Atari.

Beberapa pengembang menggunakan Eclipse atau Visual Studio, keduanya mendukung Node.js. Tentu saja, lonjakan minat pada Node.js berarti alat baru akan datang, beberapa di antaranya, seperti Node-RED IBM menawarkan pendekatan yang menarik, tetapi mereka masih jauh dari selengkap atau dominan seperti Eclipse atau IntelliJ.

Yang aneh adalah para pengembang tampaknya tidak menggunakan alat ini. Baris perintah seharusnya menghilang 35 tahun yang lalu dengan kedatangan Mac, tetapi tidak ada yang memberi tahu pengembang Node.js. Opsi ada di sana. WebStorm, misalnya, adalah alat komersial yang solid dari JetBrains yang menggabungkan banyak alat pembuatan baris perintah.

Tentu saja, jika Anda mencari IDE yang mengedit dan menyulap kode, alat baru yang mendukung Node.js sudah cukup baik. Tetapi jika Anda meminta IDE Anda untuk mengizinkan Anda mengedit saat Anda beroperasi pada kode sumber yang berjalan seperti seorang ahli bedah jantung mengiris dada, yah, alat Java jauh lebih kuat. Semuanya ada di sana, dan semuanya lokal.

Di mana Node.js menang: Kueri database

Kueri untuk beberapa database baru, seperti CouchDB dan MongoDB, ditulis dalam JavaScript. Mencampur Node.js dan panggilan ke database tidak memerlukan perpindahan gigi, apalagi perlu mengingat perbedaan sintaks. 

Sementara itu, banyak developer Java yang menggunakan SQL. Bahkan ketika mereka menggunakan Java DB — sebelumnya Derby, database yang ditulis di Java untuk pengembang Java — mereka menulis kueri mereka dalam SQL. Anda akan berpikir mereka hanya akan memanggil metode Java, tetapi Anda salah. Anda harus menulis kode database Anda dalam SQL, lalu biarkan Derby mengurai SQL. SQL adalah bahasa yang bagus, tetapi sangat berbeda dari Java, dan banyak tim pengembangan membutuhkan orang yang berbeda untuk menulis SQL dan Java.

Lebih buruk lagi, banyak pembuat kode Java menggunakan pustaka dan skema yang rumit untuk mengonversi data dari kueri SQL menjadi objek Java agar mereka dapat menyusunnya kembali menjadi templat. Ini adalah proses yang gila, dan pada akhirnya sangat boros.

Di mana Java menang: Jenis 

Banyak kursus pemrograman pengantar terus menggunakan Java karena banyak programmer yang serius cenderung menyukai kode yang diketik secara statis baik untuk kesederhanaan dan keamanan. Kode hanya terasa lebih ketat setelah kompilator menangkap bug yang jelas.

JavaScript, bagaimanapun, sedang mengejar dan beberapa pengembang beralih ke TypeScript, superset JavaScript yang diketik secara statis yang menerapkan semua keajaiban pemeriksaan tipe sebelum mengeluarkan sesuatu yang berjalan di tumpukan JavaScript browser Anda. Jika Anda menyukai tipe, ini mungkin cukup bagi Anda untuk menggunakan JavaScript. Atau Anda bisa mengenali imitasi sebagai bentuk sanjungan yang paling tulus dan tetap menggunakan Java, yang sejak awal menganut pengetikan statis.

Dimana Node.js menang: Fleksibilitas sintaksis

JavaScript dulunya adalah bahasa sederhana untuk memunculkan kotak peringatan yang tidak diinginkan dan memeriksa ulang masukan formulir. Kemudian komunitas pengembang membuat banyak versi bahasa yang berbeda yang dapat diubah menjadi sesuatu untuk browser. Ada kerumunan CoffeeScript yang menawarkan beberapa sintaks berbeda yang dirancang untuk memuaskan selera akan tanda baca yang lebih rapi. Ada kerumunan React / Vue yang menggabungkan HTML dan JavaScript hanya karena lebih bersih. Ada TypeScript untuk pecinta tipe dan LiveScript untuk penggemar bahasa fungsional.

Anda juga akan menemukan kreativitas yang luar biasa di dunia Java, tetapi untuk beberapa alasan hal itu tidak diekspresikan dengan banyak pra-prosesor. Ada sejumlah bahasa seperti Kotlin, Scala, dan Clojure yang diubah menjadi kode byte untuk JVM, tetapi entah bagaimana mereka merasa cukup berbeda untuk berdiri terpisah sebagai bahasa yang terpisah. Semua preprocessor membuat hidup lebih menyenangkan bagi programmer JavaScript yang menyukai berbagai cara untuk merumuskan atau memberi tanda baca pada kode mereka.

Di mana Java menang: Proses build sederhana 

Alat build yang rumit seperti Ant dan Maven telah merevolusi pemrograman Java. Tapi hanya ada satu masalah. Anda menulis spesifikasi dalam XML, format data yang tidak dirancang untuk mendukung logika pemrograman. Tentu, relatif mudah untuk mengekspresikan percabangan dengan tag bersarang, tetapi ada sesuatu yang mengganggu tentang perpindahan gigi dari Java ke XML hanya untuk membangun sesuatu. Dengan JavaScript, tidak ada perpindahan gigi. 

Node.js dulu memiliki build yang lebih sederhana. Anda hanya perlu mengedit kodenya dan kemudian tekan "lari". Itu dulu. Karena pengembang Node telah “meningkatkan” prosesnya, mereka telah menambahkan preprocessor yang mengambil subdialek JavaScript favorit Anda dan mengubahnya menjadi sesuatu yang dapat dijalankan. Kemudian manajer paket Node perlu menemukan perpustakaan yang tepat. Sebagian besar waktu ini hanya berfungsi, tetapi terkadang tidak dan kemudian Anda menghabiskan waktu mencari nomor versi yang tepat dari beberapa artefak yang Anda buat sendiri dalam langkah terpisah. Dan jika Anda melakukan kesalahan pada gudang artefak, nomor versi itu akan ditembakkan dan Anda harus memutar roda odometer lagi.

Java juga memiliki proses build kompleks yang sangat mirip dengan metode Node.js, tetapi sepertinya tidak menjadi lebih kompleks. Entah bagaimana Maven dan Ant tampak seperti bagian dari yayasan Jawa sekarang. Banyak dari tepi kasarnya sudah lama hilang dan bangunannya bekerja lebih sering. Jika ada beberapa ukuran absolut dari kerumitan build, kedua bahasa tersebut mungkin serupa, tetapi ledakan kompleksitas JavaScript yang cepat berarti Java menang.

Video terkait: Tip dan trik Node.js

Dalam video penjelas ini, pelajari beberapa teknik yang dapat meningkatkan pengalaman pengembangan Node Anda.

Dimana Node.js menang: JSON

Ketika database mengeluarkan jawaban, Java berusaha keras untuk mengubah hasilnya menjadi objek Java. Pengembang akan berdebat selama berjam-jam tentang pemetaan POJO, Hibernasi, dan alat lainnya. Mengonfigurasinya dapat memakan waktu berjam-jam atau bahkan berhari-hari. Akhirnya, kode Java mendapatkan objek Java setelah semua konversi. Dan ketika sampai pada konfigurasi, dunia Java masih bergantung pada XML dan bahkan menawarkan dua parser utama untuk memberi pengembang lebih banyak alasan untuk resah.

Saat ini, banyak layanan web dan database mengembalikan data dalam JSON, bagian alami dari JavaScript. JSON sekarang sangat umum dan berguna sehingga banyak pengembang Java menggunakan format tersebut, dan sejumlah parser JSON yang bagus juga tersedia sebagai pustaka Java. Tapi JSON adalah bagian dari dasar JavaScript. Anda tidak membutuhkan perpustakaan. Semuanya ada di sana dan siap digunakan.

Di mana Java menang: Debugging jarak jauh

Java menawarkan alat yang luar biasa untuk memantau cluster mesin. Ada kaitan mendalam ke dalam JVM dan alat pembuatan profil yang rumit untuk membantu mengidentifikasi kemacetan dan kegagalan. Tumpukan perusahaan Java menjalankan beberapa server paling canggih di planet ini, dan perusahaan yang menggunakan server tersebut menuntut yang terbaik dalam telemetri. Semua alat pemantauan dan debugging ini cukup matang dan siap untuk Anda terapkan.

Dimana Node.js menang: Desktop

Mungkin ada beberapa applet Java di luar sana, dan saya masih mempertahankan beberapa file Java JAR yang dapat saya klik untuk menjalankannya, tetapi untuk sebagian besar dunia desktop sebagian besar adalah Java gratis. JavaScript, di sisi lain, terus menangkap semakin banyak tindakan saat browser menghabiskan sebagian besar peran untuk desktop kita. Ketika Microsoft menulis ulang Office untuk bekerja di browser, dadu itu dilemparkan. Jika Anda masih bertanya-tanya, ada opsi menarik seperti Electron yang mengambil kode web Anda dan mengubahnya menjadi aplikasi desktop yang berdiri sendiri.

Dimana Java menang: Handheld

Aplikasi Android sering kali ditulis dalam Java dan 90 persen ponsel baru menjalankan beberapa versi Android. Banyak orang bahkan tidak menggunakan desktop lagi karena teleponnya cukup bagus untuk semuanya.

Tentu ada sedikit kebingungan. Banyak pengembang yang membuat aplikasi web Node.js yang menargetkan browser seluler di iPhone dan Android. Jika ini dilakukan dengan baik, kinerjanya seringkali cukup baik.