1. 程式人生 > >《.NET和Java之爭》一點隨想

《.NET和Java之爭》一點隨想

公眾 html 原生 業務 文章 分布式系統 對比 內存 建設

最近幾天在博客園出現了幾篇關於《.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之爭》一點隨想