为什么要学习C ++
大家一直告诉我要学习C ++。 不用左右摇动语言,有人能说出一些相关的原因,为什么我今天应该学习C ++?
请注意,我绝不会对C ++说任何苛刻的话。 我只想知道为什么我应该掌握它作为一个程序员,而不是其他强大的语言。
我应该学习潜水还是中国人?
这取决于 。 你需要什么? 你在一家使用C ++的公司工作吗? 你在C ++stream行的行业工作吗? 你打算在这样的地方工作吗? 你是程序员吗? 你想做编程吗?
这个星球上的绝大多数人不学习C ++,尽pipe如此,他们仍然生活得很好。 大多数人不学习任何编程语言。 他们不需要它。
你需要它吗? 如果是这样,学习它。 你想学习吗? 如果是这样,学习它。
如果你打算做任何C ++编程,学习C ++将是一个非常好的主意。 否则,其他语言可能更相关。
但这不是一个或者一件事情。 学习新的语言永远是一件好事,将永远让你成为一个更好的程序员。 如果你有select,你应该总是学习新的语言。 所以理想的情况是,你应该学习C ++, 以及 Ruby,C,D,F#,Haskell,Io,Lisp和其他所有你听过的语言。
在实践中,你可能没有时间为他们所有。 所以先select那些看起来有用和有趣的。
我认为,即使您计划使用更高级别的语言作为您的select工具,至less也要熟悉C ++,有几个原因。 这里有几个:
-
这就像学习拉丁语来更好地理解英语。 很多语言都是基于语法和结构build模的,例如C#,Java,JavaScript等。捡起C ++或者至lessC语言将为您提供一个先导,教会所有这些语言之间的共同点。
-
理解从其他语言(指针,基本数据结构,垃圾回收)中抽象出来的东西,理论上使你成为一个更好的程序员,即使你不直接修改细节。
-
它不会每天都发生,但总有一天,您将需要从高级语言直接连接到C ++程序API。 如果你至less有一个C ++的通过知识,这将有所帮助。
-
你的简历上的C ++经常会导致Salary ++。 它只是作为更多的硬核语言而受到尊重。
-
我经常将C ++用作使用不同语言的程序员和试图成为语言不可知(Code Complete)的编程书籍之间的通用语言。 了解C ++可以获得更多的学习资料。
顺便说一句:我写了一篇快速的博客文章,以回应这个问题,更详细一点。
我会采取相反的立场。 不要学习C ++,这是浪费时间。 除非你立即和迫切的需要,否则你的时间会花在别处。 长期职业计划的语言select可能包括印地语,乌尔都语,汉语或俄语。
令人遗憾的是,世界上有更多的学习,比你可以学习,不久,你将需要select你的无知领域。 在这一点上,C ++可以被安全地忽略(再次,取决于眼前的需要)。 为什么不用它来构build一些东西,而不是build立你的工具集? 这本身就是一种教育。
其他一些原因在这里:
- 几乎所有的科技书籍都用C / C ++编写代码示例。
- 已知C / C ++编译器比任何其他编译器生成更高效的机器码( fortran可能是例外)。
- 已经有数十亿行代码已经用C ++编写了。 您的代码重用的可能性是巨大的!
- 很多书籍,论坛,网上关于语言的内容。
- 定义良好的ISO标准由专家组不时更新。 (这不是一个“冻结”的语言)。
- 在大多数平台上支持,从微控制器(实际上是C语言)到手机。
- 几乎所有的操作系统都用C编码
这必须是一些东西的副本…
你应该学习C ++,因为它是非常常用的,它是有效的,它是许多其他常用语言的基础,因为半认识C ++是危险的。
先学C吧。 然后学习C ++来欣赏力量。 然后学习更高层次的语言。 你甚至可能想在C开始之前学习很less的汇编语言。是的,这听起来像很多工作,但是…这是很多工作。 幸运的是,这是愉快的工作。 :)关键是不要成为汇编,C和C ++的专家。 关键是要理解那些shiny的语言如何在内部做事情,这肯定会使你成为一个更好的开发者。
另请参阅https://stackoverflow.com/questions/296/should-i-learn-c
如果您对实时,高性能计算感兴趣,您应该了解它。 C ++比C更富有performance力,而且比其他语言更有效。 如果你想最大限度地利用可用的资源,这是正确的语言。
考虑到这个任务,我认为它比Java或Objective-C更有趣。:)要做到这一点需要花费很多,但是奖励非常好。 这是一种expression的语言,程序员可以很好地控制发生的事情。
更新:为什么C ++是伟大的另一个原因 – 这是真正的跨平台。 它几乎在任何地方使用 – PC,Mac,Xbox 360,PS3,手机,embedded…你的名字。 所以你几乎可以在任何你感兴趣的平台上使用你的技能。 与许多其他语言相比,这些语言通常只对一个平台有用。
这个问题的答案包含很多原因: 哪个软件行业使用c ++
通过学习像C ++这样的低级语言,您将学习如下基本概念:
- 内存pipe理
- 指针
- 体验无“丰富”内置库的编码(与Java API,.NET Framework相比)
一旦你对低级语言有丰富的经验,你将会更好地理解高级平台是如何工作的。 从长远来看,这将有助于您成为更好的Ruby,Python,Java等开发人员。
有一个原因,它在编程世界中的使用非常广泛。 另一方面,它是另外两种主要语言 – Java和C#的智慧前身。 因此,直接从C ++派生的C ++和技术在软件工程领域的专业项目中占有相当高的比例(我没有确切的数字,但是高于50%)。
对于任何经验丰富的软件开发人员来说,学习一种新的静态types的面向对象语言应该是一件小事。 学习新语言的主要困难在于学习编程环境的主要API。对于非常简单的C ++,STL非常小,而据我所知,C ++并没有涉及任何其他语言标准库。
学习C ++的一些最重要的原因是:
- 了解内存pipe理和指针使用情况。
- 创build自己的类层次结构,而不是依靠语言供应商提供的预打包库。
- 学习如何使用模板和通用编程原则。
我认为最后一个特别重要。 没有其他的语言(至less是我用过的语言)和C ++一样进行generics编程。 如果你想真正理解C ++的强大function, Alexandrescu绝对是一本很有价值的书。
大多数人说C ++的原因是因为这是大学里最普遍的现象。 我能给的最好的build议不是学习一种语言,而是一次学习多种语言。 如果你真的是初学者的东西,C ++是好的,但在概念上与其他语言差不多。 我绝不是一个“高手程序员”,但我认为一个高手不会把自己的知识限制在一种语言之内。
意见:你不必知道C ++是一个程序员。
但是,如果您不了解C ++的基本概念和devise注意事项,则不应该进行编程。
例如指针,高级和低级抽象如何链接,内存pipe理,堆栈,临时对象等。如果没有这些,不pipe语言如何,你都不能理解在复杂的程序中真正发生了什么。
同样,你不需要知道三angular函数来做数据库devise。 但是你永远不会find一个好的数据库devise师在10分钟内不能certificatecos(ba)=cosb*cosa-sinb*sina
。 确保Dennis Ritchie在deviseC时知道复杂的微积分,每个优秀的验光师都知道什么是轻微的偏振,即使他没有正确使用它。
这取决于你如何定义“学习语言”。
学习C ++语法是编写一些实践应用程序和阅读博客和论坛(以及绝对Stack Overflow(:))的基本问题。
然后,你可以学习其他的结构,如指针,类…写他们是从基本的语法向前迈进了一步。
然后是数据结构,我相信这就是C ++的硬核所在:代码中的实现通常类似于用普通伪代码编写algorithm。 事情是,通常你必须实现它们,这使得你必须知道抽象数据结构的几乎每一个细节 – 这与在内置哈希表,结合列表等结构的语言工作方式相反。
精通高级语言可能会让你成为程序员,但在这方面“知道”C ++会让你意识到你所编写的所有程序中所做的事情。 可能有人会提出“如果你想知道你在做什么,学会集会”的论点 – 我还不知道集会,所以我不能回答,但我仍然说C ++有点“可学”。
然后有不同的图书馆,所有的优点和缺点,都在不断发展…所以“学习C ++”不是一个真正的过程,你可以达到的目的:)
我想说的主要好处是学习内存pipe理和指针。 请记住,无论使用什么语言(甚至是配备了GC的语言),知道如何处理内存都有很多好处。 你根本没有获得大多数其他主stream语言的经验。
许多较新的语言,如Java和C#都有C ++的根基。 通过学习C ++,您将获得许多用新语言抽象出来的概念的经验。 它会让你更欣赏更新的语言。 诸如内存pipe理之类的东西在Java / C#中是非常微不足道的,但是在C ++中正确实现需要很多思考和耐心。
这取决于你在做什么计划。
语言是工具箱中的工具。 select合适的工作。
- Windows开发:C#
- UNIX开发:C ++或Java
- OS X开发:Objective C或REAL Basic
最后,这是一个判断的呼吁。 我相信有人会对上面的列表提出质疑。 这是一个意见,而不是福音。
🙂
我认为你需要定义“学习”。 这是否意味着一个教程,你完成了? 这是否意味着构build一个应用程序(什么样的?)? 同样的人告诉你,你必须学习C ++在不同的应用程序中使用它。 下一步是“你必须学会做这种应用…”
如果没有它,我觉得你可能会觉得不完整,并正在宣传“真正的”程序员。
学习它的另一个原因是理解为什么这么多人爱/恨它。 而不是用他们的话来说,自己学习,以更好地理解这些人与语言的价值观和问题。 它肯定有它的球迷和反对者。
就个人而言,使用它,对于我所做的工作有一些非常好的方面,但是把它留下来,我不会错过的。
我会说学习C ++,因为“这是一个更好的C”。 C是系统编程的语言,所以如果你打算这样做,你会想知道C / C ++。
无论你决定走哪条路,彼得·诺维格(Peter Norvig)出色的“十年教你自编程”都是中肯的。
再次想到,也许最好的理由是说服那些人停止告诉你该怎么做。 8)
如果你有意成为一名高素质的专业开发人员,而不仅仅是一个业余爱好者,networking或初级开发人员,那么我build议学习C ++。
一个比喻:如果你build一座没有良好的基础的房子,它可能会持续一年或两年,但在某个时候它会倒下。 但是,如果你build造一座有着良好基础的房子,即使你一辈子也不会再看到这些基础,你可以保证你的房子结构合理,可以开展业务,而不用担心你的房子掉下来。 从C#或Java这样的高级语言开始的开发人员正在build造他们的房子,没有基础。
因为这会提高你作为程序员的质量(如果你困扰)。
另外要提的是 – 最近的语言比较抽象。 老版本的语言更接近CPU使用的语言(对我来说,C ++看起来像是一个历史(任何人都不会冒犯))。
例如 – 我开始在ASP.NET中编码。 了解HTTP和HTML让我深入了解了ASP.NET在幕后做了些什么,因此我能够更好地控制它。
结论 – 你需要了解什么是从什么抽象的抽象。
别忘了C ++是抽象的,也是从别的东西构build的。
你不应该关心C ++。 尝试一些新的,如C#,ruby,python和最好的,关心devise模式和工作方法。 这是带你到天空!
学习使用C ++进行编程的一个原因是避免修改,扩展和引入与C#和Java等其他专有语言相关的新技术思想。
在过去的12年里,你用java和C#看到过多less种GUI技术? 众多。
你在过去12年里看到过多less新概念? 众多。
任何人都不能没有.NET或Java的生活? 绝对。