爲什麼.NET平台在技術上遠強過Java,而多數大公司卻仍採用後者?

S和M是神馬


雖然我們常說開發平臺並沒有絕對的優劣,而在於負責開發的人,但其實對於大多數人來說,其實平臺還是很重要的。所以我們接下來就總結一下各自的優勢是什麼。

Java的優勢是開源、以及跨平臺

雖然現在微軟已經把.net core整個微軟開發者生態的核心已經開源了,並且visual studio都有了macOS版本,但是總體來說,跟Java比起來,Java還是佔有極大的優勢的。


生而開源、生而跨平臺,這是C#所不能比擬的,因為開源,所以開發者願意為Java的生態做貢獻,並且也因此誕生了很多經典的Java框架,比如傳統的Spring以及Spring mvc,已及現在大紅大紫的Spring boot,這些都是C#生態所沒有的,沒法相提並論的。Java擁有更加強大的開發者生態,這一點毫無疑問。

而基於虛擬機,讓Java不經意之間擁有了幾乎所有平臺的開發者資源。不管是Windows還是macOS還是Linux,一個JVM搞定一切,一些開發到處運行這是Java的優勢。


微軟這一點做得太晚了,習慣一定養成很難改變,何況現在macOS版本的VS就是之前的xamarin studio,跟windows下原生的visual studio差距太大,誰願意用?

除此之外,在大數據、大併發領域,Java依然是絕對的首選,.net搞不定!

.net開發週期短、快速開發耗資更少

毫無疑問,.net首先擁有從設計上比Java更棒的語言C#,Java代碼臃腫的特點在C#上是沒有的,其次C#在桌面開發領域非常棒,可視化編程效率其實非常好。


除此之外,.net擁有更好的官方維護的開發者工具箱!首先是.net擁有更好的集成開發環境visual studio,不管怎麼說,VS都是這個蔚藍色星球上最好的集成開發環境。

與此同時,.net還擁有最好的開發者幫助中心,MSDN開發者網絡可能是太陽系最好的開發者官方幫助中心,沒有之一!

使用.net開發週期更短、效率更高,並且快速開發的時候是耗資更少的解決方案。

但是在大數據以及大型項目中,還是有一定的侷限性,比如京東曾經就是.net解決方案,後來逐漸將Java作為核心後臺開發語言。

其實,從C#和Java,.net生態和Java生態,從兩大生態的締造者也能看出。

安德斯海爾斯伯格更是一個更是一個比較純粹的工業生態締造者,先勾打造了Delphi和C#兩套開發體系,都是工業特點非常顯著,高效、實用、不拖沓,能非常完美的解決我需要的所有需求,幾乎沒有多餘。
而詹姆斯高斯林更像一位學者,致力於學術型研究,所以Java傾向於能做很多事情,並且分享精神很足,但是在有的地方Java總顯得囉嗦,而且有很多用起來比較難受的地方。


EmacserVimer


這個問題比較大,但重要的一點是市場的選擇。.net開發入門是比較簡單的,但技術要深入還就不簡單了。從技術上來說,.net與Java沒有高下或貴賤之分。那為什麼市場上這麼多選擇了Java,而不選擇.net作為開發或使用工具呢?從簡單的幾點來看看。

1、重要的原因是商業選擇。首先是費用,微軟的費用從不手軟。.net開發後軟件的應用成本一般比Java開發後軟件的應用成本要高。不管是硬件成本或軟件成本,作為開發公司來說省掉這些費用,更容易吸引客戶。為客戶省掉這些費用客戶當然高興。

2、開發實踐或方案多樣化及規範化。總得來說,開發成本也談不上有好大的差異,但還是有的。.net技術其實還是先進的,但開發上面的標準解決方案規範比Java欠缺,比如針對不同類型網站的構建模式,.net就比Java欠缺。Java有解決這些問題的全套框架模式。微軟也有,但快速複製就差了。

3、跨平臺。這一點估計大家都有體驗。

4、快速化反應、技術獲得。一個最重要的就是Java開源,有全世界各地的技術人員為Java做各種各樣的事情,構建了一個生態環境。需要什麼,就可以找到什麼,暫且不論拷貝複製帶來的各種問題,但起碼可以很快找到一種解決問題的途徑和方法。

5、編碼變得更簡單。這倒不是說Java比.net有什麼優劣,主要是全世界的JAVAer都可以在上面添加東西,各種框架,各種類,各種封裝等等,然後開發者就直接拿來用就可以了,結果就是隻要經過培訓機構快速培訓就可以上手當程序員了,而不是要經過幾年學習或教育的大學生才能勝任。當然,這樣也會造成軟件Bug眾生,但這給開發公司帶來了直接的經濟效益,為什麼不選擇這種模式呢?.net也可有這種模式,但還不夠。

