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

用户:
工作网用户
发布日期:
2019年8月14日
访问量:
2+

译者注:作者从事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是最安全的,因为我的经验。我知道这是弱点和长处。

致敬先辈:伟大的C语言之父——丹尼斯·里奇

人们对里奇的纪念,远不及对乔布斯铺天盖地的悼念。可是,里奇值得人们那样去做。还是有人出来说了句公道话。“史蒂夫·乔布斯去世引发了巨大的反响,这当然合情合理。即便影响实际上更为广泛,丹尼斯却不为公众所知”,罗伯·派克说。罗伯是一名在Google工作的程序员,作为业界的传奇性人物,曾……阅读全文 >>

为什么我学完了C语言,发现啥都干不了?

很多人学习C语言的时候会发现,为什么我学了这么久但是感觉啥都做不了呢?这是很多初学者都会疑惑过的事情,但是你要C语言几乎是所有语言的实现基础,所以不存在做不了的事情,只是相对来说谁做更合适,编写游戏和软件都不是问题。为何C语言如此强大?1、C语言是许多高级计算机语言的基础,学好C……阅读全文 >>

一个优秀的程序员,需要精通C语言吗?

现在很多程序员特别是没有学习过C语言的,对这个语言都怀有很强的敬畏之心,周围很多开发java的同事也都觉得底层的语言太难了,心里还是觉得学习底层语言的比较厉害,编程语言的种类是非常繁杂的,不可能都挨着学习一遍,一个优秀的程序员从本质来讲,不在于是不是专注于一种编程语言,而是对编程……阅读全文 >>

先学C语言还是Python?资深程序员往往是这样建议的!

编程是一门手艺,学习编程首先要有目的,先带大家了解一下自己需要学习什么吧!0、学一门语言其实学什么语言都可以,因为语言都是互通的,C语言也好,对于初学者来说,Python也很适合。但有一个误区,请勿进入!那就是编程语言和编程的区别——很多人学习语言都忽略了一个本质问题,就是语言是……阅读全文 >>

C语言程序员未来发展前景如何?一文告诉你

首先,C语言程序员未来依然具有较多的就业机会,随着物联网的全面发展,未来C语言的应用场景依然比较多,而且由于C语言有健全的语言生态和较快的运行速度,未来很长一段时间内依然是开发人员重要的选择。目前C语言主要的应用场景集中在三个领域,其一是操作系统领域;其二是容器开发领域;其三是物……阅读全文 >>

35年老程序员个人谈:C语言时代行将落幕

这几天来,我在思考那些正在挑战C语言的系统编程语言领袖地位的新潮语言,尤其是Go和Rust。思考的过程中,我意识到了一个让我震惊的事实——我有着35年的C语言经验。每周我都要写很多C代码,但是我已经记不清楚上一次我创建一个新的C语言项目是在什么时候了。如果你完全不认为这种情况令人……阅读全文 >>

为什么选择学习C语言的人越来越少?

最近公司招聘两个岗位一个是web后台开发,一个嵌入式开发,投送简历的比例差不多是十比一,从这个态势看学习C语言的比例相比前几年热度下降了许多,因为大家从招聘力度上看要C语言的公司比例很低,而且相对来说C语言学习起来还难入门,所以越来越多的人选择学习更加好入门的语言,这也是语言发展……阅读全文 >>

内容声明:工作365网为第三方交易平台及互联网信息服务提供者,本文由用户上传并发布,工作365网仅提供信息发布平台。文章仅代表作者个人观点,不代表工作365网立场。旨在为大家提供一个信息交流的平台,仅供学习交流使用,严禁用于任何商业用途。未经作者许可,不得转载。
发布讨论

网友评论

发表讨论请遵守相关规定
没有简评记录,欢迎发表您的观点

相关话题

程序员

程序员(英文Programmer)是从事程序开发、程序维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。

C程序员

一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国

注册简历找好工作免费发布招聘信息