25年、博士、C\/C++程序员的告白:多年来代码依然存在bug

时间:2022-01-04 14:42:14
作者丨Robert
翻译丨Diwei


译者注:作者从事C语言开发很久了,但是他写的代码还是有问题,他却觉得很正常,因为写出来的代码没有bug的人非常少,那些以为自己代码写的很健壮的人,是因为他们没有碰到难题。以下为译文。


我已经用C和C++编程超过25年了。我还拥有计算机科学专业的博士学位,我是Mozilla的一名杰出的工程师,过去十年我的主要工作是开发和审查C++代码。我写的C/C++代码时不时就会有问题。然而我对此并不感到羞耻,我也不知道是否有其他人能做到代码一点问题都没有。我听说Daniel J. Bernstein也许可以,但我相信,即使是在精英阶层,这样的人也少之又少。


我看到很多人断言,使用C和C++的安全问题(导致可被利用的bug)只会折磨“无能”或“平庸”的程序员,而只需要雇佣“技术娴熟”的程序员(比如说这些话的断言者),就不会存在问题。我怀疑这样的断言是邓-克鲁格效应的例子,因为我从来没有听说过他们是一个非常有技巧的程序员。


我认为,许多开发人员成功地创建了C/C++程序,这些程序可以为特定的任务工作,没有人会发现这些程序中存在的漏洞,或者试图在这些程序中寻找可利用的bug,因此,这些开发人员自然地假设他们的程序是健壮的,也没有可被别人利用的bug,从而对自己的能力产生了错误的乐观。也许有一个在线编码练习是很有用的,在那里你可以得到一些很简单的任务,你可以编写一个c/c++程序来解决它,然后你的解决方案就会被严格地检查。如果发现了代码中有错误,那么你将被降级为“无能的c/c++程序员”。


网友精彩评论


Siddharth Kannan于2017年7月17日 19:37评论道:


你认为这可能就是为什么我们不应该在C中编写类似于TLS这种安全性的原因吗? (为了避免像Heartbleed这样的事情,最近Cloudfare发生溢出+数据泄露)


FDominicus于2017年7月17日 20:23评论道:


我从事C语言编程的时间稍微久一点。我不喜欢C++,也尽量避免使用C++。但我是Objective-C的忠实粉丝。无论如何,C语言的问题是内置的。有很多工具可以帮助解决这个问题,但是这些问题仍然存在。我认为没有实际的方法,只要有问题,你就很容易迷失。无论如何,C语言的成功史是其它语言无法企及的。每一个类似于unix操作系统都使用它。任何Windows操作系统都可以使用。每一个严谨的关系型数据库都使用它,而且支持库的数量不计其数。几乎是无法计量的。是的,C语言也是一个失败的故事,但是他们不能以任何方式阻止它。


c-编译器是最好的,而且它们不会轻易地将任何基准都释放掉。


Janis Kovalevskis于2017年7月17日 20:57评论道:


在过去的几年中,我还没有看到过一个真正了解C++的人,并且真正理解了“底层”是什么,即使他们确实做到了(在语言方面),还有下一层的编译器实现“细节”、库实现等等,这些都是在增加复杂性。


所以,是的,很遗憾,但是你在这一项上是110%。


Pente于2017年7月18日 09:57评论道:


安全是相对的。我怀疑任何语言都是安全的吗?对我来说,C是最安全的,因为我的经验。我知道这是弱点和长处。