首个计算机Bug的由来

标签: 计算机 bug | 发表时间:2011-09-10 00:23 | 作者:程序员 万俟尘
出处:http://www.jobbole.com/blog.php
  导读:“Bug”一词,是指“故障”、“缺陷”。了解软件开发的朋友都非常熟悉,程序员和测试人员更不用说,在工作中会常遇到。

  9月9日下午在微博上看到@新浪科技 发了一条微博消息

  #历史上的今天#1945年的今天,一只小飞蛾钻进了计算机电路里,导致系统无法工作,一位名叫格蕾丝·赫柏的人把飞蛾拍死在工作日志上(见图),写道:就是这个 bug(虫子),害我们今天的工作无法完成——于是,bug一词成了电脑系统程序的专业术语,形容那些系统中的缺陷或问题。

首个计算机Bug的由来   伯乐在线 - 职场博客
(图1)

  (注1:微博消息是摘自一位新浪博主的博文,点击进入查看后,可知那位博主也是从网络转载。)

  好奇使然,于是在Google查找信息,摘录并编译了一些英文信息。


  美国海军网站上的记录

  下面的蓝色段落,摘自美国海军网站(Naval History & Heritage Command)。

  The following image shows an organism of great historic significance, reportedly first identified and named by Lieutenant Grace Murray Hopper while she was on Navy active duty in 1947.
  下面这张画展示了一个有伟大历史意义的生物,由格蕾丝·穆雷·霍波上尉首次确认并命名。1947年,格蕾丝正在海军服役。

首个计算机Bug的由来   伯乐在线 - 职场博客
(图2:美国海军网站的图片,注意图中红色箭头指示的“1947”)

  The First "Computer Bug"
  首个“计算机Bug”

  Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard University, 9 September 1947. The operators affixed the moth to the computer log, with the entry: "First actual case of bug being found". They put out the word that they had "debugged" the machine, thus introducing the term "debugging a computer program".
  1947年9月9日,正在哈佛大学测试马克II型艾肯中继器计算机,在电板编号为70的中继器触点旁发现了一只飞蛾。操作员把飞蛾贴在计算机日志上了,并写下了“首个发现bug的实际案例”。他们提出了一个词,“debug(调试)”了机器,从而引入新术语“debugging a computer program(调试计算机程序)”。

  In 1988, the log, with the moth still taped by the entry, was in the Naval Surface Warfare Center Computer Museum at Dahlgren, Virginia.
  1988年,这个仍然贴着飞蛾的日志,保存于弗吉尼亚州达尔格伦的海军水面作战中心计算机博物馆。


  维基百科上的词条

  另外,在英文维基百科的 Softwar bug 词条中,有比较全面的介绍,摘录翻译部分内容:

  “bug”术语的发明,因为格蕾丝·霍波她公布过早期电子计算机的一个故障原因,通常错误地归功于她。这个版本的故事源自下面这段话:“在1946年,当霍波退役后后,她加入哈佛大学的计算机实验室,继续研究马克II型和马克III型计算机的工作。操作员在追踪马克II型的错误时发现继电器中有一只飞蛾,遂有bug术语。这个bug被仔细移除,并被贴在日志本上。这带来的第一个bug,就是我们今日所说的错误(error)或程序中的故障(glitch)。”

  格蕾丝·霍波其实并不是那位发现这只飞蛾的人,只是她欣然承认了而已。虽然日志本上的日期是1947年9月9日(见图2),不过有时候被错误地报导成1945年。发现飞蛾的操作员,包括威廉姆·比尔·伯克,伯克在弗吉尼亚州达尔格伦的海军武器实验室,熟悉工程术语,好逗乐,给飞蛾写下了“首个发现bug的实际案例”。霍波喜欢讲述这个故事。这个日志本现存于史密森尼国立美国历史博物馆,飞蛾还完整地贴于其上。


  日志本的信息

  从James Huggins的这篇关于第一个计算机Bug的文章中得知:那个日志本经过一些波折后,海军水面作战中心计算机博物馆在1991年捐赠给史密森尼国立美国历史博物馆。后因为经费和空间的缘故,美国历史博物馆拖了好些年才把这个日志本实际展出。


  综述

  综合上述信息,可以知道新浪科技所发的那条微博消息时,有不少错误,至少有两处。如下:
  1. 时间错误,并非“1945年的9月9日”,应是“1947年的9月9日”。
  2. 关于飞蛾的死,并不是格蕾丝·赫柏拍死的。发现飞蛾的时候,飞蛾已经死亡。
  关于时间错误,因为新浪科技编辑是摘编自一篇个人博客,要编辑去查证,有点不现实。

  关于飞蛾的死,那个人博客中是说:“哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用镊子将蛾子夹出来,计算机又恢复正常。”(且不说个人博主的说法是否正确)编辑硬要说是“格蕾丝·赫柏的人把飞蛾拍死在工作日志 ,有点让人无语。“粗心”不是理由吧?

  另外,新浪科技的那条微博转发近3000,并且有不少带V字的账号转发,这条微博,误导了不少受众啊。

首个计算机Bug的由来   伯乐在线 - 职场博客

  百度百科中的bug词条,在介绍bug由来时,写的也是“1945年”。此外,很多相关的中文文章,也都写着“1945年”。


  更新:关于“1947年9月9日”这个时间

  除了维基百科的 Softwar bug 词条中有说明。另外,
  1. 美国海军网站关于格蕾丝的页面中有说明:http://www.history.navy.mil/photos/p...-h/g-hoppr.htm
  2. 现保存那个日志本的史密森尼国立美国历史博物馆的网页也是1947年http://americanhistory.si.edu/collec...y=35&objkey=30

  上面这两个来源,不能否认其权威哦。


  结束语

  虽说网络信息很多,判断真伪不容易,但像这种涉及国外的历史信息,其实多动动手,就可以在英文维基百科中找到相应词条。

  对程序员来说,英语很重要!这里就不多解释,能体会的朋友自然可以体会。

  时间匆忙,或许本文有些地方也许有误,可以在评论中留言,也可以在@程序员的那些事 微博中讨论。



  ----------------------------------------------------
  本文出处:伯乐在线 - 职场博客
  本文链接:http://www.jobbole.com/entry.php/1408

  转载请注明文章来源和链接,否则视为侵权,谢谢合作!


  

相关 [计算机 bug] 推荐:

首个计算机Bug的由来

- bill - cnBeta.COM
“Bug”一词,是指“故障”、“缺陷”. 了解软件开发的朋友都非常熟悉,程序员和测试人员更不用说,在工作中会常遇到. 9月9日下午在微博上看到@新浪科技发了一条微博消息:.

找bug记(1)

- BTK 4eVeR - BlogJava-庄周梦蝶
    转载请注明出处 http://www.blogjava.net/killme2008/archive/2011/07/10/354062.html.     上周在线上系统发现了两个bug,值得记录下查找的过程和原因. 以后如果还有查找bug比较有价值的经历,我也会继续分享.     第一个bug的起始,是在线上日志发现一个频繁打印的异常——java.lang.ArrayIndexOutOfBoundsException.

找bug记(2)

- gengmao - BlogJava-庄周梦蝶
    这篇blog迟到了很久,本来是想写另一个跟网络相关bug的查找过程,偷偷懒,写下最近印象比较深刻的bug. 这个bug是我的同事水寒最终定位到的.     前几个月同事报告称有一个线上MQ集群会同一时间抛出ArrayIndexOutOfBoundsException这个异常,也就是数组越界.

Scrum中管理bug

- - CSDN博客研发管理推荐文章
如果bug来自于正在开发的sprint. 会在task阶段就被QA/Scrum Master/Product Owner标记为有bug,并且Story不能被置为done状态,这个很容易解决. 如果bug来自于已经结束的sprint,那么怎么办呢. 理想状态下是将bug放到backlogs中,然后由product owner调整其优先级,并决定放在后面的哪一个sprint中修复.

Fix Bug的五个阶段

- Sirius - 酷壳 - CoolShell.cn
下面的文章和《各种流行的编程方式》有异曲同工,请你不要理解错了. 一个非常严重和困难的bug,能够成就一个饱经沧桑深受压力的有经验的专业程序员的职业生涯. 经受这种考验的创伤程度,相当你受到了一次严重的身体伤害,离婚,或是家庭成为的离世. 研究人员在研究了计算机编程心理学后,得出了一个程序员们在解决一个困难的bug时的心路里程.

mysql order by和limit共用bug

- - 数据库 - ITeye博客
 在mysql下执行没有问题,可以得到预期结果. 但是用jdbc执行的时候就得不到预期结果了. 官网地址:http://bugs.mysql.com/bug.php?id=32933. 以下转载:http://bbs.chinaunix.net/thread-1276235-1-1.html. 我想从一个表中检索所有标题含有“中国”的数据,将它们按id排序,取前5条,所以我写了以下语句.