最近我提到C#时,开始注意到很多人冷嘲热讽或者发表不友好的评论。每个我交谈过的人都说学Python或者学C++。
Python是一门好语言,我理解。但是目前(根据我的用例)我没有找到太多它的用途,而我听说C++是一种更快的语言(不确定)。
因此,我的问题是这样的,除了获得知识和拓宽视野外,如果我主要使用C#编程,学习C++有什么优势呢?
最近我提到C#时,开始注意到很多人冷嘲热讽或者发表不友好的评论。每个我交谈过的人都说学Python或者学C++。
Python是一门好语言,我理解。但是目前(根据我的用例)我没有找到太多它的用途,而我听说C++是一种更快的语言(不确定)。
因此,我的问题是这样的,除了获得知识和拓宽视野外,如果我主要使用C#编程,学习C++有什么优势呢?
最大的问题如下:
作为一名专业的.NET应用程序员,我喜欢C#,我崇拜架构师们走过的地方。但是,我认为C++是你可以/将会学习到的最重要的语言,因为它将比现代行业中的任何其他语言打开更多的职业门路。如果你知道C#,学习它只需要几个月的时间。如果你有软件工程背景,我建议读Timothy D'Orazi的C++书籍。
后记: C++是一种工具,就像C#或钻头或猎枪(有争议),适合任务的工具,我宁愿死也不会用C++编写函数式代码,同样,我不会在F#中进行应用程序开发,它们都是很好的语言。学习你感兴趣的东西!如果您想成为更好的程序员,请学习C++,如果您想成为更好的应用程序开发人员,了解您已经在其中工作的框架内的新技术可能更有优势!您是一位C#程序员,您学会了WPF吗? WCF? C# 4.0的功能呢? 您掌握了lambda函数和表达式树吗?您可以从这里开始探索更多方向,C++只是其中之一。问自己以下问题:
你会发现这些问题有很多重叠的答案,花点时间找到一些你感兴趣且不会觉得学起来很枯燥的东西,三个月后你会感谢自己的。
简短回答: 学习至少一些C++(以及一些汇编语言)可以帮助您更好地利用和调试您代码下面的软件平台。无论您使用的编程语言或操作系统是什么,这都是正确的。
详细回答:
在我看来,优秀的开发者和卓越的开发者之间的区别之一是:卓越的开发者知道软件中底层的情况,并且能够快速地钻进技术堆栈的各个层次,因为最棘手的软件问题通常是由于您代码下面技术堆栈的原因引起的。
因此,我一直建议开发人员在职业生涯的某个时刻花费一些时间学习两种几乎存在于每个软件堆栈底部的语言:C / C ++和x86汇编语言。这并不意味着您需要成为其中任何一种语言的专家,但当您需要深入堆栈诊断问题、更好地理解奇怪的行为或仅仅在构建更高级别软件时做出更明智的决策时,具有指针、寄存器、内存管理、堆栈和堆、未经垃圾收集的字符串缓冲区、泄漏等方面的工作知识是非常有用的,无论使用什么编程语言。
一个类比:在我拆开摩托车发动机并看到离合器如何工作后,我成为了更好的手动挡汽车驾驶员。这并不意味着我需要成为摩托车技师,只是当我了解了我的摩托车内部发生了什么时,它对我的整体驾驶技能有所帮助。
此外,无论您使用哪种语言或框架,对于必须直接调用底层平台的项目,C / C ++知识都非常有用,有时是必需的。
请注意,我故意没有涉及关于是否应该完全使用C ++编写应用程序的更具争议性的问题。其他答案已经很好地讨论了这些论点。相反,我只是阐述了一个观点:学习C++技能将使您受益匪浅,无论您继续使用C#(或Java或Python或Ruby或...)编写大部分代码。
这要看情况。
我喜欢C++的一个方面是,在某些方面,它比C#更具表现力,更优雅。它可以实现一些非常好的抽象(例如泛型编程或RAII),这在C#中无法复制。
在这些方面,它是一个启发者。当然,函数式语言也是如此。Python也是如此。所有这些都值得学习,即使您现在和将来都只使用C#编写所有代码。
当然,C++也是一个过于复杂的混乱,比其他任何语言都容易出错。如果您不真正掌握它,它会在您最不希望的时候爆炸。
当然,有很多人会在你问为什么要学习C++时大声喊出性能!我不会。因为在许多普通情况下,C#将与您的C++代码一样快甚至更快。 Raymond Chen和Rico Mariani之间的这个旧交换清楚地说明了两个平台的性能特征。
C++有潜力变得非常快。但它还有许多微妙的性能陷阱,这意味着在大多数情况下,除非您是某种全知的代码之神,否则您的代码将比等效的C#代码不那么高效。
如果您对编程语言感兴趣,C++是进化理论的一个很好的例子。 ;)
它没有按照某个伟大的预定义计划成长。它始终根据当前使语言更好的因素一步步改进和适应。因此,它很庞大、臃肿、过于复杂,但它比某个人的单一愿景所设计的东西(如C#)更具表现力。C#的设计过于迷恋面向对象编程,因为当时它很酷。
在C++中,面向对象编程逐渐漂移到了边缘,这不是出于有意识的设计决策,而是因为出现了更好的替代方案。
C++是一门有趣的语言。我建议学习它只是为了成为一个更好的程序员。但是我并不认为你需要实际地使用它。当然,它会使某些任务变得更容易(本机互操作或编写某些小型程序,这些程序由于某种原因无法假设安装了.NET框架),但对于大多数情况,你可能不需要它。
这就留下了“成为更好的程序员”的论点,虽然这是一个有效的论点,但其他语言也同样适用。你还应该了解一种函数式语言。以及Python或类似的实用高级“让程序员更容易”的语言。
使用任何编程语言都有其原因。
C和C++之所以被使用,是因为它们可以编译成本地代码而不是在虚拟机上运行。这样做的优势在于速度更快,同时也意味着这些程序可以在没有安装50MB以上框架的情况下运行。
几乎所有游戏(尤其是第一人称射击游戏)都是用C或C++编写的。
这是否适用于您?我不知道,因为我不知道您想要实现什么目标。
从C或C++中你会学到什么?指针、内存管理等等。这与更现代的垃圾收集语言(如C#、Java或Python)完全不同。
学习C++可以更好地理解C#。
学习函数式编程语言如Clojure、Haskell(或许F#更适合,因为你显然对CLR感到舒适)可以让你获得更多的实用性。它们有一种不同的底层编程模型会扩展你的视野,而学习新语法则不会。
相反地,学习C比学习C++更有用。这将使你的学习重点放在指针、内存和“接近底层”的主题上。
2015更新
学习Swift。它将教你现代C ++中使用的函数和生成模式,但没有包袱或太多陷阱。它在语义上也与F#有显着重叠,因此您有机会学习函数式编程。有一个充满活力的函数社区推动Swift的发展。
具有讽刺意味的是,在我目前的工作中,我为Realm提供C#绑定,我仍然在使用我的C ++技能,但在过去的6年中,我的态度并没有改变。
原文
我是一名C ++程序员,已经有15年以上的工作经验,去年在广泛研究其他语言以改善思考能力的基础上,开始学习并使用C#(和C ++ / CLI)。
我对C#作为一种语言非常非常印象深刻,特别是C#3.0的改进。
我持相反的观点: