当前位置:  开发笔记 > 编程语言 > 正文

如果我主要是C#程序员,我可以从学习C++中获得什么好处?

如何解决《如果我主要是C#程序员,我可以从学习C++中获得什么好处?》经验,为你挑选了7个好方法。

最近,每当我提到C#时,我都会注意到很多假笑和粗鲁的评论.我与之交谈的每个人都说学习Python或学习C++.

Python是一种很好的语言,我明白了.但是我现在没有找到太多用处(对于我的用例),我听说C++是一种更快的语言(不确定).

所以我的问题是,当我主要用C#编程时,我可以从学习C++(除了知识和扩展我的视野)中获得什么好处?



1> Firoso..:

最大的问题如下:

在过去的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++中的关键概念.
或者就此而言,动态,方差,lambda表达式,表达式树,匿名类型,甚至语言独立的东西,如ADT,存储/搜索效率和算法分析.
你对C++的C++感到困惑.你在子弹点中描述的那些"漂亮"的语言功能属于C语言,而不是C++.

2> Justin Grant..:

简短的回答:至少学习一些C++(以及一些汇编语言)可以让你更好地利用,或许更重要的是,调试代码下方的软件平台.无论您使用何种编程语言或操作系统,都是如此.

答案很长:

恕我直言,优秀的开发人员和优秀的开发人员之间的区别因素之一是,伟大的人知道在一个软件中发生了什么,并且能够在技术堆栈中的抽象层下快速钻取,因为最艰难的软件问题通常是由堆栈中代码下方的东西引起的.

因此,我一直建议开发人员在职业生涯的某个阶段花费至少一些时间学习两种语言,这些语言几乎是每个软件堆栈的底层:C/C++和x86汇编语言.这并不意味着你必须成为任何方面的专家,但有东西像指针,寄存器,内存管理,栈和堆,UN-GC-ED字符串缓冲区,泄漏等的工作知识是非常有用巨大,当你需要深入到堆栈中来诊断问题,更好地理解奇怪的行为,或者只是在构建更高级别的软件时做出更明智的决策,而不管语言如何.

一个类比:一旦我拆开摩托车的发动机并看到离合器如何工作,我成为了一个更好的手动变速器驱动器.这并不意味着我需要成为一名摩托车技师,只是因为我的自行车内部发生的事情不再是一个谜,这有助于我的整体驾驶技术.

此外,无论您使用何种语言或框架,对于必须直接调用底层平台的项目,C/C++知识都非常有用,有时也是必需的.

请注意,我故意不接触有关您是否应该用C++编写整个应用程序的更有争议的问题.其他答案在覆盖这些论点方面做得很好.相反,我只是假设C++技能将使您受益,无论您是否继续用C#(或Java或Python或Ruby或......)编写大部分代码


为什么选择downvote?他提出了一个很好的观点.重要的是要记住那些不完全理解他们使用的抽象的人将永远受到他们的限制.只要满足您的需求,抽象就是好的.

3> jalf..:

这取决于.

事情喜欢C++的是,在某些方面,它是一个比C#更富有表现力和肯定,更优雅,语言.它可以实现一些非常好的抽象(例如通用编程或RAII),这些抽象在C#中无法复制.

在这些方面,它令人大开眼界.当然,功能语言也是如此.Python也是如此.所有这些都值得学习,即使你现在和永远地用C#编写所有代码.

当然,C++ 也是一个过于复杂的混乱,而且比其他任何东西都更容易出错.如果你不知道它真的很好,那么它会在你的脸上爆炸时,你最不希望它.

当然,很多人都会大喊大叫!当你问为什么要学习C++时.我不会.因为在许多常见情况下,C#将与C++代码一样快或更快.这雷蒙德陈和波多黎各马里亚尼岁之间交换说明了两个平台的性能相当不错.

C++有可能非常快.但它也有许多微妙的性能缺陷,这意味着大多数时候,除非你是某种无所不知的代码 - 上帝,否则你的代码效率会低于等效的C#.

如果您对编程语言感兴趣,C++就是进化论的一个很好的例子.;)

它没有根据一些伟大的预定义计划增长.根据什么使语言现在变得更好,它总是一步一步地改进和调整.因此,它是巨大的,臃肿的,过于复杂,但它也比根据一个人的愿景严格设计的东西更具表现力,例如C#.C#的设计是对OOP的不健康的痴迷,因为它在设计时很酷.

在C++中,OOP类型向外围漂移,而不是有意识的设计决策,但是因为更好的替代品出现了.

这是一种有趣的语言.我建议学习它只是为了成为一个更好的程序员.但我不相信你需要真正使用它.当然,它会使某些任务变得更容易(本机互操作,或编程小程序,由于某种原因不能假设安装了.NET框架),但在大多数情况下,您可能不需要它.

这使得"成为一个更好的程序员"的论点,虽然这是一个有效的论点,但对其他语言也是如此.你当然也应该懂一种函数式语言.而Python,或类似的实用,高级"使程序员更容易"的语言.


上帝保佑STL
这可能是一个很好的评论,但是:"过于复杂的混乱","比其他任何东西更容易出错的语言".证明?"除非你是某种无所不知的代码 - 上帝,否则你的代码效率将低于同等的C#." 在我看过的大多数基准测试中,C++开箱即用.当C#/ Java同样快速/快速时,它们几乎肯定会使用更多内存."庞大,臃肿,过于复杂".具有讽刺意味的是,C#的核心功能更多,ISO标准文档更大."OOP类型向外围漂移"OOP在C++中仍然是必不可少的.
您是否认真地说C++不会过于复杂?"当C#/ Java同样快速/快速时,他们几乎肯定会使用更多内存",是的,你会注意到我从未声称他们使用的内存比C++少.如果你不认为C++是一门大而复杂的语言,那么有一件事是清楚的:你不懂C++.至于OOP,STL在哪里?在Boost中使用了多少钱?至于标准,我从ECMA为C#抓取的是没有索引的507页.C++ 98是703页.

4> rjoshi..:

我是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++中具有良好的编程技能并且掌握了我们产品中的修复内存泄漏/损坏,因此当出现问题时,我会接受挑战来修复它.这并不意味着我编写了代码.但这并不意味着我不必提高我的技能:).

5> cletus..:

有理由使用几乎任何语言.

C和C++的用途在于它们被编译为本机代码而不是在虚拟机上运行.有速度优势,这也意味着这些程序可以在没有安装50MB +框架的情况下运行.

几乎所有游戏(当然是第一人称射击游戏)都是用C或C++编写的.

这适用于你吗?不知道,因为我不知道你想要实现什么.

您将从C或C++中学到什么?指针,内存管理等.与C#,Java或Python等更现代的垃圾收集语言完全不同.


但是要注意一件非常重要的事情.Windows C(以及C++)API非常糟糕.对于用户界面,最好使用C#.在处理GUI和常规Windows编程时,最好用C/C++中的后端库和C#中的所有GUI /用户界面来做

6> Pedro Estrad..:

学习C++以便更好地欣赏C#.



7> user179700..:

除了别人说的话:

人们喜欢在简历中看到它.

学习任何语言都可以帮助您将该语言翻译成C#,这使您作为程序员更有价值.

学习另一种语言有助于您使用该语言理解样本,可以说您可以使用更广泛的样本,书籍,示例和专家.

包装!学习C++可以帮助你包装那些讨厌的C++ dll以供C#使用!

也就是说,如果你是一个从未学过C++的C#程序员,那么在C++之前你应该学习其他很多东西.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有