技术中心
 
 

什么是千年虫?

   日期:2009-08-05     来源:互联网    
什么是千年虫?

引言

今年您将会在新闻中不断听到关于“2000年”的“千年虫”问题。而且在此过程中您会听到很多互相矛盾的信息。还会有很多关于“世界末日”的奇谈怪论在互联网上流传。您应该相信什么?

在本文中,我们将讨论2000年问题(也叫做Y2K问题),以便您能确切地了解将会发生什么以及将要对其采取什么措施。您还可以通过各个链接进行深入的探索。通过这些信息,您可以得出自己明智的结论。

什么是Y2K问题?


Y2K问题的原因很简单。直到前不久,计算机编程人员一直都习惯于在他们的软件中使用两位数的占位符来表示日期中的年份。例如,典型的保险公司保单或信用卡的到期日期都以 MM/DD/YY(例如08/31/99)格式存储在计算机文件中。编程人员这样做有多个原因,其中包括:

人们在日常生活中都是这样处理日期的。当您用手写支票并使用“斜杠”格式来表示日期时,你就是那样写的。 存储2位数字要比存储4位数字少占用硬盘空间(现在硬盘空间不算什么事,因为硬盘价格低廉;但是在老式的机器上这却是个大问题)。 直到前不久,一些标准机构才推荐使用4位数的日期格式。 没人会想到软件的寿命会有那么长。在1970年编写软件的人没有理由相信该软件在30年以后仍然在使用。

当输入“00”来代表年份时,两位数的年份格式会给大多数程序造成问题。软件不知道究竟应该把“00”理解为“1900”还是“2000”。于是大多数软件把它默认为1900。也就是说,大多数编程人员编写的代码或者假设那两个数字前面有“19”,或者根本就没有考虑到世纪问题,因此将其默认为“19”。这本不是问题,除非程序要执行很多有关日期的计算。例如要计算您的年龄,程序将取今天的日期,然后从中减去您的出生日期。如果今天的日期和您的出生日期不是跨越不同的世纪的话,这个减法会很正常的运算。如果跨越不同的世纪,则这个运算将不会正常运行。例如,如果程序认为今天是00年1月1日,而您的出生日期是65年1月1日,则它可能会算出您今年是-65岁而不是35岁。因此,日期计算得出错误的输出,软件崩溃或产生错误的结果。

需要认清的重要一点是,问题的所在仅此而已。这就是2000年问题的全部内容。很多编程人员在他们的程序中使用两位数来表示年份,因此程序的日期计算在2000年1月1日将不能得出正确的答案。问题仅此而已。

显然,解决方案是修复这些程序,使其能正常运行。标准解决方案有下面几个:

改写软件代码,使软件能理解像00、01、02等这样的年份指的是2000年、2001年、2002年等。 通过使用4位占位符来表示年份并且把所有软件的代码改写为能处理4位数的日期来“真正解决问题”。(关于此问题的有趣思考——为什么使用4位数来表示年份?为什么不用5位数,甚至6位数?因为大多数人都会认为不会有人在距今8,000年的时间后仍然使用那个软件,这似乎像是合理的假设。现在您可以明白我们是如何陷入Y2K问题的了。)

这些修复方法从概念层面上看很容易解决——找到代码,找出每个日期计算并将其更改为能正确处理日期就行了。问题在于在软件中有几百万个地方需要修复,每次修复不得不用手工进行,随后还要进行测试。例如,一家保险公司可能有2千万或3千万行代码在执行其保险金计算。在代码内部可能有10万或20万个日期计算。根据代码的编写方法,编程人员可能不得不用手工进入代码,并修改程序中使用日期的每个点。随后他们还必须测试每个更改。在大多数情况下测试是个难题——可能需要很长时间。

假设每个更改并测试需要一天,并且需要进行10万次更改,而一个人一年工作200天,则这意味着需要500人一年的时间才能完成所有这些更改。再假设多数公司没有500名闲置的编程人员在那里坐上一年来做这件事,并且公司不得不雇用这些人来从事这件事,您就会明白为什么修复这个问题的代价会如此昂贵。假设一个编程人员的费用是一年15万美元(包括一切费用,如编程人员的薪金、福利、办公空间、设备、管理、培训等),您就会明白,若要修改一个大型程序中的所有日期计算可能要花掉公司几千万美元。

存档版本

虽然Y2K问题在2000年1月来了又走了,但我们仍将本文作为博闻网美国站的存档版本保存起来,因为它有历史价值。本文发表于1999年初,当时正值媒体上Y2K恐慌达到高潮之时,本文以一句“实际上什么也不会发生”而受到人们的关注。回想起来,那句话完全正确,但在1999年1月,却肯定不是主流媒体所描绘的景象。博闻网美国站曾因这条直白的预测而收到过一些言词激烈的电子邮件。