構建一個生態是要花很長時間的,在開源還沒有構建完成時,.net還是佔據了一段時間的領導地位的。現在市場上有更多的選擇,而且有更實惠的選擇時,如何抓住用戶才是開發公司考慮的事情,而最直接的就是給用戶降低費用。


東風高揚


為什麼國內的互聯網公司都使用的是JAVA呢?

撥開迷霧看本質。

  • 阿里巴巴 1999年成立

  • 騰訊 1998年成立 。

.NET 2002年才發佈1.0版本。。你告訴我 他們有的選嗎?

有人要提出京東 是從.NET 轉的java ?

為什麼,因為那個時候 .NET 不開源沒有現成的大型電商、分佈式、集群的解決方案,而java有大把的電商和互聯網人才,註定了會選擇JAVA而不是 .NET 。

或許還有就是捨不得錢啊,畢竟 windows 服務器的授權費貴。 ~皮一下很開心。

所以 .NET 錯在於它出生的晚了,不支持跨平臺。 中國的互聯網公司一開始就沒有什麼選擇。


.NET Framework VS Java

甲骨文(Oracle)公司的Java語言和J2ee技術是.NET平臺的競爭對手之一。

說起.NET的起源,還得先說到Java。眾所周知,Java是一個主打敏捷開發,跨平臺的編程語言。而.NET的誕生,與Java有著千絲萬縷的聯繫。

Java的歷史可以追溯到20世紀90年代,最初是由Sun公司為了實現電子產品智能化而開發的程序語言,主打的設計思想是敏捷開發和跨平臺。1995年Java正式推出之後,立刻受到了包括IBM、Apple、Adobe、HP和微軟在內的各大公司的追捧。隨後幾年Java的發展勢如破竹,作為一款收費產品,Java給Sun公司帶來了非常可觀的盈利(Java已於2006年底宣佈免費開源)。而微軟作為軟件大廠,當然不願看著Java一家獨大,同時也意識到了敏捷開發的巨大前景,由此誕生了Microsoft .NET。

.NET框架作為Visual Studio的組件之一發放,自2002年全新VS .NET搭載.NET 1.0起,.NET至今已更新四個主版本,.NET 4.0於2010年隨VS2010發佈, 目前最新的 .NET Framework 版本為4.7.1。來源

.NET與Java有非常多的相似之處,二者都是即時編譯(JIT)的動態語言。這類語言中,項目編譯生成的目標文件並不是機器碼,而是需要由運行時環境進行即時編譯的特殊代碼。在Java中這種特殊代碼叫做字節碼(bytecode),而.NET中則叫做中間語言(Common Intermediate Language,簡稱IL)。Java官方的運行時環境叫做JRE(Java Runtime Environment),而.NET官方的運行時環境叫做CLR(Common Language Runtime)。

**而我要吐槽的地方就在這裡 ** 經常有很多人唱衰.NET 說BAT都不用 .NET 都是用java的。


角落的白板筆


簡單地說,有幾個原因。

1. Java出得早

2. Java夠用

3. Java開源

4. Java由以上三點衍生出來的一系列優勢

在科技行業,做得早會有天然優勢。我們回顧中外互聯網科技巨頭,大多數都是本行業最早的一批創業者裡面湧現出來的。而java比.Net早了差不多五年推出來的,這五年的時間,讓Java建立了很大的優勢。

其次就是Java也是一個很好用的語言,.Net能實現的功能,Java基本也都能實現,無非只是說實現的方式不太一樣。也就是說,Java是可以滿足使用的。儘管.Net語言的確有一些優勢,技術上也比較先進,但是Java夠用了,也就沒必要非要換成.Net了。

而Java有一個不容忽視的優勢就是,Java從一開始就是開源的。Java的好框架好思想幾乎全是開源的,包括Spring這種。因此生態建設很成功。而受限於Windows平臺的.Net在這方面吃虧不少。

除此之外,由於Java起步早,開源,所以累積的使用人數也多,採用這個平臺的企業也多。最終導致的結果就是人才儲備非常雄厚。與此同時, Java也足夠使用了,為了追求語言的技術先進性更換語言,收益不大,也無必要。而選擇開源,人才儲備足,使用人數多的Java往往也意味著更低的支出,而且不用擔心受制於微軟公司。由於.Net人才少,招人需要高薪,還不容易找到優秀人才。而微軟的平臺使用費用也是一筆不容小視的支出。對於企業來說,除非.Net有不可替代性,那就沒有必要選擇.Net而放著好用又便宜的Java不用。更何況,Java的生態建設也比.net要好得多。

