有没有程序员必须知道C?是的,为什么?没有为什么?

时间:2009-01-29 10:04:15

标签: c

因为我在大学的第一年,我总是羡慕我的同伴(主要是来自科技导向的专业学校),因为我知道C.我来自一个以自然科学为导向的学院,从未有过编程经验或课程但是一些夏天使用PHP的工作是从7个小时的自学PHP教程中学到的(我的编程兴趣是最近的)。我想知道......这是一种合法的嫉妒吗?有没有程序员必须知道C? C是否提供了对系统如何工作或如何进行编程的深入理解?我知道在编程C时你必须对缓冲区,内存等有很深的理解。所以我希望你的意见。

17 个答案:

答案 0 :(得分:15)

不,你不必知道C.但是C(或任何其他“接近机器但不是汇编程序”语言)的知识大大增强了你作为程序员的潜力。因为你会了解更多的内部运作。

当然,汇编程序的知识也很有价值。但在上一段中,我想针对计算机语言的低端。仅仅因为在现代语言中,我们认为理所当然(OO,广泛的库,垃圾收集等等)。是的,它可以帮助我们的程序员更有效地工作。但它隐藏了我们有时需要看到的一些机器方面,这就是为什么它如此重要以至于我们需要了解内部工作原理。

答案 1 :(得分:11)

虽然我认为了解内存分配,指针,寄存器等是很重要的......我会说,过多的C经验也可能成为掌握更高级语言或OO语言的障碍。 C倾向于让你在程序上思考,在某些情况下这可能是件坏事......

我绝对不会推荐C作为第一语言,但在某些时候做一些C会有很大的帮助......

作为旁注,我认为汇编对于帮助您理解基本原则更有用。与此同时,汇编远远超出您将使用的任何语言(除非您在非常专业的领域工作)。这将有助于您在进行装配时保持不同的心态,而不是使用更高级别的语言。

答案 2 :(得分:8)

这是一个可以讨论的话题。我个人认为,当您了解幕后的内容时,了解C会增强您使用其他语言的能力。但是,你 知道C能够生成高质量的代码。

Eric Sink曾经想过that question

答案 3 :(得分:4)

我从大多数答案中找不到的东西是C是一种非常容易学习的语言。您需要了解的有关语法的所有内容都包含在一本简洁,简洁的书籍(K& R)中,其中包括所有标准库。所以我鼓励你至少浏览一本书,看看它是什么,即使你不打算使用它。

