溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

選擇Java還是.NET

發(fā)布時間:2020-05-20 16:09:46 來源:網(wǎng)絡(luò) 閱讀:1898 作者:瞿杰 欄目:編程語言

作者:Tony Qu

我雖然是個.NET程序員,也略懂Java,但本文我會盡可能的寫得中立些,這篇文章是寫給我的一位朋友看的,前兩天吃飯他問起是否要轉(zhuǎn)Java(以前他們一直是.NET),當(dāng)時呢我的觀點并不中立,我說了很多.NET的好話(當(dāng)然我是擺了不少事實的,我朋友也不是這么好忽悠的),但技術(shù)人員應(yīng)該拿數(shù)據(jù)說話不是嗎?其實這個話題是個非常老的話題,很多技術(shù)中層也回答過類似的問題,可能這些問題來自從高層、朋友或者網(wǎng)絡(luò),但我并沒有看到過一篇很中肯的帖子來分析這個問題,于是我斗膽決定給大家開個頭。

首先,引用一份Forrester Research公司的數(shù)據(jù)(雖然數(shù)據(jù)比較早),在2004年,Java在生產(chǎn)工具、電信、金融和保險領(lǐng)域比.NET強(qiáng),而.NET在制造、零售批發(fā)、媒體、商業(yè)服務(wù)和公共服務(wù)領(lǐng)域比Java強(qiáng)。報告指出那些在IT方面有高預(yù)算的公司更傾向于使用Java,而相對預(yù)算較少的則更傾向于使用.NET。但很有意思的一件事情是超過半數(shù)的受訪公司同時使用.NET和Java,要知道2004年的時候.net 2.0剛出來,就已經(jīng)有這么多公司同時用兩樣了,我覺得現(xiàn)在的情況也沒有明顯變化,比如我現(xiàn)在的公司就是兩樣都用,當(dāng)然一個團(tuán)隊通常只用一樣,只是不同的團(tuán)隊可能會用不同的語言。

接著來說說跨平臺。說到跨平臺很多人可能想都不想就說,那肯定應(yīng)該選Java,我一開始也是這么想的。其實時代在進(jìn)步,.NET的跨平臺能力正在不斷增強(qiáng),最有代表性的自然是Mono開源項目,相應(yīng)的開發(fā)工具M(jìn)onoDevelop也做的很出色。當(dāng)然Mono的使用是存在局限性的,很多Windows固有的特性是沒有辦法使用的,例如COM, Win32 API等,但同時Mono提供很多上層封裝,能夠幫助我們忽略平臺差異。就目前來看,Java在跨平臺方面肯定是占優(yōu)勢的。

接著是性能比較。說實話如果我在這里給任何一方的語言下一個結(jié)論,估計雙方的技術(shù)人員都要跳起來。性能這個問題在兩種語言之間是很難進(jìn)行比較的,理由很簡單,因為平臺不同、硬件不同、安裝的軟件也不同、使用的庫也不同,太多的不確定因素導(dǎo)致無法在完全平等的條件下比較單個項目的性能。也許某個性能問題并非語言本身造成的,而是庫函數(shù)造成的,這都是有可能的。我參考了一些評論認(rèn)為,.NET程序的啟動速度快于Java程序,這應(yīng)該是有目共睹的,看看Ecllipse和VS的啟動速度大家就明白了(雖然VS2010啟動速度確實坑爹了點,還好VS2012打了個漂亮的翻身仗)。我個人感覺Java程序的運(yùn)行速度確實不快,其實你看看很多大公司怎么玩Java的就知道了,他們拿Java做殼,內(nèi)部全部用C++寫,比如Oracle、IBM,要知道Java和C++的組合可是非常有名的。不過么回過頭來想想微軟也是如此,.NET主要做周邊的應(yīng)用,Windows核心還是C/C++的,不過最近幾年微軟也開始用.NET做很核心的東西,比如Visual Studio2010和2012就是用WPF 4.0寫的。不過這個問題,沒有結(jié)論,大家自己看著辦吧,遇到這種沒有標(biāo)準(zhǔn)的問題,適當(dāng)忽悠也是必要的,其實能反駁.NET或Java性能不好的案例都很多,具體看場景。拿我的親身經(jīng)歷來說,.NET的XML庫的性能真的不是一般的差,相對來說Java的XmlBean更勝一籌。

