
我們從語(yǔ)言特性、開(kāi)發(fā)效率和成本因素三個(gè)方面比較Java與作為后來(lái)者的Node。
1.語(yǔ)言特性
JavaScript作為Node上運行的語(yǔ)言,和Java相比,優(yōu)缺點(diǎn)很明顯。JavaScript 語(yǔ)法簡(jiǎn)單,很容易編寫(xiě)基于事件的驅動(dòng)的實(shí)現,但是JavaScript 基于面向對象的描述能力偏弱,不像Java是真正的面向對象語(yǔ)言,同時(shí)JavaScript對數據類(lèi)型的定義也比較單一,要么是數值類(lèi)型要么是字符類(lèi)型。很明顯,Java 更擅長(cháng)構建復雜邏輯的大型應用程序。在語(yǔ)言運行效率上,JavaScript 原本是解釋執行,Java是編譯執行,但由于Node做了優(yōu)化,所以?xún)烧哌\行效率差別不大。
2.開(kāi)發(fā)效率
開(kāi)發(fā)效率可以從語(yǔ)言的復雜度、程序員培養、開(kāi)發(fā)工具包的豐富性以及編碼效率幾個(gè)方面比較。
●語(yǔ)言的復雜度。從開(kāi)發(fā)角度來(lái)看,Java和JavaScript都不需要關(guān)心內存的管理,都是基于虛擬機來(lái)管理內存;從并發(fā)角度來(lái)看, JavaScript是基于事件觸發(fā)的,而Java是基于線(xiàn)程的,因此JavaScript更占優(yōu)勢;此外,JavaScript是無(wú)阻塞IO的,在I/O效率上比Java有優(yōu)勢(盡管Java8也將更好地支持異步I/O)。
●程序員培養。目前Java 語(yǔ)言仍然是僅次于C語(yǔ)言的第二大編程語(yǔ)言,而JavaScript排在第10位,Java 程序員隊伍要比JavaScript大很多,很顯然招聘Java程序員要比招聘JavaScript程序員更容易。
●開(kāi)發(fā)工具包。很多時(shí)候-個(gè)語(yǔ)言的開(kāi)發(fā)效率要看這個(gè)語(yǔ)言的支持工具包和組件的豐富性,Java 經(jīng)過(guò)這么多年的發(fā)展,工具類(lèi)庫已經(jīng)非常豐富,幾乎任何你想要的工具類(lèi)庫都能在網(wǎng)上找到。JavaScript 雖然也發(fā)展了很長(cháng)時(shí)間,但是基于JavaScript的工具類(lèi)庫主要集中在前端,能夠直接用于Node的仍然很少。當然Node的社區非?;钴S,可以預見(jiàn)Node的工具類(lèi)庫增長(cháng)也會(huì )非常迅速。但是要達到Java的規模尚需時(shí)日。
●編碼效率。Java 語(yǔ)言的運行基于JVM,但是Java的部署效率稍差; JavaScript使測試更加簡(jiǎn)單,但是debug機制仍然不完善。
3.成本因素
前面主要是從技術(shù)角度考慮,但是如果要從成熟的Java體系遷移到Node,成本也是一個(gè)重要的考慮因素。
首先是學(xué)習成本。如果公司大部分是Java程序員,現在要遷住Node,很明顯這個(gè)學(xué)習成本會(huì )非常巨大,即使這個(gè)遷移是漸進(jìn)式的,長(cháng)期來(lái)看仍然是要將一部分Java程序員替換成 Javascript程序員。先不管程序員是公司內部培養的還是從外部招聘的我們都可以算一下公司招聘一名程序員的成本有多大:一名普通工程師的年薪假定為10萬(wàn)元,獵頭費一般是年薪的20%以上,也就是2萬(wàn)元、再加上一個(gè)月的實(shí)習成本1萬(wàn)元,加在一起約3萬(wàn)元。這對于有1萬(wàn)名以上開(kāi)發(fā)人員的大公司而言,人力成本可想而知。如果招聘應屆生,由于應屆生的培養周期更長(cháng),學(xué)習成本會(huì )更高。
其次是環(huán)境成本。公司的基礎服務(wù)產(chǎn)品如中間件是基于Java開(kāi)發(fā)的,如果要替換成 Javascript,必然要再另外開(kāi)發(fā),還得開(kāi)發(fā)配套的運維工具等,這個(gè)成本也可想而知。最后是維護成本。Java和 Javascript i都是基于容器運行的,和V8引擘相比,程序員顯然對JVM更熟悉。另外,從排查問(wèn)題的難易程度來(lái)看,針對JM的工具顯然更完善。
4.人的因素
對于一家成熟的公司而言,假如現有的Web系統都改用Node實(shí)現、必然會(huì )有很多Java工程師要從事Node的開(kāi)發(fā),因為已有的前端工程師人數肯定支撐不了現有業(yè)務(wù)的發(fā)展。我們假定一部分Java工程師愿意學(xué)習 Javascript并成為全棧工程師,那么他們是否也愿意用兩種不同的語(yǔ)言完成同一個(gè)任務(wù)呢?正常來(lái)說(shuō),如果能用同一個(gè)任務(wù)分成神不同的方式來(lái)完成的必要性就會(huì )大打折扣。所以從這些角度來(lái)看,要讓一家很成熟的公司切換語(yǔ)言是非常困難的。
盡管替換技術(shù)棧很困難,但是無(wú)論如何都應該統一技術(shù)棧,尤其是主流的網(wǎng)站建設業(yè)務(wù)開(kāi)發(fā),更應該使用統一的技術(shù)棧這就像秦始皇統一語(yǔ)言一樣所帶來(lái)的好處顯而易見(jiàn)。
本文地址:http://www.havencoinwallet.com//article/4463.html