知道C和/或C ++会让我成为更好的开发人员吗?

时间:2009-04-14 12:41:06

标签: c++ c

我经常考虑尝试学习像C ++这样的语言,以便更好地理解计算机。对我来说,知道C / C ++就像是编程的黑带。但是,你看看一些伟大的开发人员,我不认为他们曾经学过C ++。

对于某些下雨天(更像是下雨年)来说,这是一个好主意,还是应该继续推动我已经知道的语言的界限。

编辑: 回答一些问题。我有几年的Java经验。在Delphi工作了很多,大约一年半以前开始使用C#来创建我必须创建的一些Web应用程序。

25 个答案:

答案 0 :(得分:24)

您学习的每种语言和工具都会让您成为更好的程序员。是。

答案 1 :(得分:19)

当然,这取决于你想要改进的地方。例如,如果您要进行一些系统编程,那么您应该这样做。但是,如果您想在Web应用程序前面开发,请不要打扰。有关详细信息,请参阅:Which sector of software industry uses c++

开始学习时要记住的第一件事是:There is no such language as C/C++.

答案 2 :(得分:13)

我建议您阅读本书:http://csapp.cs.cmu.edu/

这对任何程序员来说都是非常好的阅读。它真的教你如何在低级别工作。

这本书使用了汇编和C,但我真的不知道它是否可以在没有C知识的情况下读取。 无论如何,我建议不要花太多时间学习C.你可能需要至少一年才能开始理解如何编写好的C程序(我个人需要两年)。

C和C ++没有教授很多关于低级别的东西(是的,我知道许多人声称相反)。你学会自己分配/释放内存,但我认为这就是它的全部内容。另一方面,我上面链接的这本书将教你如何编写自己的内存分配器,如何优化程序等等。

答案 3 :(得分:10)

始终鼓励扩展您的知识库。 And as often stated by Joel Spolsky.

  

他的论点是,它就像用棍子驾驶并了解机械,用C编码(或易于使用的装配)可以帮助你理解引擎盖下发生的事情

答案 4 :(得分:8)

我会学习C ++模板作为大脑练习。这与任何其他编程技术一样,将迫使您在更广泛的基础上思考任务。

答案 5 :(得分:8)

了解语言并不能使您成为更好的开发人员。以正确的方式应用语言(大多数时候避免滥用语言概念)。

使用语言的力量可以成为更好的开发者

答案 6 :(得分:6)

C和C ++没有什么特别之处,除了:

  • C是一种非常非语言的语言。它的目标是/或多或少地创建一个可移植的汇编语言。比这更先进的东西,在语言中没有位置。因此,在语言方面,从C学习 nothing 。这绝不是一种困难的语言,但它需要做很多工作才能实现最简单的事情。与更高级别的语言相比,它当然非常容易出错并且不安全。
  • C ++是一种非常复杂的语言。多年来,它产生了许多不同的影响,并从各种语言和编程范例中窃取了想法。然后在过去十年左右的时间里,C ++社区已经完全发明了自己的范例(泛型编程)。因此,C ++为许多常见的(在所有语言中)问题提出了一些非常聪明的解决方案。尽管人们喜欢看不起C ++,但在C#工作时我经常会想念它。 C ++中有许多高级技术和抽象,更简单,更清晰,更优雅。所以从纯语言的角度来看,我认为C ++值得学习。 (我希望Javas或C#的设计师不愿意这样做,而不是将他们的语言基于可以更准确地描述为“C with classes”的语言。

但我认为你所学到的是学习这些语言会让你更好地理解“幕后发生的事情”。

我可以看到这一点。 C / C ++为您提供了几乎直接映射到底层内存地址的指针。学习这些语言肯定会让你对下面发生的事情有一种直觉。 (但是一如既往地凭直觉,它并不总是正确的.C ++中最常见的错误之一是假设“指针是内存地址”。它们不是。在很多方面它们的行为相似,但指针服从了很多额外的实际硬件中可能存在或可能不存在的约束。)

所以对于这些事情,为什么不直接去源?学习汇编,了解CPU本身,了解编译器。

以上所有内容都值得学习,并会让你成为更好的程序员。但是为了语言而学习C ++(它不是很漂亮,但是可以从中吸取教训),并通过直接研究它们来了解所有底层机制(编译器,运行的硬件,CPU)

但无论你怎么做,绝对是多元化的。你应该学习你实际工作的语言,显然是,但不要止步于此。学习别的东西,几乎不管它是什么。更多的语言,或对底层基础架构的更好理解,它都会让你成为更好的开发人员。

