为什么使用C#开发软件的公司和程序员都很少?

摘要:
C#与JAVA在语法和架构上非常接近。如果采用Linux+Eclipse+JAVA的开发环境,完全可以用免费的方式解决,这是C#面临严重的开发环境封闭性问题。相信随着时间的推移,C#或许能在硅谷的IT公司中拥有一席之地。

特别是在国内,

在职位搜索网站indeed,职位关键字与数量的对应关系如下(搜索时实时数据):

Java - 49624

Python - 16802

JavaScript - 25452

C ++ - 36569

C# - 14267

很显然,C#相关的职位数量是明显落后的,这是为什么呢?

C#由编程界的神级人物Anders Hejlsberg主持设计,在很多方面都比JAVA要好,毫无疑问,它是一门非常好的计算机语言。但是,一门程序语言的发展不是靠某一家公司或某几家公司就能撑起来,而是要靠主推公司的战略发展及生态的促进,C#则却恰好在这两点不占优势。

为什么使用C#开发软件的公司和程序员都很少?第1张

首先来说C#在语言的发展过程中所错失的良机。

第一,C#跨平台政策的失误

C#最初只能在Windows平台上运行,从PC互联网时代向移动互联网时代转换过程中,C#并没有像JAVA一样做出适应性的转型,以至于C#无法运行在安卓机器上。

Windows平台简单易用,对于技术人员不多的非IT类中小企业,的确是有吸引力的。但是对于硅谷的IT企业来说,技术并不是问题,他们拥有大量的专业服务器管理人员,所以硅谷的IT企业更倾向于使用免费的Linux系统,比如CentOS或者Ubuntu。

为什么使用C#开发软件的公司和程序员都很少?第2张

牵一发而动全身

免费的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#开发软件的公司和程序员都很少?第3张

换句话说,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#开发软件的公司和程序员都很少?第4张

虽然微软为了适应大数据时代的到来,提供了很多工具库供C#编程人员更好的与Hadoop平台协同工作,但不可否认JAVA的正统性和便利性使得C#的地位在大数据时代被日益边缘化。

其次我们要说,C#的封闭性也是让它失了人心的重要原因。

第一,由于C#运行环境的封闭性,导致了C#语言被限制在Windows平台。

在微软总裁纳德拉之前,微软对Linux及开源软件界采取了敌对的态度,比尔盖茨曾痛斥开源软件为病毒,自然也拒绝为Linux系统提供软件支持。同时,微软将C#与Windows系统、IIS服务器、MSSQL这些工具软件深度捆绑。如果你想用C#,则必须购买微软的系统、数据库等全家桶,这些费用和羁绊让硅谷的IT感到非常不爽,无形当中形成了一股反微软的潮流。

为什么使用C#开发软件的公司和程序员都很少?第5张

windows服务器授权费用解析

等微软意识到自己在硅谷的新兴公司中已经被边缘化,开始想与Linux等开源软件和系统合作,使C#在Linux上运行时,硅谷却早已形成了自己的开源工作软件生产氛围:完善的技术栈,社区及学习环境,换句话说硅谷基本不需要C#了。所以说,在运行环境上的封闭性导致了C#的没落。

为什么使用C#开发软件的公司和程序员都很少?第6张

第二,由于开发环境的封闭性,导致了C#语言开发成本高昂。

C#开发不仅依赖Windows系统,而且严重依赖Visual Studio开发平台,另外,由于选用了C#,数据库开发不可避免的要涉及到SQL Server数据库,最为致命的是,这些都是收费的,而且微软的产品都挺贵,IDE要收费,数据库之类的要收费,对公司而言这是一笔不小的开支,因此很多大公司会因为成本问题选择放弃C#。如果采用Linux+Eclipse+JAVA的开发环境,完全可以用免费的方式解决,这是C#面临严重的开发环境封闭性问题。

来看一下硅谷一般IT公司代表的技术栈:

为什么使用C#开发软件的公司和程序员都很少?第7张

Uber的技术栈

为什么使用C#开发软件的公司和程序员都很少?第8张

Facebook的技术栈里同样也没有C#的影子

第三,由于社区的封闭性,导致了C#的使用体验不那么美好。

目前来看,在大数据时代来临之际,随着Python开源社区的发展,JAVA开发社区的开源也愈加壮大,但是C#却依然是闭源的,在当今服务至上、体验至上的时代,闭源的思维没有及时转变,就被时代所淘汰了。

为什么使用C#开发软件的公司和程序员都很少?第9张

硅谷主要IT公司语言与框架技术栈最新排行榜:前十名里面没有C#的位置

没有公司使用,就不会有人学习,没有人学习就不会有人招聘,这是一个鸡生蛋、蛋生鸡的问题。

综上,C#是一门优秀的语言,由于发展初期错失良机而没有形成趋势、产业链及好的学习氛围,但是随着微软对开源社区的改变及合作态度,采用C#的公司数量也开始逐渐增多,特别是U3D的热潮,也许会进一步推动C#的普及。相信随着时间的推移,C#或许能在硅谷的IT公司中拥有一席之地。

免责声明:文章转载自《为什么使用C#开发软件的公司和程序员都很少?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android跨应用启动Service目标检测算法的历史及分类下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SqlServer 数据库/数据表 拆分(分布式)【转】

通过某种特定的条件,将存放在同一个数据库中的数据分散存放到多个数据库上,实现分布存储,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。提示:sqlserver 2005版本之后,可以友好的支持“表分区”。 垂直(纵向)拆分:是指按功能模块拆分,比如分为订单库、商品库、用户库......

Loadrunner原理及基准测试

性能测试基本概念 1、并发和在线的区别:并发的压力是一个瞬时压力,一般针对同一类型的业务。在线的压力是一段时间内的压力情况。 2、20用户并发的压力相当于200用户在线的压力。(1:10的比例) 写测试计划时,可以参考,比如2000用户在线,一般是200个用户并发。(并发登录、并发查询、并发删除等) 3、请求响应时间=客户端时间+网络时间+服务器时间 4、...

GSM模块_STM32实现GPRS与服务器数据传输经验总结

硬件环境 MCU:STM32F103RET6 (调试器:J-Link) GSM模块:Ai-Thinker_A6 (安信可)(还需要配一个串口打印工具,当初选这个模块纯粹是因为价格是最便宜的) ------------------------------------------------------------------------- 软件环境 Keil...

Halcon 17与 c# 混合编程

这篇主要是C#和Halcon的混合编程,在此基础上对按键不同功能的划分,以及图片适应窗口和从本地打开图片。 halcon源程序:   dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image, 'C:/Users/Administrator/Desktop/猫.jpg'...

如何完成大数据测试-从功能测试角度分析

大数据,已经成为了这个时代的代名词。当今的互联网属于大数据时代,大数据时代的到来,颠覆了以往对数据的惯性思考方式,要保证数据执行,软件质量,测试质量,数据使用场景等,都需要重新变换一个新的角度,对软件进行更全方面的思考。 今天我想从功能测试的角度,讨论大数据的功能测试要怎么做,用例怎么设计,才能覆盖面更广,更好的保证其正确性。 之前大数据很少有测试,开发会...

微信小程序获取unionid与openid

获取unionid需要先在微信开放平台绑定小程序,否则无法获取 UnionID机制说明 unionid来区分用户的唯一性,在相同微信开放平台帐号下的移动应用、网站应用、小程序、公众号,用户的unionid是唯一的。也就是说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。 OpenID机制说明 OpenId是用来区分应用的唯一性,在相同...