Node.js ve Java: Geliştirici zihin paylaşımı için destansı bir savaş

Bilgisayar tarihinde 1995 çılgın bir zamandı. Önce Java çıktı, ardından hemen ardından JavaScript geldi. İsimler onları yeni ayrılmış yapışık ikizler gibi gösteriyordu, ancak daha farklı olamazlardı. Bunlardan biri derlenmiş ve statik olarak yazılmıştır; diğeri yorumlanmış ve dinamik olarak yazılmıştır. Node.js sayesinde, o zamandan beri bir çeşit çarpışma rotasına kaymış olan çılgınca farklı iki dil arasındaki teknik farklılıkların sadece başlangıcı budur.

O zamanlar buralarda olacak kadar yaşlıysanız, Java'nın erken, epik zirvesini hatırlayabilirsiniz. Laboratuarları terk etti ve heyecan göstergesi sabitlendi. Herkes bunu, bilgi işlemin tamamen ele geçirilmesinden başka bir şeyle bitmeyecek bir devrim olarak gördü. Bu tahmin sadece kısmen doğru çıktı. Bugün Java, Android telefonlara, kurumsal bilgi işlemlere ve Blu-ray diskler gibi bazı gömülü dünyalara hakimdir.

Bununla birlikte, tüm başarısına rağmen, Java hiçbir zaman masaüstünde veya tarayıcıda fazla ilgi görmedi. İnsanlar uygulamaların ve Java tabanlı araçların gücünü öne sürdüler, ancak gunk her zaman bu kombinasyonları bozdu. Sunucular Java'nın tatlı noktası oldu.

Bu arada, programcıların başlangıçta aptal ikiz olarak yanlış anladıkları şey kendi haline geldi. Elbette, birkaç yıl boyunca HTML olarak etiketlenen JavaScript ve web dünya üzerinde bir Borg çekti. Ancak bu AJAX ile değişti. Aniden, aptal ikizin gücü vardı.

Sonra Node.js ortaya çıktı ve hızıyla geliştiricilerin kafasını çevirdi. JavaScript yalnızca sunucuda herkesin beklediğinden daha hızlı değildi, aynı zamanda Java ve diğer seçeneklerden daha hızlıydı. Küçük, hızlı, sonsuz veri isteklerinden oluşan sürekli diyet, web sayfaları daha dinamik hale geldikçe Node.js'yi daha yaygın hale getirdi.

20 yıl önce düşünülemez olsa da, yarı ikizler şimdi programlama dünyasının kontrolü için bir savaşa kilitlenmiş durumda. Bir yanda sağlam mühendislik ve mimarinin derin temelleri var. Diğer tarafta basitlik ve her yerde bulunurluk. Eski usul derleyici odaklı Java dünyası yerini koruyacak mı, yoksa Node.js'nin hızı ve esnekliği JavaScript'in yolundaki her şeyi yutmaya devam etmesine yardımcı olacak mı?

Java'nın kazandığı yer: Kaya gibi sağlam temel

Geliştiricilerin güldüğünü duyabiliyorum. Hatta bazıları kalp yetmezliğinden ölüyor olabilir. Evet, Java'nın hataları ve hataları var, ancak nispeten konuşursak, Cebelitarık Kayası. Node.js'deki aynı inanç uzun yıllar geride kaldı. Aslında, JavaScript ekibinin neredeyse Sun / Oracle'ın Java Sanal Makinesi'ni test etmek için geliştirdiği kadar çok sayıda regresyon testi yazması on yıllar alabilir. Bir JVM'yi başlattığınızda, kurumsal sunucuya hakim olmaya kararlı sağlam bir küratörden 20 yıllık deneyim elde edersiniz. 

JavaScript dünyası hızla yetişiyor. Web'in tamamının çoğu JavaScript yürütme motoruna bağlı olduğunda, milyonlarca geliştirici saati tüm kenarları parlatmaya harcanır. Ancak tüm inovasyonun bir dezavantajı var çünkü yeni özellikler, geliştirici tabanının onları emebileceğinden daha hızlı çoğalıyor olabilir. Eski okul geliştiricilerin genellikle daha yeni ECMAScript sözdizimi geliştirmeleriyle doldurulan kodla kafası karışır ve bu aynı yeni kod, bazı eski tarayıcıları sessizce çökertir. CoffeeScript ve JSX gibi yenilikçi ön işlemcilerin sonsuz kaynağı, bu özellikleri isteyen geliştiriciler için harika olabilir, ancak geri kalanımızın rastgele bir dosya açıp onu hemen anlamasını zorlaştırıyorlar.

