最近幾天在部落格園出現了幾篇關於《.NET和Java之爭》的文章,事情的起因來源於一篇年後離職跳槽指南公眾號,文章裡面提到
.NET在程式開發中就屬於門檻比較低的一類。個中原因我想大家都懂的,就不在這裡贅述了。做.NET不需要你科班出身,或許一點興趣再加上一點時間,或許一個類似某馬的培訓,都可以讓你開始從事.NET開發了。你可以不懂指標、不懂資料結構、不懂演演算法、不懂彙編、不懂很多東西,但照樣可以做出一個.NET程式來。而這些人往往又是對薪資的要求沒那麼高的,這樣無形中就拉低了.NET程式員的“身價”。.NET的易學易會,很大程度上是由於它的封裝性比較好。底層的東西都遮蔽掉了,你只要知道學習一下名稱空間,然後尋找相關的API去呼叫就好了。
然後“廣州.NET俱樂部” 葉主席寫了第一篇《.NET和Java之爭》,說實話這篇文章裡面沒有一點技術性對比,提出的論點也模稜兩可,所以有了後面的兩篇反駁文章《.NET和Java之爭》 讀後感、雖然不抱希望但也願.Net和Java之爭暫得平息
三篇文章各自給出了作者自己的觀點,但都沒有客觀的分析.NET和Java之爭 爭的到底是什麼。由於筆者本人同時在用.NET,Java,Go,所以這篇文章將從.NET ,Java以及最近流行的Go技術本身和生態進行對比。
首先,我們來看看三個語言/平臺都可以做什麼以及各自的優勢。
.NET / .NET Core
- WPF/Winfrom/UWP技術進行Windows桌面開發
- ASP.NET/ASP.NET Core/WCF技術進行Web業務層開發
- Unity3D使用C#進行遊戲客戶端開發
- Xamarin進行跨平臺App開發,但面臨React Native和Flutter的激烈競爭
- Blazor WebAssembly前端開發
- ML.NET 機器學習應用開發
- … 其他未列舉
Java/JVM系語言
- Spring boot/Cloud / Dubbo進行Web分散式應用開發
- 分散式系統中介軟體,如RocketMQ、Kafka、ZooKeeper
- 分散式儲存中介軟體,如ElasticSearch、HBase、Cassandra
- 大資料引擎,Spark、Flink
- Android App開發
- TeaVM WebAssembly前端開發
- 機器學習應用和基於大資料引擎的機器學習開發
- … 其他未列舉
Go
- Beego/Echo Web應用開發
- 高效能網路中介軟體開發,如螞蟻金服用於替換Istio中Envoy的MOSN
- 分散式儲存中介軟體,如InfluxDb、TiDB的Sql層
- 容器、編排工具和雲原生基礎設施中介軟體,如Docker,Kubernetes、ETCD、Prometheus
- … 其他未列舉
綜上,我們可以看到.NET/.NET Core在桌面開發和遊戲客戶端開發具有優勢,Java系在中介軟體和大資料方向有無法追趕的優勢,go在雲原生基礎設施生態上有得天獨厚的優勢。
而在Web應用層,雖然三個平臺都可以進行業務開發,但spring boot/cloud/dubbo長期積累的生態元件和同一個平臺的中介軟體加成,使用java在分散式應用開發上稍勝一籌。有人會說Java中介軟體我們.NET也可以用,但是大部分java團隊開發的中介軟體優先支援的還是java sdk,.NET /.NET Core的sdk只能等開源愛好者去開發或者提一個不知道要等到什麼時候的issue去等中介軟體開發團隊來支援。
語言層面
毫無疑問,C#在語言特性上走在java、go的前面,linq、精細的記憶體管理、和native互動、非同步支援是C#的優勢。如今.NET Core已經開源5年,各大雲廠商也在加強對.NET Core的支援,如何擴大C#本身的優勢,進而形成生態優勢,是每一個C#使用者都應該思考的問題。
最後,NCC(.NET Core Community)從.NET Core開源之初就致力於.NET Core生態建設,如果你有時間精力,想一起來發展.NET Core社群生態,想一起來玩開源,有任何想法 歡迎聯絡我們。
原文地址:https://www.cnblogs.com/liuhaoyang/p/10357198.html