想要取代老技術,老平臺,不能只是做到跟原來的平臺一樣好用就可以的。要有決定性的優勢,能做到以前的平臺和技術做不到的事情才行。或者是,功能一樣,價格具有很大的優勢。


鎂客網


其實這個問題涉及很多層面。

首先對雙方做一下比較。其實.Net和Java作為相同的高級語言,基本功能上是互通的。當然兩者有著不同的優勢方面。

1. 跨平臺。這是Java最大的優勢。Java開發的應用程序可以同時部署在Windows、Linux、Mac、以及其他的Java JRE環境支持的各種操作系統上。而這是.Net平臺最大的瓶頸。作為微軟官方的平臺,或許微軟為了推廣自家系統,限制了.Net平臺的運行環境,沒有提供除windows平臺外的Runtime環境。這直接限制了.Net發展。畢竟對於真正大規模的系統,Unix和Linux系統的大型服務器是更可靠地解決方案。於是Java成了唯一選擇。雖然現在微軟已經意識到這個問題,開始提供.net core的開源項目,積極的適配Linux系統,但是追趕者需要時間來證明自己。

2. 開源性。這是Java第二個巨大的優勢,當然也造成了一些不利影響。首先開源性,使得Java語言迅速的在全球產生了眾多基於社區的開源框架。這加速了Java的推廣。同時對於很多大型項目,提供了眾多成功案例(開源項目都是在應用中被提取的)。這使得Java的解決方案在前期被更多的認可,成為行業主流解決方案。當然,由於框架太多,使得能夠合理準確的選擇合適的框架,成為了項目架構師最頭疼的問題。也提高了Java的門檻。但同時,這也提高了Java程序員的薪金水平。Java程序員收益比較高,成為了行業現實。導致眾多新人擁入Java的懷抱。.Net平臺,由於是微軟自己的平臺,沒有那麼多的開源框架,但是由於每一個框架都是“認證過的產品”,使得產品具備微軟屬性。使用簡單,能夠進行快速開發。是的,同樣的功能,.Net能夠節省一半以上的編碼時間。但這也間接的導致了對程序員要求的降低,使得程序員收入降低,項目成本降低。導致很多人不希望成為.Net程序員。並且由於成本低,給很多企業造成,使用.Net框架是不穩定的,廉價的,低等的感覺。導致很多無知的企業高層,被開發公司忽悠採用Java開發,因為能賺到更多的錢。

3. 開發環境。這個不好評價,客觀的介紹一下。Java有自己的開發環境,免費的Eclipse,收費的JBuilder等很多第三方IDE。對於免費的Eclipse,我個人很討厭,雖然功能強大,兼容性強,但是使用麻煩,操作複雜,上手難。當然JBuilder等收費IDE還是很好用的。微軟的VS IDE就不用說了,用過的都說好。幾乎不用配置,各種智能導航,將微軟傻瓜化,上手快的理念發揮到了極致。這也是後期我主要走.Net路線的原因。

4. 時間。Java起步早,導致最早的一批程序員都是Java出身,而現在他們都成了公司的CTO或者技術主管。在選擇技術路線的時候,誰不會希望使用自己熟悉的技術呢?這也導致很多項目立項之初的技術選擇,就是Java。.Net平臺自2002年才開始推出,其實完了3~4年的樣子,這足夠一個初程走上管理崗了,是不可逾越的鴻溝。

綜合上述,導致了Java程序員比較多的現狀。

但是,我要說的是,其實對於企業來說,其實.Net是一個很好的選擇。

首先是成本。同樣的功能,.Net平臺開發成本要比Java節省30%以上,至少。然後硬件成本,windows服務器雖然穩定性與Linux與Unix服務器有差距,但這個差距正在越來越少。但是微軟的admin和linux的admin的成本差距巨大。在管理人員成本上,至少能夠省30%。然後,雖然Linux系統免費,但是企業版系統如Redhat還是收費的。當然它還是最便宜的這個我們不說了。對比Unix的IBM服務器和普通x86的windows服務器,其實windows服務器還是便宜的,比AIX服務器便宜巨多。同樣的錢,用x86組建服務器場,其實對成本控制以及後期擴展使用的靈活性更高。最後是後期運維,由於Java開源性,一直在更新,每次更新都可能會出現一些問題,同樣的問題存在與Linux,這導致後期維護的成本增大。或許你需要經常的技術支持以及技術培訓。

