《.NET和Java之爭》一點隨想
最近幾天在博客園出現了幾篇關於《.NET和Java之爭》的文章,事情的起因來源於一篇年後離職跳槽指南公眾號,文章裏面提到
.NET在程序開發中就屬於門檻比較低的一類。個中原因我想大家都懂的,就不在這裏贅述了。做.NET不需要你科班出身,或許一點興趣再加上一點時間,或許一個類似某馬的培訓,都可以讓你開始從事.NET開發了。你可以不懂指針、不懂數據結構、不懂算法、不懂匯編、不懂很多東西,但照樣可以做出一個.NET程序來。而這些人往往又是對薪資的要求沒那麽高的,這樣無形中就拉低了.NET程序員的“身價”。.NET的易學易會,很大程度上是由於它的封裝性比較好。底層的東西都屏蔽掉了,你只要知道學習一下命名空間,然後尋找相關的API去調用就好了。
然後葉主席寫了第一篇《.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社區生態,想一起來玩開源,有任何想法 歡迎聯系我們。
《.NET和Java之爭》一點隨想