C#为什么不流行?
说到底这个锅该鲍尔默来背,他差点都把比尔盖茨一手打下的微软江山给败光了,更别说一个C#了。C#能做的JAVA基本都能做,JAVA不能做的有其他语言比C#做得更好,然后你的开源和跨平台还姗姗来迟,C#拿什么跟JAVA斗?
行业有个笑话,.NET最厉害的地方是跨平台,但是.NET最大的笑话也是跨平台。除了C++之外,能在.NET上运行的编程语言,是唯一一个能做到在所有平台上都能运行的编程语言,能把桌面MacOS、Linux、Windows,移动Android、iOS、WP(假设这玩意儿还在)全部跨完。不过遗憾的是,理想与现实总是残酷的,理论上是可以跨平台的,不过遗憾的是这么多年了微软一直都没跨出去。
这些年C#过得其实还挺憋屈的,前面的C/C++、JAVA交替做老大,两个老前辈C、C++时而来个青春走一回、容光焕发的,PHP、Python也是时常爆发,Go语言这个年轻人也是越来越强大,都实现自举了,可是C#呢打不过老年人,也打不过年轻人,其实还蛮惨的。
C#也不是一无是处
Windows应用程序,现在很多都是C#开发的,MSDN、SQL Server Management Studio、Bing的很多服务,也都是用C#开发的,现在office 365、Windows、Visual Studio也用了一些C#开发,C#现在还是Unity开发游戏的主要脚本语言。
微软自己的产品用C#自然是无可厚非,还有很多非微软网站也是用C#开发的。程序员问答网站StackOverflow、国内著名的技术博客网站博客园、国内程序员社区CSDN、开源中国,都是用C#开发的。以前当当、京东的核心技术栈也都是C#,不过后来才转向了JAVA技术栈。
C#其实能做的事情还蛮多的,Windows桌面应用开发,Web应用,也可以用来做移动开发,不过做得都比较差强人意。做桌面开发弄不过C++、现在甚至连Electron都弄不过了,除了一些B端应用,大家基本都不会选C#,Web应用方面弄不过JAVA和PHP,移动方面弄不过JAVA和swift,然后大企业也都有自己的技术栈,可是这些技术栈都跟C#无关。
C#、.NET,以及ASP.NET的关系,C#错过第一波红利
.NET是一个平台,本身实现的方式当然也是各种各样的库,理论上各种各样的编程语言都可以编译成其IL,然后在这个平台上运行,当然这个平台上面的编程语言很多,C#毫无疑问是这里面最重要的一个。ASP.NET是.NET主要用来做web开发的技术方案,当然这里面主要也是C#作为核心。
JAVA在96年面世,C#则是在2000年面世,JAVA的先发优势并没有那么明显,可是JAVA开源、免费的特点,让JAVA迅速攻城拔寨。C#有个好父亲、还是含着金钥匙长大的,C#的创造者安德斯·海尔斯伯格是Turbo Pascal编译器、Delphi的作者,在设计C#之前,已经是计算机工业界最伟大的科学家之一,后来又设计了TypeScript,打造了整个.NET体系。
C#语言设计本身在很多方面都是要超过JAVA的,可是吧微软早期的策略一直比较保守,不愿意跨平台,也不愿意开源,尽管安德斯·海尔斯伯格一直在努力推动这件事情,保守的鲍尔默领导下的微软错过了C#最好的几年,可是在这期间JAVA等编程语言不断攻城拔寨,C#终于还是输掉了未来。
C#输掉了移动互联网,大数据、云计算、AI也全都错过了
编程语言总得要抓住几个机会才能发展得更好,C#除了抓住了Windows,其余全都没有抓住,也许这就是命,当然跟微软自己作也有很大的关系。
你看Android爆发的时候选择了开源的JAVA,尽管现在Google因为这事儿天天被Oracle恶心;iOS自然不用说,人家先是objective-C、接着是swift,这个微软没办法;到了大数据时代,JAVA和Python又大发威风;云计算来了吧,你看Go语言又逐渐爆发了,越来越多的移动互联网企业比如字节跳动、B站也都转向了Go语言,就连Google、百度、腾讯也都在用Go语言;人工智能时代,C/C++做底层,Python用来做上层应用和算法。
你看几乎每一个重要的技术变革都跟C#无关。在大企业里面微软自己的核心技术栈都是C++,Google也是C/C++,Facebook是C和PHP,百度是C/PHP/Go,字节跳动是Python/Go,阿里巴巴是JAVA,B站是Go语言。你同样可以发现,这里面没有一家企业将C#作为核心技术栈。
C#本来可以有个很好的发展的,可惜微软自己作死,浪费了C#发展最好的几年,等到纳德拉上台之后,试图通过开源来发展C#的时候,已经来不及了。未来看微软的决心有多大,比如微软是否愿意将全功能的Visual Studio移植到MacOS平台,假设微软带着Visual Studio威力还是有点大的,不过这也可能反过来威胁到Windows的地位。