这个话题有点自黑的意思,我从.NET 1.1开始玩.NET,到现在已经11年了,我是看着.NET成长起来,在中国壮大的,也见证了近几年.NET被各种嫌弃,其实说到底还是中国的架构师太少,我是说真正懂行的架构师,一个资深的架构师是不会直接攻击一门语言或者嫌弃一门语言的,而是会从操作系统、服务器应用容器层面是分析性能、实现成本以及有多少坑。
我其实和很多客户、IT经理、高级软件工程师、架构师聊过,所以对事实有一定的了解。首先呢在中国技术圈氛围就是很浮躁的,浮躁到什么程度,还是中国人的老毛病,喜欢跟风、喜欢一窝蜂,人家用node.js,我们就用node.js;人家用docker,我们也用docker;人家用CloudFoundry,我们也用CloudFoundry,总之人家的东西比我们家先进,所以我们一定要跟上。拿docker来说,其实很多传统企业根本没有用,也就是几家互联网大厂对它情有独钟;Node.js我承认它性能好,但毕竟是弱语言编程,其实代码的维护成本并不低,而且你需要雇佣很资深的Javascript开发人员,薪水自然是水涨船高。其实很多所谓的架构师、IT经理考虑的不是迁移成本、运维成本,而是怎么找点事做,这样才能体现出自己的价值,我总结为四个字“无中生有”。
.NET中的C#语言(我的最爱)其实从1.0发展到6.0,目前已经非常成熟了,特别是语言层面的异步编程支持,已经部分超越了Java,那为什么还是没有公司愿意选它呢?从我的角度看,有几方面的原因。
首先微软的IDE实在是太好用了,好用到基本上找个应届生,就算不懂编程,1-2天内也能写个控制台程序,当然是简单的;但如果是Eclipse,配环境也要好一会儿,但这意味着什么知道吗?门槛!人的门槛!越好用的东西聚集的人相对越Low,当然并不是说用.NET的人烂,而是说平均而言,真正懂.NET的开发人员相对于懂Java的开发人员要少,因为人家的IDE用起来各种不舒服,还不如用Notepad++和Java.exe做编译。这就导致了Java的工程师很多时候必须知其然知其所以然,否则它没法干活,比如jar打包。但很多.NET的程序员估计连怎么用命令行编译程序都不会,这就是问题。
其次一些号称懂.NET的架构师觉得.NET简单,所以他们不愿意给.NET开发高工资,这也间接导致了很多.NET开发人员开始转向其他语言,其实这种模式就是个恶性循环。到最后的结果就是,大量潜在的优秀开发人员放弃.NET,毕竟现在是向钱看的年代。.NET从我的角度看是非常适合做后端,这么多年技术的积淀使得.NET得到了社区广泛认可,其实在国外懂.NET还是很吃香的,根本不愁找不到工作,所以国内一些公司的逻辑我觉得很奇怪,甚至觉得神奇,反正我就是不招.NET工程师,我公司比较高大上,所以只有高达上的Java、Node.js 才能配得上我司,我只能说,不作不死。
再者,.NET可以抄的现成架构并不多,而真正懂.NET的资深架构师在中国基本属于稀有物种,因为这些公司的所谓架构师水平有限,他们自己用.NET写不出好的架构代码(我通常喜欢叫他们集成师,即不会写代码或者写不好代码的架构师),最终还是选Java,因为Java有一大堆架构可以抄,而且很多是开源的,就算不会也至少能抄个4-5成吧。当然咯,从项目风险可控角度这是可以接受的,但其实资深架构师是可以解决这些问题的,在国外很多架构牛人基本都是自己写框架的,这也就能解释为什么优秀且流行的框架基本上都是洋人写的,比如Java的Structs、Spring framework, .NET的Orchard、DNN、ASP.NET Biolerplate等。
最后,微软作为.NET亲爹自然难辞其咎,自从纳总上台后,更是拼命推行拥抱开源政策,拥抱了一堆非.NET系语言,尽管推出了跨平台.NET即.NET Core,但在.NET市场布局和推广方面与过去并没有什么明显不同,说白了就是表现对.NET份额出无所谓的态度。不过微软一直是行业中比较傲娇的公司,它觉得只要自己想推什么肯定能成功,所以对市场份额从来表现的不太看重,他觉得根本不需要在意,迟早是微软的。然并卵,微软手机的失败让微软感受到了自己能力的有限,最近貌似在调整策略,其实回过头来看代价非常高,单收购诺基亚就花了85亿,我只能赞叹微软真土豪,有钱任性,呵呵。
我必须承认近2年.NET的中国市场份额在不断下降,很大程度上与.NET的市场推广策略有关,给行业内一种中低端编程语言的假象,在语言推广初期,这种策略没有什么错误,便于用户上手和接受,但是如今都10年了,重新树立.NET高大上技术的形象非常必要。
有人可能要说我属于老王卖瓜自卖自夸了,我举几个真实的.NET案例你就懂了,沪牌拍牌系统后台是.NET写的,并发至少几千每秒,这个大家懂的;Stackoverflow核心是.NET写的,网站并发 3000每秒,数据库并发 8000每秒;摩根斯坦利交易客户端以及协议是.NET写的;NASDAQ的交易系统是.NET写的,后台跑的SQL Server;腾讯有大量后台系统用.NET写,腾讯甚至已经使用跨平台.NET(Mono)很多年,部署于它的TLinux系统集群中;携程有大量系统用.NET写成,日均动态PV是3千万。