再接下來,我們來看一下擴(kuò)展性。這兩種平臺擴(kuò)展性都很好,上層封裝都支持最新的SOAP協(xié)議和Web service,自身還有自己的通訊協(xié)議,如Remoting和RMI。這恐怕是少數(shù)幾個大家都能達(dá)成共識的觀點,即Java和.NET擴(kuò)展性都很好。雙方陣營都有優(yōu)秀的架構(gòu)師們坐鎮(zhèn),確保了開發(fā)人員能夠從架構(gòu)層面對語言和平臺進(jìn)行擴(kuò)展。只可惜國內(nèi)現(xiàn)在.NET陣營的架構(gòu)師不太給力,導(dǎo)致很多決策層放棄選擇.NET(各位國內(nèi)的.NET架構(gòu)師聽了不要不開心哦,我只是說事實,沒有別的意思)。國外其實.NET和Java各分秋色吧,因為就語言本身的擴(kuò)展性而言實在找不出有什么明顯限制,關(guān)鍵還是看用它來干什么,還有就是架構(gòu)怎么搭建。

然后是開放性,這一點恐怕.NET要完敗于Java了,盡管近幾年微軟加大了對開源的支持力度,例如codeplex網(wǎng)站就搞得很紅火,且通過與DeveloperMedia合作給開發(fā)人員帶來了不少廣告收入,但問題還是出在微軟本身的開放性上,自家的.NET全部閉源,只有ASP.NET MVC開源。盡管Mono團(tuán)隊已經(jīng)基本上可以說成功復(fù)制了.NET,但很多東西是從盒子外分析得出的,當(dāng)然這是我的個人觀點。Java的開放性不僅體現(xiàn)在其語言開源本身,更多的是來自第三方的支持力度,大量開源項目的支持,例如Apache基金會的頂級項目,如poi.apache.org,使得更多的公司愿意使用java開發(fā),因為擴(kuò)展成本可能要比.NET低不少,不需要萬事親歷親為。

最后,我們來看一下總體擁有成本(Total Cost of Ownership)。說實話,這是個很難回答和界定的問題,因為完全沒有標(biāo)準(zhǔn),有些公司更看重雇傭成本,有些則更看重設(shè)備成本或培訓(xùn)成本。來自stackoverflow評論中的一個觀點認(rèn)為Java的初期擁有成本相對于.NET要低,因為有大量的開源項目和工具可以幫助降低開發(fā)成本。.NET的產(chǎn)品前期都需要自行開發(fā)很多基礎(chǔ)庫,因為開源項目和第三方工具相對較少,這是.NET初期擁有成本高的原因。.NET的開發(fā)速度確實比Java快很多,特別是前期出樣階段,這得益于微軟強(qiáng)大而簡單的IDE,說句不好聽的,就算不懂技術(shù)的項目經(jīng)理也能自己用VS畫個界面出來,你信嗎?雇傭成本方面,隨著C#的排名不斷上升,.NET的雇傭成本會不斷降低(其實原來就低,因為大部分使用.NET的公司不算特別有錢,除了微軟),語言排名是個風(fēng)向標(biāo),排名高的語言會得到高校的青睞,從而會有更多人才專向該語言,最典型的例子就是Pascal的排名,你看當(dāng)年學(xué)校里Pascal多流行,現(xiàn)在排名里根本看不到,高校自然也放棄了。設(shè)備成本目前來看基本差不多,畢竟是語言,不是特別依賴硬件設(shè)備的。當(dāng)然有人覺得Windows+SQL Server的組合授權(quán)費很高,這個也是不真的事實,這也是我朋友想換Java的原因之一,為了降低成本,也許你應(yīng)該考慮用NoSQL或者MySQL作為備份方案,要知道高性能方案可都不是SQL Server和Oracle這種關(guān)系數(shù)據(jù)庫搞出來的,你看看淘寶和新浪的架構(gòu)就知道了。

最后給大家娛樂娛樂,這是一段搞笑的來自Java陣營的視頻,結(jié)論么大家懂的,肯定是選Java,http://www.220.ro/funny/Microsoft-Vs-Java/Iw8nmDHL7Y/(需×××),注意2分43秒有亮點哦。

 

這篇文章只是個引子,歡迎更多的.NET和Java社區(qū)成員加入到討論中,適當(dāng)?shù)臓幷摵吞接懯潜匾?,這樣技術(shù)社區(qū)才能進(jìn)步。

參考

http://programmers.stackexchange.com/questions/20255/what-would-you-choose-for-your-project-between-net-and-java-at-this-point-in-ti

http://adtmag.com/articles/2005/05/01/theres-more-to-java-vs-net-than-technology.aspx

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI