最近几天在博客园出现了几篇关于《.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社区生态,想一起来玩开源,有任何想法 欢迎联系我们。