Java, yeni özelliklerden ve seçeneklerden payına sahiptir, ancak çoğunlukla kararlı bir platformdur. Bu, kalıcı bir şeyler inşa eden geliştiriciler için hayatı çok daha kolaylaştırır.

Node.js'nin kazandığı yer: Ubiquity

Node.js sayesinde JavaScript, sunucuda ve tarayıcıda bir ev bulur. Biri için yazdığınız kod, büyük olasılıkla her ikisinde de aynı şekilde çalışacaktır. Hayatta hiçbir şey garanti edilmez, ancak bu bilgisayar işinde olduğu kadar yakındır. İstemci / sunucu bölmesinin her iki tarafı için JavaScript'e bağlı kalmak, Java'da ve tekrar JavaScript'te bir şeyler yazmaktan çok daha kolaydır; Java'da yazdığınız iş mantığını tarayıcıya sunucu. Ya da belki patron, tarayıcı için oluşturduğunuz mantığın sunucuya taşınmasında ısrar eder. Her iki yönde de Node.js ve JavaScript, kodu taşımayı çok daha kolay hale getirir.

Düğümün bu dünyadaki liderliği yalnızca genişliyor gibi görünüyor. React gibi en gelişmiş web çerçeveleri, kodun sunucuda mı yoksa istemcide mi çalıştırılacağına son saniyede karar verecektir. Bir gün istemcide çalışacak ve başka bir gün sunucuda çalışacaktır. Bazı akıllı mantık, kararı anında yük veya yedek RAM veya başka bir şeye göre verir. Bazı çerçeveler, JavaScript'i yürütüldüğü bir sorgu olarak veritabanına gönderir. Kodunuz herhangi bir yerde çalışıyor olabilir ve eve bir kartpostal göndermediği için devam etmesi zorlaşıyor. Sadece mutlu ol çünkü detayları düşünmek zorunda değilsin.

Java'nın kazandığı yer: Daha iyi IDE'ler

Java geliştiricileri, hata ayıklayıcılar, kod çözücüler ve sunucularla iyi entegre edilmiş üç birinci sınıf araç olan Eclipse, NetBeans veya IntelliJ'e sahiptir. Her birinin yıllarca süren geliştirme, özel kullanıcılar ve eklentilerle dolu sağlam ekosistemleri vardır.

Bu arada, çoğu Node.js geliştiricisi komut satırına sözcükler yazar ve favori metin düzenleyicisine kodlar. Evet, Atom gibi en iyi metin editörlerinden bazıları neredeyse her şeyi yapan ayrıntılı eklenti koleksiyonlarına sahiptir, ancak o zaman bile Node.js Eclipse'den daha eski bir okul gibi geliyor. Yakında faremizi bir Atari sevinç çubuğuyla değiştireceğiz.

Bazı geliştiriciler Eclipse veya Visual Studio kullanıyor ve her ikisi de Node.js'yi destekliyor. Elbette, Node.js'ye olan ilginin artması, IBM'in Node-RED gibi bazılarının ilgi çekici yaklaşımlar sunduğu gibi, ancak Eclipse veya IntelliJ kadar eksiksiz veya baskın olmaktan hâlâ çok uzak olan yeni araçların geldiği anlamına geliyor.

Garip olan şey, geliştiricilerin bu araçları kullanmadığı görülüyor. Komut satırının 35 yıl önce Mac'in gelişiyle ortadan kalkması gerekiyordu, ancak kimse Node.js geliştiricilerine söylemedi. Seçenekler orada. Örneğin WebStorm, birçok komut satırı oluşturma aracını içeren JetBrains'in sağlam bir ticari aracıdır.

Elbette, kodu düzenleyen ve hokkabazlık yapan bir IDE arıyorsanız, Node.js'yi destekleyen yeni araçlar yeterince iyidir. Ancak IDE'nizden, bir kalp cerrahının bir sandığı dilimleri açması gibi çalışan kaynak kodu üzerinde çalışırken düzenleme yapmanıza izin vermesini isterseniz Java araçları çok daha güçlüdür. Hepsi orada ve hepsi yerel.

Node.js'nin kazandığı yer: Veritabanı sorguları

