这个话题有点自黑的意思,我从.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、http://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 千万。
事实胜于雄辩,我就不多说了,你们懂的。