为什么使用C#开发软件的公司和程序员都很少?
特别是在国内,
在职位搜索网站indeed,职位关键字与数量的对应关系如下(搜索时实时数据):
Java - 49624
Python - 16802
JavaScript - 25452
C ++ - 36569
C# - 14267
很显然,C#相关的职位数量是明显落后的,这是为什么呢?
C#由编程界的神级人物Anders Hejlsberg主持设计,在很多方面都比JAVA要好,毫无疑问,它是一门非常好的计算机语言。但是,一门程序语言的发展不是靠某一家公司或某几家公司就能撑起来,而是要靠主推公司的战略发展及生态的促进,C#则却恰好在这两点不占优势。
首先来说C#在语言的发展过程中所错失的良机。
第一,C#跨平台政策的失误
C#最初只能在Windows平台上运行,从PC互联网时代向移动互联网时代转换过程中,C#并没有像JAVA一样做出适应性的转型,以至于C#无法运行在安卓机器上。
Windows平台简单易用,对于技术人员不多的非IT类中小企业,的确是有吸引力的。但是对于硅谷的IT企业来说,技术并不是问题,他们拥有大量的专业服务器管理人员,所以硅谷的IT企业更倾向于使用免费的Linux系统,比如CentOS或者Ubuntu。
牵一发而动全身
免费的Linux提供了相当完善的服务器运行环境及一整套工具链,比如Apache web服务器,Mysql/postgresSQL数据库,Memcache、Redis缓存服务器等。虽然在管理的直观性上,Linux似乎比Windows的窗口化图形化界面要落伍一点,但是性能上不相上下,甚至更加出众。所以尽管配置更加繁琐,更多的公司还是选择了Linux系统作为服务器操作环境。而C#在Linux下面基本没有用武之地,这就大大限制了C#这门语言的流行程度。
虽然后来C#迂回推出了Xamarin,还免费开源了,但是已经错失了最好的移动开发时机,就像是微软自己的WP手机操作系统没有抗衡过苹果和安卓一样,在移动开发领域C#也同样错失了移动互联网的时代。
第二,C#仿JAVA而生,大数据及人工智能方面却没能超越JAVA
C#的最大的竞争对手——JAVA,实际上算得上是C#的爸爸。JAVA诞生于1995年,它的一次编写、到处运行的概念,掀起了一场革命。而C#诞生于2000年,是微软.Net计划的一部分,是微软为了替代JAVA而研发的。
换句话说,C#是可以被替代的。C#与JAVA在语法和架构上非常接近。C#能做的,JAVA也能做。并且JAVA本身就是为跨平台设计的,比C#更具有灵活性,在Linux下面有很好的支持。在库支持方面,JAVA也要比C#好的多。在Windows上面可能会有一些不错的C#库,但是几乎无法在Linux/.Net core下面工作。
而从传统开发到大数据及人工智能开发的转换过程中,自谷歌的Hadoop出现以来,大数据的开发语言好像天然就是JAVA一般,虽然Hadoop同时提供多种语言的接口,但是由于底层JVM的框架运行,使得JAVA语言在大数据时代远超C#,而人工智能的发展及对数据处理的需求,又使得Python赶超C#,成为数据处理的神器,以至于时常要拥抱变化的程序员更多的投入JAVA和Python的怀抱。
虽然微软为了适应大数据时代的到来,提供了很多工具库供C#编程人员更好的与Hadoop平台协同工作,但不可否认JAVA的正统性和便利性使得C#的地位在大数据时代被日益边缘化。
其次我们要说,C#的封闭性也是让它失了人心的重要原因。
第一,由于C#运行环境的封闭性,导致了C#语言被限制在Windows平台。
在微软总裁纳德拉之前,微软对Linux及开源软件界采取了敌对的态度,比尔盖茨曾痛斥开源软件为病毒,自然也拒绝为Linux系统提供软件支持。同时,微软将C#与Windows系统、IIS服务器、MSSQL这些工具软件深度捆绑。如果你想用C#,则必须购买微软的系统、数据库等全家桶,这些费用和羁绊让硅谷的IT感到非常不爽,无形当中形成了一股反微软的潮流。
windows服务器授权费用解析
等微软意识到自己在硅谷的新兴公司中已经被边缘化,开始想与Linux等开源软件和系统合作,使C#在Linux上运行时,硅谷却早已形成了自己的开源工作软件生产氛围:完善的技术栈,社区及学习环境,换句话说硅谷基本不需要C#了。所以说,在运行环境上的封闭性导致了C#的没落。
第二,由于开发环境的封闭性,导致了C#语言开发成本高昂。
C#开发不仅依赖Windows系统,而且严重依赖Visual Studio开发平台,另外,由于选用了C#,数据库开发不可避免的要涉及到SQL Server数据库,最为致命的是,这些都是收费的,而且微软的产品都挺贵,IDE要收费,数据库之类的要收费,对公司而言这是一笔不小的开支,因此很多大公司会因为成本问题选择放弃C#。如果采用Linux+Eclipse+JAVA的开发环境,完全可以用免费的方式解决,这是C#面临严重的开发环境封闭性问题。
来看一下硅谷一般IT公司代表的技术栈:
Uber的技术栈
Facebook的技术栈里同样也没有C#的影子
第三,由于社区的封闭性,导致了C#的使用体验不那么美好。
目前来看,在大数据时代来临之际,随着Python开源社区的发展,JAVA开发社区的开源也愈加壮大,但是C#却依然是闭源的,在当今服务至上、体验至上的时代,闭源的思维没有及时转变,就被时代所淘汰了。
硅谷主要IT公司语言与框架技术栈最新排行榜:前十名里面没有C#的位置
没有公司使用,就不会有人学习,没有人学习就不会有人招聘,这是一个鸡生蛋、蛋生鸡的问题。
综上,C#是一门优秀的语言,由于发展初期错失良机而没有形成趋势、产业链及好的学习氛围,但是随着微软对开源社区的改变及合作态度,采用C#的公司数量也开始逐渐增多,特别是U3D的热潮,也许会进一步推动C#的普及。相信随着时间的推移,C#或许能在硅谷的IT公司中拥有一席之地。