CouchDB ve MongoDB gibi bazı yeni veritabanları için sorgular JavaScript'te yazılır. Node.js ile veritabanına yapılan bir çağrının karıştırılması, sözdizimi farklılıklarını hatırlama ihtiyacı bir yana, vites değiştirme gerektirmez. 

Bu arada, birçok Java geliştiricisi SQL kullanıyor. Java geliştiricileri için Java ile yazılmış bir veritabanı olan eski adıyla Derby olan Java DB'yi kullandıklarında bile sorgularını SQL'de yazarlar. Basitçe Java yöntemlerini çağıracaklarını düşünürdünüz, ama yanılıyorsunuz. Veritabanı kodunuzu SQL'de yazmanız ve ardından Derby'nin SQL'i ayrıştırmasına izin vermeniz gerekir. SQL güzel bir dildir, ancak Java'dan tamamen farklıdır ve birçok geliştirme ekibinin SQL ve Java yazmak için farklı kişilere ihtiyacı vardır.

Sorunları daha da kötüleştirmek için, birçok Java kodlayıcı, SQL sorgusundaki verileri sırf şablonlara yeniden biçimlendirebilmek için Java nesnelerine dönüştürmek için ayrıntılı kitaplıklar ve şemalar kullanır. Bu çılgınca bir süreç ve nihayetinde oldukça savurgan.

Java'nın kazandığı yer: Türler 

Programlamaya giriş derslerinin çoğu Java'yı kullanmaya devam ediyor çünkü birçok ciddi programcı hem basitlik hem de güvenlik için statik olarak yazılmış kodu sevme eğilimindedir. Derleyici bariz hataları yakaladıktan sonra kod daha sıkı hissedilir.

Bununla birlikte, JavaScript yetişiyor ve bazı geliştiriciler, tarayıcınızın JavaScript yığınında çalışan bir şeyi ortaya çıkarmadan önce tüm yazım denetimi sihrini uygulayan statik olarak yazılmış bir JavaScript üst kümesi olan TypeScript'e geçiyor. Türleri seviyorsanız, JavaScript'i benimsemeniz için bu yeterli olabilir. Ya da taklitin, en başından beri statik yazmayı benimseyen Java ile en samimi övgü ve sopa biçimi olduğunu fark edebilirsiniz.

Node.js'nin kazandığı yer: Sözdizimsel esneklik

JavaScript, istenmeyen uyarı kutularını açmak ve form girişini iki kez kontrol etmek için kullanılan basit bir dildi. Daha sonra geliştirici topluluğu, tarayıcı için bir şeye dönüştürülebilecek birçok farklı dil sürümü oluşturdu. Daha temiz bir noktalama işaretini tatmin etmek için tasarlanmış bir dizi farklı sözdizimi sunan CoffeeScript kalabalığı var. Daha temiz olduğu için HTML ve JavaScript'i karıştıran bir React / Vue topluluğu var. Yazı severler için TypeScript ve işlevsel dil adanmışları için LiveScript var.

Java dünyasında da muazzam miktarda yaratıcılık bulacaksınız, ancak bazı nedenlerden dolayı birçok ön işlemciyle ifade edilmiyor. JVM için bayt koduna dönüştürülen Kotlin, Scala ve Clojure gibi bir dizi dil var, ancak bir şekilde ayrı diller olarak ayrı duracak kadar farklı hissediyorlar. Tüm önişlemciler, kodlarını formüle etmenin veya noktalamanın farklı yollarını seven JavaScript programcıları için hayatı daha eğlenceli hale getiriyor.

Java'nın kazandığı yer: Basit derleme süreci 

Ant ve Maven gibi karmaşık derleme araçları, Java programlamasında devrim yarattı. Ancak tek bir sorun var. Belirtimi, programlama mantığını desteklemek için tasarlanmamış bir veri biçimi olan XML biçiminde yazarsınız. Elbette, iç içe geçmiş etiketlerle dallanmayı ifade etmek nispeten kolaydır, ancak vitesleri yalnızca bir şey oluşturmak için Java'dan XML'e geçirmenin can sıkıcı bir yanı vardır. JavaScript ile vites değiştirmek yok. 