最后,不要将C / C ++视为“黑带”。特别是C ++可能是最难掌握的语言之一,但这并不意味着知道它的人是最好的程序员。远非它。

答案 7 :(得分:5)

关于编程中的自我改进有一篇很棒的文章: "Teach yourself programming 10 years"

它说,学习新东西总是好的。 C ++很难学,甚至更难掌握。

但是它会教你各种低级处理,这对于编写大型软件时的理解至关重要。

答案 8 :(得分:3)

Joel和Jeff在podcasts早期对此进行了大量辩论,这是一个不确定且非常有争议的问题。

像大多数年长的程序员一样(在这里没有放弃我的年龄)我倾向于相信你对底层系统及其内部工作的了解越多,你就越能使用更现代和抽象的编程方式。

因此,了解(m)alloc(为类似字符串或结构的变量分配内存),从而理解为什么某些字符串操作在高级语言中速度慢可能是有利可图的。这只是一个例子。

如果你想了解OO概念,那么有更好的地方可以使用像C ++这样的混合语言(可以感觉到OO和非OO层之间的中断)。

所以,我想说,看看C不会有害。

答案 9 :(得分:3)

我会说每种新语言都会提高你的编程技巧,所以学习新语言总是一个好主意。然而,我发现学习语言属于其他范例,而不是我目前最习惯的范式,这是一种让更好的程序员更好的方式。例如,学习prolog让我真正理解第一次递归,smalltalk和ruby帮助我理解动态打字的美妙,lisp只是让我心烦意乱,C让我意识到窗帘后面发生了什么......

如果您正在考虑学习一门新语言,我会说它。 C将帮助你理解内存分配,除此之外(除非你想要更好的东西,比如汇编程序),C ++将帮助你爱上你可能知道的任何其他语言。 ;)

祝你好运!

答案 10 :(得分:3)

了解C / C ++使您成为更有用的开发人员。 C / C ++非常普遍,许多其他语言的语法都是从它们派生出来的。

学习C也不会伤害,因为它确实隐藏了开发人员的一切。您将在血腥细节中了解有关编译,链接,库等的知识。您将了解原始系统调用和机器架构;高级语言用自己的概念抽象隐藏的东西。

学好另一种语言以解决实际问题将使您成为更好的开发人员,因为现在您有了一个可以应用于比其他工具更好地解决某些问题的新工具。更多工具总是有用的。学习用另一种语言解决问题的新方法将进一步巩固你对概念,设计模式,数据结构等的知识。这只会是一件好事!

答案 11 :(得分:2)

学习另一种语言会让你成为更好的程序员。特别是当语言的范例与你已经知道的任何其他语言明显不同时!

学习C可以让你更好地掌握你实际在做什么。它就像习惯了一个全功能的图形计算器,然后学习所有的算术,代数,微积分,并用黑板和粉笔自己绘制图形。这将是很多工作,但如果你成功了,你的代码的心理模型将更接近于机器中实际发生的事情。

成为一名优秀的程序员并不是必需的。实际上,我相信一个好的编码器的特征之一就是能够在更高的抽象层次中理解代码,并将系统视为一个整体。低水平的知识无助于你了解大局。但是,如果你想成为伟大的,你必须超越好。您应该能够从上层概念图级别到裸机器代码级别的许多不同抽象级别理解系统。了解C将帮助您理解低水平。能够调试C将帮助您在各个级别进行故障排除!

C ++允许您执行C的低级操作,但添加了一堆抽象机制和代码重用工具,因此您可以提高工作效率。如果您已经了解Python,Ruby,Perl,VB,Java等更高级别的语言,我建议您努力学习C语言,而不是尝试解决C ++问题。学习另一种语言的目的应该是扩大你的视野。这样,即使您最终没有以专业或业余爱好者的身份使用它,您仍然可以提高您使用的语言的编码和分析技能。

答案 12 :(得分:2)

C ++ - 我不确定。

C - 当然:

  • 它会让你意识到记忆管理 - 例如没有人“认为”C可以理解或考虑Apache pool

  • 它会让你意识到矢量/位集计算和循环展开等性能问题(因为有时你会手工完成)

  • 使用Unix感觉更舒服

  • C仍然是行业通用语

答案 13 :(得分:1)

更多地了解一种语言永远都不好!如果你学习C和汇编程序,你会看到它是如何开始的。这对于会议上的会谈非常有用;)

这比你的编程技巧更多关于你。

答案 14 :(得分:1)

是。 (种)

每次用内存管理语言编程时,你都可以让编译器为你工作,随着时间的推移,你会依赖于你对内部运作知之甚少或根本不了解的东西。

