在Stack Overflow播客中,Joel Spolsky经常对杰夫阿特伍德强调Jeff不知道如何用C编写代码.他的声明是"知道C可以帮助你编写更好的代码." 他还总是使用某种涉及字符串操作的故事,以及如何知道C将允许您用不同的语言编写更有效的字符串例程.
作为一个知道一点C但又喜欢用perl和其他高级语言编写代码的人,我从来没有遇到过我能够通过编写C来解决的问题.
我正在寻找现实世界情况的例子,在这些情况下,在用高级/动态语言(如perl或python)编写项目时,了解C会很有用.
编辑:阅读你们提交的一些答案很棒,但在这方面对我来说仍然没有任何意义:
以strcat为例.在C中组合字符串有正确的方法和错误的方法.但为什么我(作为高级开发人员)认为我比Larry Wall聪明?为什么语言设计者不会以正确的方式编写字符串操作代码?
Joel Spolsky使用的经典例子是滥用strcat和strlen,并且总体上发现了"Shlemiel the painter"算法.
并不是你需要C来解决高级语言无法解决的问题,而是知道C井可以让你了解所有这些语言层次下发生的事情,从而可以编写出更好的软件.因为只有这样的视角可以帮助你避免编写你不知道的代码,例如实际上是O(n ^ 2).
编辑:基于评论的一些澄清.
知道C不是这种知识的先决条件,有很多方法可以获得相同的知识.
了解C也不是这些技能的保证.你可能精通C语言,但仍然用你触摸的其他语言编写可怕的,粗鲁的,kludgy代码.
C是一种低级语言,但它仍然具有现代控制结构和功能,因此您不会总是陷入迷人的细节中.如果没有掌握某些基本原理(例如内存管理和指针的细节),就很难熟练掌握C语言,掌握这些基础知识在使用任何语言时往往会带来丰厚的回报.
它总是关于基本面.
在许多追求以及软件工程中都是如此.让最优秀的程序员变得最好的不是秘密咒语,而是更好地掌握基础知识.经验表明,C的知识往往与掌握某些基本原则具有更高的相关性,而学习C往往是获取这些知识的更容易和更常见的途径之一.
假设学习C会以某种方式自动让您更好地理解低级编程问题,这是错误的.在很多情况下,即使C太高,也无法让您对效率问题有充分的了解.
经典是i ++与++ i.它被过度引用,所以也许大多数人都知道这两个操作之间的性能影响.但是学习C本身不会神奇地教你这个.
我想我理解关于字符串的论点.当字符串操作看似简单时,人们经常以低效的方式使用它们.但同样,知道strncat存在并不能让您充分了解效率问题.许多C程序员可能甚至没有想过strncat必须在内部进行strlen操作.
即使使用C,如果效率受到关注,了解幕后发生的事情也很重要.知道C的人倾向于在一个进程中看待事物.汇编和机器代码是C的构建块,而C是更高级语言的构建块.
这并不是特别正确,但显然C比许多更高级别的语言"更接近金属".这至少有两个影响:效率问题并不隐藏在隐式行为背后,而且更容易搞砸.
因此,您需要了解C如何为您提供优势的具体示例.我不认为有一个.我想,什么人的意思时,他们说这是一个知道发生了什么事情在任何一种语言,你发生的事情写在幕后帮助您了解如何编写代码更为明智的决定.但是,例如,假设C是"幕后发生的事情",这是错误的.