Node.js eskiden daha basit yapıya sahipti. Yalnızca kodu düzenler ve ardından "çalıştır" düğmesine basarsınız. Bu daha sonra. Düğüm geliştiricileri süreci "iyileştirdikçe", en sevdiğiniz JavaScript alt dizinini alıp çalıştırılabilir bir şeye dönüştüren ön işlemciler eklediler. Ardından Düğüm paketi yöneticisinin doğru kitaplığı bulması gerekir. Çoğu zaman bu işe yarıyor, ancak bazen işe yaramıyor ve sonra kendinizi ayrı bir adımda inşa ettiğiniz bir yapının doğru sürüm numarasını aramak için zaman harcıyorsunuz. Artefakt havuzunda bir hata yaparsanız, o sürüm numarası çekilir ve kilometre sayacı çarklarını tekrar çevirmeniz gerekir.

Java ayrıca Node.js yöntemine oldukça benzeyen karmaşık bir derleme sürecine sahiptir, ancak daha karmaşık hale gelmiş gibi hissettirmez. Her nasılsa Maven ve Ant artık Java vakfının bir parçası gibi görünüyor. Pürüzlü kenarların çoğu çoktan gitti ve yapılar daha sık çalışıyor. Oluşturma güçlüğünün mutlak bir ölçüsü varsa, iki dil benzer olabilir, ancak JavaScript karmaşıklığının hızlı patlaması Java'nın kazandığı anlamına gelir.

İlgili video: Node.js ipuçları ve püf noktaları

Bu açıklayıcı videoda, Düğüm geliştirme deneyiminizi iyileştirebilecek birkaç teknik öğrenin.

Node.js'nin kazandığı yer: JSON

Veritabanları yanıt verdiğinde, Java, sonuçları Java nesnelerine dönüştürmek için ayrıntılı uzunluklara gider. Geliştiriciler POJO eşlemeleri, Hazırda Bekletme ve diğer araçlar hakkında saatlerce tartışacaklar. Bunları yapılandırmak saatler hatta günler sürebilir. Sonunda, Java kodu, tüm dönüştürmeden sonra Java nesnelerini alır. Konfigürasyon söz konusu olduğunda, Java dünyası hala XML'e tutunuyor ve hatta geliştiricilere endişelenmeleri için daha fazla neden vermek için iki ana ayrıştırıcı sunuyor.

Günümüzde birçok web hizmeti ve veritabanı, JavaScript'in doğal bir parçası olan JSON'da veri döndürüyor. JSON artık o kadar yaygın ve kullanışlıdır ki birçok Java geliştiricisi formatı kullanır ve bir dizi iyi JSON ayrıştırıcısı Java kitaplıkları olarak da mevcuttur. Ancak JSON, JavaScript'in temelinin bir parçasıdır. Kitaplıklara ihtiyacınız yok. Hepsi orada ve gitmeye hazır.

Java'nın kazandığı yer: Uzaktan hata ayıklama

Java, makine kümelerini izlemek için inanılmaz araçlara sahiptir. JVM'de derin kancalar ve darboğazları ve arızaları belirlemeye yardımcı olacak ayrıntılı profil oluşturma araçları vardır. Java kurumsal yığını, gezegendeki en gelişmiş sunuculardan bazılarını çalıştırır ve bu sunucuları kullanan şirketler telemetride en iyisini talep etmişlerdir. Tüm bu izleme ve hata ayıklama araçları oldukça olgun ve sizin dağıtmanız için hazır.

Node.js'nin kazandığı yer: Masaüstü

Orada çalışan bazı Java uygulamaları olabilir ve çalıştırmak için tıklayabileceğim bazı Java JAR dosyalarını tutuyorum, ancak çoğu zaman masaüstü dünyası büyük ölçüde Java içermez. Öte yandan JavaScript, tarayıcı masaüstümüzün rollerinin çoğunu yerken, eylemi giderek daha fazla yakalamaya devam ediyor. Microsoft, Office'i tarayıcıda çalışması için yeniden yazdığında, kalıp döküldü. Hala merak ediyorsanız, Electron gibi web kodunuzu alan ve bağımsız bir masaüstü uygulamasına dönüştüren ilginç seçenekler var.

Java'nın kazandığı yer: El bilgisayarları

Android uygulamaları genellikle Java ile yazılır ve yeni telefonların yüzde 90'ı Android'in bazı sürümlerini çalıştırır. Telefonlar her şey için yeterince iyi olduğu için birçok insan artık masaüstü bilgisayar bile kullanmıyor.

Elbette biraz kafa karışıklığı var. Birçok geliştirici, hem iPhone hem de Android'lerde mobil tarayıcıları hedefleyen Node.js web uygulamaları yazmaktadır. Bu iyi yapılırsa, performans genellikle yeterince iyidir.