在非内存管理语言(如C或C ++)中,您必须花时间考虑指针在方法结束时指向的位置,是通过引用传递还是返回变量,以及其他使您以更客观的方式思考你所编写的代码。

问题是,在你理解一天中使用的许多数据结构背后的基本概念之前,能够知道诸如在java中使用向量或arraylist之类的东西才是正确的方法。今天。

所以是的,学习使用C或C ++会让你成为更好的程序员,但是你是否选择了解这些知识并使用它来让你成为更好的开发人员是你的选择。

答案 15 :(得分:1)

设计应用程序时最重要的事情之一是围绕语言的用户代码/库的数量,代码片段,教程和其他所有内容。

那就是说,C语,也就是古老的语言,是世界语应该用于人类语言 - 每个人都应该知道的语言:)

为什么?这并不重要。重要的是你到处都会遇到C.

答案 16 :(得分:1)

C语言编码让您更接近真实系统的工作。它真的是“机器的编码”。

它还让您更深入地了解Java / C#/ Python / Ruby等语言正在为您做些什么。

最后,绝大多数(尽管不是全部)* nix / * BSD代码都是用C语言编写的,以及许多现代系统,所以如果你正在考虑补丁或尝试它,知道它会打开你的大门加入某个公司的团队。

答案 17 :(得分:0)

是的,如果你的意思是深入了解,而不仅仅是一些基本知识。 C ++结合了与计算机内部的接近度和高度灵活性,因此深入了解C ++意味着您可以理解计算机的工作原理。而后者肯定会给你一个优势。

答案 18 :(得分:0)

可能。有一些非常重要的概念被推到了你的脸上,特别是在你必须要处理的C中。

我会说更进一步,学习装配。我从来没有用任何汇编语言进行专业编程,但是我在Assembly Langauge for the PC中完成每一章和练习所花费的时间已经为我的任何学业,学校或独立学生带来了最大的收益。您将知道指针和偏移是什么,您将更深入地了解字符编码为何重要,您将了解堆栈和堆,内存管理等。您可能永远不会直接使用任何一个,但它会让你成为更好的程序员。

答案 19 :(得分:0)

编程语言只是一种工具。为了变得更好,你必须更好地了解你的工具,无论你的工具是C / C ++,画笔还是其他任何工具。

答案 20 :(得分:0)

有一句话:

你和你认识的语言数量一样多。

这是学习它们的唯一真正原因;)

答案 21 :(得分:0)

你应该尝试学习C,你应该尝试学习C ++。当你这样做时,你很快意识到为什么我将两者分开了。

它也会让你成为一个更好的程序员,因为与目前为止所知的语言相比,你将了解更多关于运行代码的机器的信息。这本身已经足够奖励了。学习C ++也可能会让你学习多重继承,这是另一种有用的编程概念,并不是在其他语言中广泛传播。如果你学会好好使用预处理器,那么你肯定也会错过其他语言。

然而,要记住一件事:要真正学习这两种语言需要很长时间,因为仅仅阅读它们是不够的。您需要与他们合作并解决实际问题。这是学习这些语言时最有价值的部分,但它也是最令人沮丧和耗时的部分。我现在正在学习10年,我觉得无法说我现在都懂两种语言。我感觉很舒服,但我知道我远非完美。

答案 22 :(得分:0)

你在谈论C或C ++吗?

您没有说出您目前所知道的内容。如果你没有做过C,我肯定会推荐它。它将帮助您了解低水平,接近金属的情况。它的设计和样式影响了当前的语言/脚本实现。

如果你想学习OO语言,我可能会建议更简单地介绍OO - 最初可能是Java或C#。 C ++可能是这个主题的一个令人生畏的介绍。

答案 23 :(得分:0)

我建议你学习C语言。这将帮助您了解有关计算机编程的所有信息。对我来说,有一本好书供程序员学习从编程到内存管理,操作系统概念和其他东西的C编程。

http://www.cs.cf.ac.uk/Dave/C/

看看这本网页,你就能知道这种语言有多强大......

答案 24 :(得分:0)

如果我必须用一个词回答你的问题,“是”。掌握至少一种语言是很好的,但是学习不止一种语言总是更好......谁知道明天会发生什么。

就理解计算机而言,C ++可能不是那么有用,但C ++在编程时确实为你提供了很多选择。

是的,学习它会让你成为更好的程序员吗?确实如此。每种语言在某些方面都是独一无二的学习更多语言有助于您探索在另一种语言中实现一种语言的独特性的可能性。