手记 /后端开发

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

2018.05.31 10:15 1094浏览

字号

在职位搜索网站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公司中拥有一席之地。

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

  1. 安卓开发面试书籍,每个程序员都必须掌握的8种数据结构!面试必会

    前言 本篇文章主要记录分享我的面试准备过程. 很多朋友问我为什么离职 关于离职原因,马云有一句经典的话"要么钱没给到位,要么心委屈了",想必大家耳熟能详了,我这里再细说一下我个人离 ...

  2. HR瞧不起外包公司程序员,去外包公司的程序员都是混的最差劲的

    业内的朋友都知道,很少有人会主动选择去外包公司,除非是实在找不到工作或者对方待遇很高.外包公司的员工经常会被外派到其他公司干活.福利奖金当然也会打折扣.一般人都不愿意去,何况985大学毕业的. 最近一 ...

  3. 印度的软件工业(建议程序员必读)

    本文转自hoplite的blog上的一篇文章: (转载开始) 我在工作中,接触到印度软件公司开发出来的软件: 整个体系架构非常清晰,按照我们的要求实现了全部功能,而且相当稳定.但是打开具体的代码一看, ...

  4. 常用python编程软件-学习编程语言常用的10个工具、库——每个程序员都应该知道...

    原标题:学习编程语言常用的10个工具.库--每个程序员都应该知道 每个行业都有自己的工具,软件开发也没有什么不同.一个优秀的程序员应该比其他程序员更了解他的工具,而且还可以使用比普通工具更强大和更高级 ...

  5. 软件能力[置顶] 程序员如何成为设计师,软件公司如何成为苹果?

    上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下软件能力 /**************************************************** ...

  6. 开发软件是否等于写程序?

    开发软件是否等于写程序?                                                                                         ...

  7. scala语言的底层是java实现的_2020了,每个程序员都该学习的 5 种开发语言

    我曾在某处读到过(可能在<代码大全>,但我不敢确定),程序员应该每年学习一门新的编程语言.但如果做不到,我建议,你至少学习以下 5 种开发语言,以便你在职业生涯有很好的表现. 每个公司都喜 ...

  8. 每个程序员都该学习的5种开发语言

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://dzone.com/articles/5-programming-language ...

  9. java开发有不加班的吗_8年Java开发大佬告诉你,程序员不加班就没有前途吗?

    一.有没有不加班的程序员? 有,我一个朋友就是,下面是他的经历: 我目前工作与一家500强外企(欧美),职称为高级软件开发专家.我在这家公司(500强外企)已经服务了8年,所有加班次数合起来不超过一个 ...

最新文章

  1. windows 常用thread方法
  2. 一篇文章告诉你如何成为数据科学家
  3. 使用mvn生成webapp失败,尚未找到原因
  4. MPLSOAM技术及应用
  5. win7关机快捷键_1个U盘+1款软件,电脑小白也能在家轻松重装win7系统
  6. php mysql 索引_MySQL索引
  7. Dojo实现Tabs页报错(二)
  8. 熊猫多模式站群 模型handlers流程图
  9. [渝粤教育] 西南科技大学 企业生产运作管理 在线考试复习资料2021版
  10. 译林 五年级上 单词_译林版小学英语五上Unit 4 HobbiesStory time公开课优质课件教案视频教案...
  11. 处理器仿存带宽_CPU,内存,主板带宽是怎么计算的?网上帖子说内存和主板的带宽要大于等于CPU带宽,充分利用CPU...
  12. gitee 搭建个人网站
  13. android 仿微信头像裁剪,android 模仿微信头像裁剪
  14. 《muduo网络库》学习笔记——时间轮Timeing wheel
  15. 两年数模路,一点小感触…
  16. 深度理解抽象类和接口
  17. 汉诺塔问题及时间复杂度推导
  18. 学术期刊的概念、分类,计算机类主要期刊索引和机构
  19. elementui 利用周选择器 获取周一到周五的日期 和当前周
  20. ThingsBoard中的关系Relation

热门文章

  1. CSDN的台历到了,挺好看的,放在桌子上的感觉很拉轰啊。
  2. 超参数优---贝叶斯优化及其改进(PBT优化)
  3. JQuery效果动画
  4. Python学习笔记002-安装SQL Server2016(和操作系统般配^-^)
  5. mysql学校教务系统_java servlet+mysql开发的学校官网+教务系统+图书馆系统,功能完善,供参考学习...
  6. 数字图像位移传感器在大坝安全监测运用
  7. JavaScript名字的由来
  8. “网购懊悔权”为何与“机动车撞人负全责”一样扯淡?
  9. cv.add cv.addWeighted 的区别
  10. 通过Python分析2020年全年微博热搜数据