2000年1月1日将会发生什么

2000年1月1日,没有经过修复的软件将停止工作或产生错误的输出。重要的问题是,“据我们所知,那将给世界带来多大影响?”

有些人预测世界末日将要来临。例如,世界范围的停电、交通运输基础设施完全瘫痪(意味着食品无法运到商店,等等)、飞机从天空中坠落等诸如此类的情景都是这些人的预测。这种预测说社会结构将会崩溃、各地的人民将发生骚乱、世界将彻底毁灭。当然,进行这些预测的人往往是:A)民兵组织的成员,B)生存主义者,C)宗教狂热者。识别这些预言的来源很重要。

实际上什么也不会发生。出现一些出乎意料的问题和解决这些问题可能会造成一两个星期的不方便。除此之外不会有其他影响。这是一个很容易作出的预测,因为:

    大多数公司和政府机关将在1999年年底之前修复他们的软件,或者准备好变通方案。否则,他们就要关门歇业,这是促使完成这项工作的一个有力动机。 无论我们觉得我们对计算机的依赖程度有多大,大多数日常事务还是由人来完成的,而不是由硅来完成的。以食品为例,西红柿和生菜将继续生长、采摘它们的人将继续采摘、罐头食品厂将继续制造罐头、卡车司机将继续驾驶卡车、食品杂货店将继续出售食品。换句话说,即使有一些计算机停止工作,世界也不会因此而停止。 一些公司将无法协调其运作,因此将会出现问题。它们将关门歇业。这是正常的资本主义制度在起作用。随着优胜劣汰的进行,可能会有一点扰乱,但除此以外还会有什么别的新鲜事呢?

另外值得一提的是,我们始终都在经历不方便的事,但它对我们的影响很小或根本没有影响。例如,当UPS(美国联合邮包服务公司)在1997年罢工的时候,它在美国关闭了大约80%的包裹投递基础设施。世界末日并没有来临——所有人都改为使用邮局和Fedex公司。1999年1月3日,芝加哥和底特律经历了30年来最严重的一场暴风雪。这场暴风雪关闭了全国的航空运输、推迟了底特律汽车展的开幕、使成千上万的人陷于困境。然而我们都设法从困境中挺过来了。2000年1月1日将会有一些公司遇到问题。但许多其他公司不会出问题。困难会给人造成不便,但仅此而已。两星期后我们就会克服困难。它与暴风雪或大罢工没什么不同——我们能找出解决问题的办法,生活将一如既往。

围绕着2000年问题,有人用了很多吓人的花招和夸张的手法。所有这些花招和夸张都使用了一个相当广泛的假设,那就是从此以后人们再也不能做他们的工作了。需要认清的重要一点是,即使在2000年1月1日那天世界上有很多计算机突然关闭,其总的影响也是微乎其微的,因为人们知道该如何做事。让我告诉你为什么:

假设在美国所有的自动取款机都停止了工作。但是出纳员仍然在,你可以在正常的营业时间到银行找出纳员办理存款和取款。 假设UPS的所有计算机都关闭了。UPS是由一群驾驶棕色卡车到处跑的人组成的,他们都会读地址标签。包裹仍然可以正常投递。 假设商店里所有的条形码阅读器都停止了工作。但是出纳员仍然可以键入价格。 假设联邦航空管理局的所有计算机都关闭了,并且所有飞机上的自动驾驶仪的计算机也停止了工作。但航空管理人员是人,不会停止工作,而且飞行员仍然可以驾驶飞机。也许我们做不到在繁忙的机场上每分钟降落两架飞机,但是飞机仍然可以飞行。 关于Y2K问题所用的吓人花招之一是“电力网瘫痪”。假设某地的电力网出了问题。能胜任管理和修理供电网络的人有成千上万,这些人就是每次发生飓风、冰雹等灾难后修复电力网的人。另外需要注意的重要一点是,电力网并不是什么神奇的东西。请阅读电网工作原理以了解相关信息。电力网是由无源线路和变压器组成的。在2000年1月1日,电子仍将在线路中流动。

在末日论者之中有一种设想,即2000年1月1日所有计算机都将由于某种原因出现故障(这种说法很愚蠢),而且所有人也都会以某种方式“出问题”。如果你想一想,就能看出那是多么荒谬。我们都知道如何做自己的工作,我们谁都想继续自己的生活。在2000年1月1日,我们并不会有什么不同。我们将乘自己的汽车,我们将要去买东西。卖东西的人仍将希望出售货物,这样他们就能挣钱。这是永远不会变的。

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