对于大多数现代的基于C语言(C ++,C#,Java),简单的C语法只能扩展。你不能说你真的了解这些语言,直到你掌握了它们附带的数百个图书馆的至少一部分,这可能需要数月或数年的经验。

C的难点在于它可以让你了解下面机器的真实本质。如果你真的想弄清楚计算机是如何工作的,你需要理解指针,内存分配,堆栈与堆与可执行代码之类的东西。您可以在几个小时内学习基本的C语法,这将使您了解更多信息。说“我是C专家”只是说“我真的理解计算机是如何工作的”。

答案 4 :(得分:3)

您不一定要了解C,但每个程序员都应该了解基本的机器架构以及应用程序如何与操作系统和硬件进行交互。

显然,如果你要学习这个,C语言是一个很好的选择,但不是唯一的选择。

了解C的另一个好理由是,很多代码都是用C语言编写的,所以如果你想从别人的代码中学习,那将非常有用。

答案 5 :(得分:3)

除了Gamecats的回答,根据我与其他语言的人一起工作的经验,知道C的人和没有C的人之间的技能存在差异。我主要在Java工作,当然感谢我在做C之前花了几年时间与C合作。最重要的是,我也做了相当多的Perl工作。我想知道尽可能多的语言有助于为您提供不同的工作观点并应用不同的范例

答案 6 :(得分:2)

C不是我选择的语言,但直到今天,C无处不在。

当我使用LuaCurl在Lua中执行一些小代码时,我使用了一个C库。 Lua本身是用C语言编写的。

当我在Squeak Smalltalk中使用一些Seaside Web应用程序时,我使用在C中生成的VM(Squeak VM用Smalltalk编写,然后它生成C代码作为便携式汇编程序)。

所以我不会开始用C学习编程(有关其他选择,请参阅this thread),但作为一名程序员,即使它不是您选择的语言,知道C也非常方便。

答案 7 :(得分:2)

同样地,并非每个技工都需要知道引擎的内部工作来修理汽车,并不是每个程序员都需要学习C来生成代码。 然而,那些做的人,对工艺有了更好的理解,并最终取得了更高的成功。

答案 8 :(得分:1)

然而,

我在这个主题中与其他人有同样的感受,回答所提出的问题:

知道C的唯一程序员是C程序员。

答案 9 :(得分:1)

我想你有。

语言有自己的演变。它们是在计算机系统非常有趣和快速发展的过程中发展起来的。 CPU功率增长,功能增长,Assembler变得更复杂......一切都变得更强大。

事情是:如果您从未见过低级别和“简单”的开头,并且从一些高级语言(如C#,C ++或Java)开始,您将无法理解这些非常强大的优雅或后端视角语言。

我认为你不需要学习LISP,因为它与普通的C语言有很大的不同。但有些C是必须知道的。它适用于开发人员,非常接近机器代码。了解机器编程时机器的作用。

答案 10 :(得分:1)

所有知识都很有用,所以是的,你应该羡慕他们的知识。你也应该羡慕那些是AI书呆子并知道LISP等的人。最好的组合是动态语言,函数式语言,SQL,低级语言和面向对象语言。

如果你想让一些陌生人提出一些建议,我会去Python,OCaml,SQL,C和Java / C#。但是,找到自己的路径: - )

答案 11 :(得分:1)

内存分配和指针。

在处理C和C ++之后,即使只是在学校,你也可以更好地了解内存中需要发生什么,以便你可以抛出对象和引用,你可以更好地理解它们,例如,垃圾收集意味着。

此外,在学校,从Pascal开始,然后是C,让我们首先学习“编程”,旧的方式,然后转向更高级的语言(OOP等)

答案 12 :(得分:0)

我会用一个比喻:为程序员知道C就像知道拉丁语(西方语言)作家。这不是你需要的东西,特别是如果你只是写体育专栏或烹饪食谱书,但如果你想改进你的工艺,我认为几乎是强制性的。但它对普通软件的日常工作没有用。 或者知道汽车驾驶员的技工,或者如何为水手建造风帆。在某种程度的专业知识方面,您需要知道您使用的内容是如何在内部工作的。

如果您学习C,请尝试掌握指针概念以及它们映射到硬件的方式。这真的是学习C的重点。不要把时间花在剩下的语言上。

答案 13 :(得分:0)

必须知道/学习C?可能不是,虽然它可能会使学习一些概念更容易。了解有关内存分配,结构和各种指针的内容是值得的,C是一种很好的语言,用于获得这种理解。另外,说实话,“直”C真的不复杂。搞砸是肯定的,但本身并不复杂。我建议抓住一个不是C ++的编译器,这种方式可能会让人感到疯狂。 (Quick C For Windows的美好回忆)

必须了解/学习C ++?绝对不是。

答案 14 :(得分:0)

也许这只是我特殊的教育经历,但我在大学里讨厌C / C ++并且从那时起就没有碰过它。我很感谢学习所涉及的概念,比如指针和内存分配,但尝试使用我可用的工具完成任何事情对我来说太麻烦了。我希望你的经历更好。

答案 15 :(得分:0)

(“略微”舌头检查)如果没有其他原因,你应该学习它,而不是让你当时你正在使用的任何语言。

答案 16 :(得分:0)

我不称自己为C程序员,但我可以用C语言编写代码。在我的职业生涯中,它曾多次帮助过我。我花了很多时间使用Visual Basic,还有一些你无法用VB做的事情。下到C做窗户挂钩之类的事情非常方便。它让我成为“英雄”一两次。