最近,每当我提到C#时,我都会注意到很多假笑和粗鲁的评论.我与之交谈的每个人都说学习Python或学习C++.
Python是一种很好的语言,我明白了.但是我现在没有找到太多用处(对于我的用例),我听说C++是一种更快的语言(不确定).
所以我的问题是,当我主要用C#编程时,我可以从学习C++(除了知识和扩展我的视野)中获得什么好处?
最大的问题如下:
在过去的20年中,C++是系统和应用程序编程的事实标准
C++是可移植的,编译器可用于所有处理器体系结构的约95%.
C++可以增强你的.NET代码,我的意思是PInvoke可以用来运行用C++编写的优化代码-OR-可以用来运行来自第三方的代码,允许你编写自定义包装器等.
C++是来自泰国的linux/mac/PSP/Cray II/Random OS,它没有编译问题,因为它不是通过.NET CLI运行的(我不得不承认它是一件很漂亮的艺术品)C#是绑定的,目前,Mono实现和Windows通过.NET.
作为一名专业的.NET应用程序员,我喜欢C#,我崇拜建筑师走过的道路.但是在我看来,C++是你能够/将要学习的最重要的语言,因为它将比现代工业中的任何其他语言打开更多的职业之门.如果您了解C#,那么学习它需要几个月的时间.如果你有学术软件工程背景,我推荐Timothy D'Orazi的C++书.
事后想想: C++是一个工具,就像C#或者钻头或霰弹枪(可以说)适合任务的工具一样,我宁可死也不愿用C++编写功能代码,同样,我也不会在F#中进行应用程序开发,他们都是很好的语言.学习一些你感兴趣的东西!如果你想成为一个更好的程序员,学习C++,如果你想成为一个更好的应用程序开发人员,在你已经在工作的框架内学习新技术可能更有利于你!你是一名C#程序员,你学过WPF吗?WCF?那么C#4.0的功能呢?你掌握了lambda函数吗?表达树?你可以从这里找到很多方向,C++只是其中之一.问自己以下问题:
我能从中学到什么才能为我增添价值?
作为开发人员,我可以学到什么?
我能从中学到什么才能使我受益?
我能从中学到什么才能帮助我进入我想要的职业道路?
你会发现这些问题会有很多重叠的答案,花点时间,找到你感兴趣的东西,不会是一件苦差事,你会在3个月后感谢自己.
简短的回答:至少学习一些C++(以及一些汇编语言)可以让你更好地利用,或许更重要的是,调试代码下方的软件平台.无论您使用何种编程语言或操作系统,都是如此.
答案很长:
恕我直言,优秀的开发人员和优秀的开发人员之间的区别因素之一是,伟大的人知道在一个软件中发生了什么,并且能够在技术堆栈中的抽象层下快速钻取,因为最艰难的软件问题通常是由堆栈中代码下方的东西引起的.
因此,我一直建议开发人员在职业生涯的某个阶段花费至少一些时间学习两种语言,这些语言几乎是每个软件堆栈的底层:C/C++和x86汇编语言.这并不意味着你必须成为任何方面的专家,但有东西像指针,寄存器,内存管理,栈和堆,UN-GC-ED字符串缓冲区,泄漏等的工作知识是非常有用巨大,当你需要深入到堆栈中来诊断问题,更好地理解奇怪的行为,或者只是在构建更高级别的软件时做出更明智的决策,而不管语言如何.
一个类比:一旦我拆开摩托车的发动机并看到离合器如何工作,我成为了一个更好的手动变速器驱动器.这并不意味着我需要成为一名摩托车技师,只是因为我的自行车内部发生的事情不再是一个谜,这有助于我的整体驾驶技术.
此外,无论您使用何种语言或框架,对于必须直接调用底层平台的项目,C/C++知识都非常有用,有时也是必需的.
请注意,我故意不接触有关您是否应该用C++编写整个应用程序的更有争议的问题.其他答案在覆盖这些论点方面做得很好.相反,我只是假设C++技能将使您受益,无论您是否继续用C#(或Java或Python或Ruby或......)编写大部分代码
这取决于.
事情我喜欢C++的是,在某些方面,它是一个比C#更富有表现力和肯定,更优雅,语言.它可以实现一些非常好的抽象(例如通用编程或RAII),这些抽象在C#中无法复制.
在这些方面,它令人大开眼界.当然,功能语言也是如此.Python也是如此.所有这些都值得学习,即使你现在和永远地用C#编写所有代码.
当然,C++ 也是一个过于复杂的混乱,而且比其他任何东西都更容易出错.如果你不知道它真的很好,那么它会在你的脸上爆炸时,你最不希望它.
当然,很多人都会大喊大叫!当你问为什么要学习C++时.我不会.因为在许多常见情况下,C#将与C++代码一样快或更快.这雷蒙德陈和波多黎各马里亚尼岁之间交换说明了两个平台的性能相当不错.
C++有可能非常快.但它也有许多微妙的性能缺陷,这意味着大多数时候,除非你是某种无所不知的代码 - 上帝,否则你的代码效率会低于等效的C#.
如果您对编程语言感兴趣,C++就是进化论的一个很好的例子.;)
它没有根据一些伟大的预定义计划增长.根据什么使语言现在变得更好,它总是一步一步地改进和调整.因此,它是巨大的,臃肿的,过于复杂,但它也比根据一个人的愿景严格设计的东西更具表现力,例如C#.C#的设计是对OOP的不健康的痴迷,因为它在设计时很酷.
在C++中,OOP类型向外围漂移,而不是有意识的设计决策,但是因为更好的替代品出现了.
这是一种有趣的语言.我建议学习它只是为了成为一个更好的程序员.但我不相信你需要真正使用它.当然,它会使某些任务变得更容易(本机互操作,或编程小程序,由于某种原因不能假设安装了.NET框架),但在大多数情况下,您可能不需要它.
这使得"成为一个更好的程序员"的论点,虽然这是一个有效的论点,但对其他语言也是如此.你当然也应该懂一种函数式语言.而Python,或类似的实用,高级"使程序员更容易"的语言.
我是C++开发人员的最近10年,也是最近两年,我一直在使用java进行新产品开发.我还在C#上做了一些编程只是为了学习它.根据我的经验,我会说C++是一种具有挑战性和高性能的语言,它有利于计算机科学学生理解编程概念和算法.C++的其他用法是协议实现,它不会经常改变例如,实现SIP代理或HTTP服务器.
对于需求经常变化的实践产品开发,我建议任何高级语言,开发人员可以专注于应用程序逻辑而不是重新发明轮子.例如,最近我开始了一个开源项目xcapserver,我能够在两天内使用Java技术(Glassfish,REST,log4j,eXist db)快速制作原型,但我想要精益推进库,而且这是一个不期望的协议经常改变,所以我决定用C++实现.我只花了4天时间让logger使用BOOST :: log工作,另外4天用Berkeley DB XML修复线程死锁问题.
另一方面是产品维护.我花了几天时间来修复内存泄漏和损坏,新开发人员的学习曲线与J2EE或.NET相比太高了,因为很容易找到开发人员和维护.
在排序方面,C++是一种很好的编程语言,我建议所有开发人员学习,但我认为随着处理器变得越来越快,越来越没有使用它,因此性能不是原因.
有理由使用几乎任何语言.
C和C++的用途在于它们被编译为本机代码而不是在虚拟机上运行.有速度优势,这也意味着这些程序可以在没有安装50MB +框架的情况下运行.
几乎所有游戏(当然是第一人称射击游戏)都是用C或C++编写的.
这适用于你吗?不知道,因为我不知道你想要实现什么.
您将从C或C++中学到什么?指针,内存管理等.与C#,Java或Python等更现代的垃圾收集语言完全不同.
学习C++以便更好地欣赏C#.
除了别人说的话:
人们喜欢在简历中看到它.
学习任何语言都可以帮助您将该语言翻译成C#,这使您作为程序员更有价值.
学习另一种语言有助于您使用该语言理解样本,可以说您可以使用更广泛的样本,书籍,示例和专家.
包装!学习C++可以帮助你包装那些讨厌的C++ dll以供C#使用!
也就是说,如果你是一个从未学过C++的C#程序员,那么在C++之前你应该学习其他很多东西.