所以說,對於企業來說,特別是初創企業,除非你的技術路線是Liunx+PHP,這是目前最低廉的技術路線。但是不適用於中型以上企業。那麼.Net平臺性價比是最高的。即使你發展快速,5年做到幾萬人,也能夠通過逐步增加服務器擴展的方式,分攤成本。並且總成本絕對不高於JAVA。並且能省下一大筆人力成本。

然後說開發週期。現在的市場,將就時間就是機會就是金錢。同樣一個Idea,用.Net平臺你可以1個月內上線,Java就可能前後需要2~3個月的時間。當然,如果你需要技術作為宣傳的噱頭那另說。但總的來說,快速上線,那麼.Net是首選。

綜合來說,其實.Net真的是適合大多數企業的選擇。當然,目前.Net對大數據平臺的支撐不是很好,如Hadoop平臺,但是其實老外已經發現這些問題,並在逐漸轉換支持.Net開發,支持windows平臺,未來一定會有所改善。這裡筆者建議,對於初創公司,如果沒有核心技術(java系)合作伙伴,那麼果斷走.Net路線吧。


b哈里路亞d


一方面國內大公司出來的時候,.net還沒誕生或者才出現,更願意選擇技術風險小的。另一方面java的生態遠強於.net,各種開源軟件能夠幫助中小公司快速實施,但更為重要的是,基於以下幾點:

一是費用問題。java是跨平臺的,.net雖然宣稱跨平臺,但是在mono還未出來時,.net只跨windows平臺,這就造成了所有.net程序不得不運行在windows平臺上,特別是服務器方面,授權費用對中小企業來說是一筆不小的費用,為了節省成本選擇linux之類的免費平臺更為現實,而java可以運行在linux平臺上,就算重新遷移回windows也是相當容易的。

二是國內生態圈考慮。微軟的技術最大的特點是上手容易精通難,學習曲線看上去很美,但能找到技術水平很高的.net程序員很難,無形之中增加了企業開發的風險。比如一個重大的.net項目,開始有大牛帶著順風順水,但大牛辭職走人之後要再招一個.net技術大牛相對困難。而java儘管學習曲線很陡,但高水平的大牛卻有很多,招人相對風險較低。再有就是移動端微軟的崩壞,導致.net應用受阻,目前最流行的移動端操作系統為ios和android,.net短期很難在上面得到應用,就算得到應用,企業也會考慮風險和成本,同樣也會避而遠之。再加上微軟自家的wince和winphone在移動端難產,更是雪上加霜。

第三點就是目前國內高校的教育環境。it業是智力密集行業,沒有對應的人才是辦不起來的,國內高校開設課程很多具備前瞻性,例如大數據課程,ai課程等等。這些課程所用到的開發語言反向的又影響了學生對平臺的選擇。比如要學hadoop,你就不得不學java,要學tensor,你又得學python等等。大量的新銳應用和對應的語言分走了一大批人才,留下幾人學沒有炒作噱頭的.net?國內it有很大一部分帶有炒作噱頭,公司也是跟風發展,這也是沒有辦法的事,如果你只守著那些爹不疼媽不愛的平臺,連工作都成問題。而國外相反,.net開發人員和大牛還是很多的,也有建設比較好的技術圈。


小羅同學


一方面:.Net平臺收費。.Net平臺是微軟的,他有這最好的IDE和架構,但在中國互聯網行業的發展期使用.Net平臺開發是需要向微軟付費的,特別是商用。而且不僅僅是開發工具IDE要向微軟付費,服務器操作系統、數據庫等均要付費,因此中國的初創公司都沒有選用.Net平臺。

另一方面:java有很好的跨平臺性,他可以用於linux等其它操作系統,因此他也可以使用免費的數據庫mysql等,首先Linux和mysql是免費的,其次在服務器端Linux的架構比windows有先天的架構優勢和速度優勢。還有移動平臺上以前多采用Linux,現在多采用android和IOS,其中Android是完美支持Java的。

So,大多數公司愛Java!


小胖說歷史


微軟的問題是市場策略問題,老牌企業轉不過灣。還是以傳統的商業模式收版權費。誰不知時代已經變了。雖然java比.net早生了幾年,但剛開始在微軟努力下,.net的發展還是不錯的。與java差別也不是很大。微軟真正失敗的是在移動操作系統的失利,因為選擇了收費閉源,讓微軟錯失移動市場,而安卓選擇了java也直接助力java的高速超越.net。到微軟意識到問題時,市場早就是安卓與蘋果的天下。所以後面無論微軟的WP多努力,也不可能扭轉市場,因為這時安卓已經非常成熟,用戶也習慣安卓與蘋果的操作方式,WP也只是用戶的一個選擇,除非WP真的優秀到用戶非用它不可的地步。但這要多難,一個軟件生態問題就不是人力可以解決的。所以.net不是沒機會超越java只是微軟沒有把握好。我個人覺得最好的商業模式是共贏模式,java的開源模式就是一種共贏模式,共贏模式就是把大家綁在一起,利益相關。微軟的收費模式只適用於技術壟斷的情況下,從目前情況下微軟雖然有一定的技術優勢,但這遠遠還達不到技術壟斷的地步。很多人說java有很多框架.net沒有,這隻能說.net沒有,而不能說.net不可以做,你想想微軟就一家公司在搞,java有千千萬萬個公司在搞,你說怎麼比。java和.net本來就是同一和類型的技術,java可以做的事.net都可以做,反之也一樣。以目前來說.net要超越java可以說是不可能的了,除非微軟搞出了什麼顛覆世界的技術。但這個世界早已不是微軟的世界。從目前微軟的市場策略來說,我個人覺得微軟還是沒有轉變過來,我覺得到那天window所有版本都免費時,微軟才算真正醒過來。


badman42538007


該提問本來就有問題。我以前是主要做.net的,現在搞python居多。但不可否認java的生態要比.net的生態強很多,技術跟工程師的水平有關,基本上與語言無關。

大公司使用java主要是有各種現成成熟的庫,框架和架構案例,遇到的坑別人都幾乎給你填過了。二是可以部署在穩定的linux服務器上,.net以前也可以通過mongo部署在linux上,但畢竟是非官方支持,遇著問題也不好解決,效率上也得打些折扣,so,我為什麼不直接用java,還要這樣折騰一翻?雖然現在.net core出到2了,而且是原生支持誇平臺,但畢竟java系已經先入為主好久了,.net core能否翻身我不敢評價,因為我並沒有多少的使用經驗。

當然windows平臺的昂貴服務器費用也是一個採用java平臺的主要原因。

回到生態系統那問題上,一個系統幾乎或多或少地與使用其他的組件,如rabbitmq,redis,mongodb,apache等,這些成熟的組件幾乎都系天生linux系的,接口方面從來都是不可能沒有java,python而先有.net的。而且在安裝支持方面,這些東西都是非常容易安裝的,一個apt-get命令就可以了。windows下有可能遇到奇葩的錯誤。還有就是有大部分這樣的組件是java開發的,進行二次開發就肯定用回java了。

小吐槽一下.net後,再來談談.net的優勢。

再說說.net方面的,大部分人對.net的印象只停留在拖控件上,這些人大部人要麼是完全不懂.net的或者只懂個語法的,別人踩時他就跟著踩,瞎起鬨。.net最大的優勢其實在於單一平臺的完整性,微軟不僅給.net提供了語言和類庫C#和.net framework,在UI框架方面則提供了winform和wpf,工作流方面則有wf,web 框架方面和webform(現在的項目比較少用了,缺點自查),asp.net mvc和asp.net api等。數據庫和服務方面則天生偏愛sql server和windows sever了,你要的東西,微軟都給齊你了。這樣的大統一的好處是,你的學習是一氣呵成的,因為你在學習這個框架的東西,其他框架的東西也是十分類似的,無論從方法命名還是類型組件設計上,例如asp.net mvc和asp.net web api這兩個東西。

再者不是所有系統都跑著過億訂單,併發量多大多大的啊(看到有些人老拿這個說事,說.net做大型系統不行,我心裡就問,你們每次都只做開發這麼牛逼的系統?)其實絕大部分的項目都是中小型的項目,還在那裡jb地高談闊論.net這個語言帶來性能瓶頸了。能不能反省一下是不是自己水平問題呢?

手打字累不說了。。。。。


IT小技巧


·net主要缺點:

1、跨平臺性差,這個有目共睹

2、人少,找人難(做項目的親身體會)

3、閉源平臺,沒有形成像Java那麼大的生態圈

4、互聯網方面的系統、平臺用.net的很少,有些企業服務用.net,整體待遇要低。之前京東是.net的,後來也換了

不過用.net做些桌面程序還是不錯的選擇。


分享到:


相關文章: