连着问了好几个同龄人,得到了一大堆乱七八糟的结果,可能当时他们根本就不知道“千年虫”到底是个什么东西,后来逐渐就将这个名词给忘了,这是二十年前的事了。那时候还很小,偶然听到了别人提起千年虫,而且还感觉蛮厉害的,因为有个“虫”字,所以就自然地联想出了一堆奇怪生物的样子。
其实千年虫是和计算机有关的一个事,在千禧年到来时达到了高峰。可能下意识地会认为它是某个人研制的厉害病毒,给当时的计算机造成了巨大的伤害。其实不是,千年虫不是病毒,它是计算机的一个程序错误问题,说白了就是一个“bug”。但一个bug怎么会在当时造成如此大的反响呢?而且还是大量的出现。今天小编就来讲一讲历史上的千年虫。
葛丽丝·霍普
在讲千年虫前,我们先来认识一个必要的人物——“葛丽丝·霍普”。提到她的原因自然是因为她和千年虫有着密切的关系,可能学过编程的人应该很了解这个人。她出生于1906年的美国纽约,从小就是一个学霸级别的人物,进入大学后,她获得了数学与物理两个学士学位,1934年她获得数学博士学位。后来第二次世界大战爆发,受大环境的影响,葛丽丝决定投笔从戎。
因为有点瘦,葛丽丝的参军之路起初并不是很顺利,但还是如愿以偿地加入了海军后备集团军。一年之后,她从海军预备军官学校毕业,并获得了少尉军衔。同年她被分配到了霍华德·艾肯(计算机科学先驱,马克一号的设计者)手下工作。自此她开始正式地接触计算机,并深深地爱上了这一行,而超高的数学天赋,也让她在工作中得心应手。
没过多久,葛丽丝就遇到了第一个问题,马克二号突然失灵了,当时整个团队对这台计算机检查来检查去也没发现到底是因为什么。而细心的葛丽丝却看出了端倪,原来是一只不长眼的蛾子飞到了继电器上,因此造成了整个设备的短路。事后她将这只蛾子的尸体镶在了记事本上,并声明这次事故是因为一个“bug”(英语有小虫子的意思)。而这个bug就是计算机历史上的第一个bug,葛丽丝因此也被称为“bug之母”。
他的故事到这还远远没有结束,战争结束之后,她继续从事计算机研发工作。1957年的时候,因为编程语言多种多样,极大的影响了人们对计算机的研发,因此美国人决定统一编程语言。而葛丽丝就是这次研发计划的技术顾问,而后就是“COBOL”语言的诞生,COBOL语言不是“c语言”,COBOL语言可以编写出大型计算机的程序。其实在这之前葛丽丝还干了一件大事,那就是在马克一号上为了节省储存空间,她发明了用六位数来储存时间程序的方法,这就是千年虫的起因。
千年虫到底是个什么?
综上所述,葛丽丝最先使用六位数字来储存时间,这一方法在后来被延续了下来,其表现形式就类似“95.11.02”,意思就是1995年11月2号。这是因为当时的内存可是一个精贵的东西,数据处理还需要穿孔卡片来完成,所以为了进一步的节省空间,采用最简单的方法来储存看似不太重要的时间数据,但没想到多年之后,人们迎来了时间的报复。而第一个发现bug并解决bug的人,她也创作了一个巨大的bug。
如果到了2000年,那前两位数字应该就是“00”,而计算机终归不是人类,“00”对它们来说不一定就是2000年,也有可能是公元1900年或公元1000年,这样就会得到不正确的计算结果,进而引发一系列的问题,在一些嵌入式的系统(家用电器的数控板)中一样会出现这个问题。这就是千年虫的由来,为什么要叫“千年虫”其实也很好理解,千年指的就是千禧年,虫就是对bug的直译。英文名称是“Year 2000 Problem”,可以翻译成2000年问题。
其实在上世纪五十年代末的时候,一个叫“鲍勃·贝默”的程序员就发现了这个隐藏的严重问题。随后的时间里鲍勃一直想让人们了解到这件事情的严重性,但并没有得到人们的重视。其中原因也很简单,千禧年在当时看来完全就是遥遥无期,很多人也清楚自己根本活不到那个时候,所以这些复杂的事情就交给后人去解决吧,而且这么长的时间,解决办法一定会出现的。现在一看,千禧年都已经过去20年了。
事实还真是这样,到了九十年代的时候,人们才开始着急起来,虽然当时计算机还没有大量的普及,但在很多方面已经深入了我们的生活之中。临近千禧年的时候,这一现象尤为严重,1999年,因为计算机的误判,分别在三个日子出现大规模bug现象,这似乎在提醒人们“00”造成的影响将更为严重。为此大量的人力和物力被投入到了这件事中,各行各业的程序员想尽了办法来阻止千年虫的出现。
结语
随着最后的钟声响起,千禧年来了,和它一起来的也有千年虫。而后的一年中,虽然不少电脑系统崩溃,同时也造成了不小的经济影响,但实际情况却不像人们想的那么恐怖,因为提前做了大量的准备,所以当你去取款时发现利息都没了的这种现象少之又少。同时有一部分人向不了解情况的人过度夸大千年虫的危害,甚至将其描绘成一种传染病毒,倒是引起了不小的麻烦。
千年虫的危机已经过去很久了,今天电脑和家用电器的系统也更加的完善和先进,这也多亏了前人们所付出的种种努力。但我们是否应该反思一下,这种制造完问题后,再抛给后人去解决的行为,其实无时无刻都在持续着,而且不仅仅是计算机行业之中。
参考文献《2000年问题》、《Y2K bug rears its ugly head》、《Y2K Notebook Problems》