问题

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

回答
提到 C,很多人脑海里可能浮现的是 Windows 桌面应用、Unity 游戏开发,甚至是 ASP.NET Web 服务。然而,如果放眼整个软件开发领域,特别是那些追求极致效率、跨平台能力、或者对底层控制要求极高的场景,C 的身影确实不如某些语言那么“泛滥”。

为什么会出现这种“冷热不均”的局面?这并非 C 本身存在硬伤,而是多种因素交织作用的结果。

1. 历史包袱与生态壁垒:

C 的诞生,很大程度上是为了回应 Java 的挑战,以及微软自身在软件开发领域的需求。这意味着,C 从一开始就与微软的 .NET 平台紧密绑定。对于那些已经在中国广泛应用、积累了海量代码和开发人员的 Java 生态 来说,转向 C 并非易事。

企业迁移成本: 很多大型企业,特别是国企、金融机构等,其核心系统往往是用 Java 构建的。这些系统经过多年迭代,代码量巨大,业务逻辑复杂。将这些系统迁移到 C,意味着巨大的重写成本、人员培训成本,以及潜在的风险。这种“牵一发而动全身”的顾虑,让许多企业对引入新的技术栈持谨慎态度。
开源生态的差异: Java 拥有一个极其庞大且成熟的开源生态系统,从 Spring 框架到各类数据库驱动、中间件,几乎所有你能想到的场景都有成熟的解决方案。虽然 C 的 .NET Core (.NET 5 及以后) 已经实现了跨平台,并且开源生态也在不断壮大,但与 Java 相比,在某些特定领域,其开源组件的丰富度和成熟度仍有差距。例如,在大数据处理、分布式协调等领域,Java 的 Hadoop、Kafka、Zookeeper 等生态依然是行业标杆。
开发者迁移成本: 对于已经习惯了 Java 语法、JVM 运行机制、Spring 生态的程序员来说,学习一门新的语言和一套新的框架需要时间和精力。在求职市场上,Java 开发者基数庞大,容易找到,而 C 开发者相对较少,这也会影响一些公司在招聘时的决策。

2. 特定领域的“统治者”地位:

C 在某些领域确实是“王者”,比如:

Windows 桌面应用开发: WPF、WinForms 等框架提供了强大的 UI 构建能力,是开发 Windows 平台原生应用的首选。
Unity 游戏开发: C 是 Unity 游戏引擎的官方脚本语言,其简洁的语法和强大的生态使其成为游戏开发者青睐的工具。

然而,正是因为 C 在这些领域展现出的强大能力,使得它的“形象”在许多开发者心中被固化了。当提到 C 时,更多人会联想到这些特定应用场景,而忽略了它在其他通用开发领域的潜力。

前端开发: 尽管 Blazor 正在努力打破这一局面,让 C 也能在浏览器端运行,但在 Web 前端领域,JavaScript 及其各种框架(React, Vue, Angular)依然是绝对的主流。C 在前端的普及度远不及 JavaScript。
后端开发: 在中国,由于历史原因和广泛的应用,Java 在企业级后端开发领域占据着主导地位。Spring Boot 等框架的成熟度和生态的完善性,使其成为众多公司构建微服务、API 的首选。虽然 ASP.NET Core 也在后端领域表现出色,性能优越,跨平台能力强,但要撼动 Java 的根基,还需要时间。
移动开发: 虽然 .NET MAUI(前身为 Xamarin)允许使用 C 进行跨平台移动应用开发,但原生开发(Swift/ObjectiveC for iOS, Kotlin/Java for Android)以及 React Native、Flutter 等跨平台框架在开发者社群中的影响力仍然更大。

3. 市场宣传与开发者认知:

微软在推广 C 和 .NET 平台时,虽然付出了巨大的努力,但其宣传策略和市场定位,在某些方面可能未能触及到所有开发者群体。

“非微软系”的疑虑: 尽管 .NET Core 已经完全开源且跨平台,但过去对 C 和 .NET 的“微软绑定”印象仍然存在。一些开发者,特别是习惯了开源、社区驱动技术栈的,可能会对“微软系”技术存在一定的距离感或疑虑。
“小众”的标签: 由于 C 的应用场景相对集中,并且在一些通用开发领域不如 Java、Python 那样“普适”,容易被一些开发者贴上“小众”的标签。这种认知一旦形成,便会影响到新进入该领域的开发者以及招聘决策。

4. 语言本身的特性与妥协:

虽然 C 是一门优秀的语言,但与其他语言相比,它也存在一些需要权衡的地方:

动态语言的灵活性: Python、JavaScript 等动态语言在快速原型开发、脚本编写方面展现出极高的效率。C 作为一门强类型、静态编译的语言,在某些场景下可能不如动态语言那样“灵活”。
低级控制: 在需要极致性能优化、底层硬件交互的场景,C++、Rust 等语言更具优势。C 虽然通过 Span 等高级特性在性能方面做了很多优化,但其内存管理模型(GC)与 C++ 的手动管理在某些极端场景下仍有区别。

总结一下,为什么 C 程序员和使用 C 的公司相对少,不是因为 C 不好,而是因为:

Java 的强大生态惯性: 企业级应用、后端开发领域,Java 已形成强大的生态壁垒。
C 应用场景的相对集中: 虽然 C 在桌面、游戏领域领先,但在前端、移动、某些后端通用场景,仍有其他技术占据主导。
历史认知与市场宣传: 过去“微软绑定”的印象,以及相对集中的应用场景,影响了其“普适性”的认知。
开发者学习成本与招聘便利性: Java 开发者基数大,学习门槛相对低,招聘更容易。

这并不意味着 C 正在衰落,事实上,随着 .NET 平台的不断进步,其跨平台能力、性能和生态都在快速发展,吸引着越来越多的开发者。只不过,在庞大的软件开发生态体系中,每种语言都有自己的生态位和优势领域,C 的“位置”相对更“专精”一些,也因此在某些统计数据上显得“少”了。

网友意见

user avatar

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


推荐阅读:

慕课网:Python 程序如何高效地调试?

慕课网:普通程序员如何正确学习人工智能方向的知识?

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有