为何使用 C# 以及何时选择其他语言?!






4.81/5 (22投票s)
本文描述了如何选择多种编程语言来找到最适合您项目的语言!
引言和背景
无论是在 Quora、C# Corner 还是 CodeProject,新手用户总会提出诸如“C++ 还是 C#?”之类的疑问,以及更多类似的类似问题。在多个平台和针对多个问题提供答案是很难的。这就是为什么我想,为什么不写一篇博客文章来涵盖这个问题的绝大多数方面。在这篇文章中,我将介绍一些您可能需要了解的概念,以便从最广泛使用的语言中选择一种。
- C 或 C++
- Java
- C#(或 .NET 框架本身)
基本上,在很多情况下我的个人偏好是 C#,但这取决于我将要构建什么。我一直在根据需求使用 C、C++、Java 和 C# 来编写各种应用程序,取决于它们允许我编写程序的方式,以及是否是适合此类项目和应用程序架构的编程语言。
我这样做的方式是一个我将在本文中与您分享的技巧。其中,一些非常基本的事情需要考虑:
- 在程序中使用此语言的简单程度如何?
- 在您的情况下,该语言的生产力如何!
- 难度级别以及多少人了解该语言!
我将在本文中讨论这些要点,以弄清楚在哪里使用哪种编程语言。但在这篇文章中,我主要关注 C# 编程语言的各个方面。
语言的生产力
首先要考虑的总是语言为您的团队提供的生产力。语言的生产力取决于许多因素,例如:
- 该语言如何构建程序?
- 定期构建项目的速度和可靠性如何?
- 程序的源代码是否对团队中的其他成员可读?
- 该语言本身是否适合我们即将使用的场景。
在我看来,语言的生产力是第一个应该在团队中进行讨论的有效候选者,而不仅仅是在封闭的房间里谈论。您应该设法让您的团队聚集在会议室里,然后讨论一种语言。可能有很多方面,一种语言可能不足,而另一种语言可能表现良好。有很多因素是大多数程序员不知道的,但通过讨论它们,一位技术专家会站出来提出另一个重要观点,这可能会引导您的团队走上正确的道路来构建更出色的应用程序。
让我们稍微看一下图表。
在此图表中,我们可以看到 C 是我们感兴趣的最具生产力的编程语言;C、C++、Java 和 C#。C++ 和 C# 相互竞争,而 Java 比 C# 稍落后,依此类推。
在上图中,很明显 C# 是一种平均水平的编程语言。平均不意味着它低于要求。但它意味着它可以在任何情况下使用,并且随着数据的增加,其性能不会下降。成功运行图表明 C# 程序在很多情况下都非常成功。这就是为什么在很多情况下,C# 被证明是一个有效的选择,因为它是一种通用编程语言。
那么问题来了:“在哪个意义上生产力?”
这是最重要的一部分。现在,这个主题可能需要一些时间来解释一种语言的生产力。为此,我专门设置了一个主题:“为正确的任务选择正确的语言”。为正确的任务选择正确的编程语言将始终有助于提高您团队的编程速度!但除了其他方面,最重要的方面是:
- 这是什么类型的项目?
- 当然,您不想用刀子拧螺丝。
- 有哪些 IDE 和编译工具可用?
- 即使是 C 语言编写的程序,如果编译器有错误或效率低下,也可能出错。
- 您的团队将如何管理项目?
- 该语言是否支持良好的软件工程概念?
- 它是否可用于生成良好的图表:用例图、活动图、类图等。
因此,在猜测使用哪种语言时,您应该始终考虑您开发团队的生产力。
为正确的任务选择正确的语言
人们总是说要为最好的工作使用最好的工具!那么,为什么不为您的项目使用最好的编程语言,以获得最好的可能结果呢?在我继续之前,有一件事我想说……“从来没有最好过的编程语言。”每一次编程语言都是为了某个目的而构建的,另一群程序员会跳进来创建一种新的编程语言,以修复前一种语言中的错误。您认为当 C 语言和 Scala 已经在市场上时,是什么促使 Bjarne 创建 C++ 的?
在本节中,有很多需要考虑的因素,从性能和效益到客户,再到员工的福利待遇,再到项目存储库的效率以及为该编程语言提供的工具。
C# 是由微软创建的,因此,在我看来,它拥有迄今为止最高效的编程工具。我的意思是,Visual Studio 本身就是游戏中的巨头。
我是 Visual Studio 的忠实粉丝,而且我怀疑没有人不是 Visual Studio 的粉丝。C# 在使用最好的 IDE 方面拥有更好的支持和优势。Java 也有许多 IDE,C++ 也是如此,许多 C 程序都是在最小的环境中编写的,比如一个小的程序来管理和编译 C 程序;无意冒犯技术宅!
现在,如果您看一下这张图表,它在指导您方面是相当清晰的。当然,正如我在开头的段落中提到的,没有最好的编程语言。
在很多情况下,C# 和 Java 胜过 C++(和 C),而在很多情况下,它们又胜过 C# 和 Java。有很多因素,比如编程范式、生成的代码的性能;即时编译、内存管理延迟等等。虽然 C# 和 Java 可能提供了构建“托管”程序的最佳环境,但在许多情况下 C# 和 Java 并不好用,比如编写底层程序。Java 开发者曾想构建一个 Java OS,但他们不得不放弃,因为有些事情并非要在 Java 中完成。:-)
在做出最终决定之前,请务必考虑搜索。有很多公司在您将要工作的类似领域工作。可能有很多针对您自己领域的包和语言可以帮助您立即开始!
但是,我认为这些有点落后了。我认为 C 语言排在榜首是因为它给初学者带来了很多麻烦,所以每个人都在谷歌上搜索“如何在 C 中执行此操作”,从而提高了排名。;-)
选择最佳框架
在谈论像 Java、Qt(在很多情况下我都很喜欢;比如 Ubuntu 编程)和其他可用于编写应用程序的编程框架时,我并不完全同意人们的看法,这些框架允许应用程序在不考虑机器架构的情况下运行。在这种情况下,我对 .NET 框架的推荐和个人看法非常积极。如前所述,我已经在 Android、Ubuntu 和 Linux 本身上的 Qt 框架上进行了编程。这是一个非常强大的框架,可以用来构建应用程序。但缺点是它很难学习,它们的编译器经过修改,它们的 C++ 被调整过。
在选择最佳应用程序开发框架时,可用的选择如下:
- 框架有多灵活?
- 它支持什么语言?
- .NET 框架支持多种语言,例如 C#、VB.NET、Visual C++、JavaScript 应用程序。
- 它是跨平台的吗?
- 如果不是跨平台的,那么它是否至少支持多种架构?
Java 框架是跨平台的,并且完全是面向框架的。您只需针对框架,而无需考虑所使用的操作系统或架构。.NET 框架是编写应用程序的非常出色的框架。它使用 C#、VB.NET 和 C++(无 Java!)来编写应用程序,然后编译后的二进制文件可以在许多支持 .NET 框架的机器上执行。这提供了出色的跨架构支持。
然而,C# 目前不支持 Mac OS X。微软已开始为 C# 程序推出跨平台二进制文件。.NET Core 取得了巨大成功,一旦发布到公共版本,我相信大多数公司都会开始将其作为目标。这在不久的将来不会发生。在这种情况下,Java 和 C++ 比 C# 更好。
如果您有兴趣在多个平台上使用 C# 编程,请考虑使用 Mono Project。您可以在我的博客上阅读有关此内容的更多信息:使用 C# 进行跨平台开发。
Java 在排名中可能得到 100% 的支持,但 C# 也支持多种平台并且正在快速发展,这使得该语言优于其他语言。随着 C# 6 的发布,微软已经证明该语言在竞争中远优于其他语言。有很多我喜欢的 C# 6 的特性:
- 字符串插值
- 作为 lambda 的仅 getter 自动属性
- 对 lambda 的改进
Java 仍然有一些功能。例如,用一个语句即可将数据写入文件并提取数据。您必须在流中弄得一团糟,或者必须使用 `Files` 对象编写一个完全不直观的代码,然后从那里获取数据……真糟糕!
编译代码的性能
编写源代码在很多方面可能有所不同:
- 编程语言的语法
- 它们的类和过程导入到源代码中的方式
- 源代码看起来有多干净——许多编程语言简直是噩梦
但当我们执行程序时,主要的问题就浮现了。在很多情况下,或者应该说在所有情况下,字节码语言比编译为本机代码或汇编代码的语言要慢。例如,C 或 C++ 代码更快,因为它们不是编译为字节码,而是为特定平台或架构生成机器代码。C# 或 Java 程序被编译为字节码,这在程序执行时会导致 JIT 发生。这需要时间。
然而,您可以看到来自 https://attractivechaos.github.io/plb/ 的以下图表,并亲眼看看字节码语言的相似之处以及编译语言的差异有多大,自己看看。
这非常清楚地表明了编译语言比字节码语言快多少,然后是解释型语言,比如 Ruby。
在很多情况下,还有其他因素会导致性能不佳:
- 糟糕的编译器
- 分配了大量资源
- 缓慢的硬件资源;CPU、RAM 和其他外围设备的组合不佳
- 糟糕的程序员和使用的糟糕代码
- 糟糕的编程实践
- 大部分时间 CPU 处于停滞状态
还有更多因素是导致流程停止的有效原因。
结束语
正如我之前提到的,没有最好的编程语言。一种语言在一个案例中最好,另一种语言在另一个案例中最好,依此类推。在这种情况下,最好与您的开发团队沟通,然后向他们提问并征求他们的反馈。为您的项目选择好的工具始终是一种好方法,也是编程过程中的重要一步。
如果您的软件工程师或软件架构师正在寻找一个好的解决方案,请让他们思考以下问题:
- 团队和开发人员具备哪些资质?
- 要求 C++ 程序员团队放弃 C++ 加入 Java 或 C# 编程团队不是个好主意!
- 始终考虑最佳方法。
- 时间就是金钱——小心管理。
- 招募更多有技能的程序员。
- 该编程语言是长寿的,还是小众的?
- 该编程语言是否能够让您的应用程序正常工作?
- 我使用过许多编程语言,因此我能够决定使用哪种语言。选择哪种语言是您的软件架构师的工作。
如果您遵循这些规则,您将可以避免许多未来导致大量问题的疑问。很多时候,开发人员会问诸如“我的应用程序是用 Java 编写的,如何迁移到 C#?”之类的问题。许多 Web 开发人员会问诸如“我的应用程序是用 PHP 编写的,如何将 PHP 代码转换为 ASP.NET?”之类的问题。这些问题只有一个答案。“重写应用程序”。
在设计应用程序之前,您应该考虑很多事情。Facebook 被 PHP 困住了,因为它就是用 PHP 编写的。即使他们想迁移到 ASP.NET,他们也不会。相反,他们找到了绕过 PHP 错误和缺点的解决方法。
这就是为什么您应该始终考虑使用会议或集会来决定如何开始项目,使用哪种编程语言,定位哪些框架,谁将领导团队等等。这几天的讨论和设计将为您节省未来的大量金钱和时间。