千年虫问题是如何运作的

Y2K written across an old computers monitor.
Y2K 指的是程序员编写的代码中日期的使用方式。Stockbyte / Getty Images

今年你将在新闻中不断听到关于“2000年问题”的报道。在此过程中,你也会听到许多相互矛盾的信息。互联网上还充斥着不少“世界末日”的论调。你该相信什么?

在本期How Stuff Works中,我们将讨论2000年问题(也称为Y2K问题),以便你准确了解正在发生什么以及正在采取哪些措施。你还可以浏览各种链接。通过这些信息,你可以得出自己明智的结论。

广告

什么是Y2K问题?

Y2K问题的原因相当简单。直到最近,计算机程序员们习惯在他们的软件中使用两位数来表示日期的年份部分。例如,典型保险单或信用卡的到期日期在计算机文件中以月/日/年格式存储(例如 - 08/31/99)。程序员这样做有多种原因,包括:

  • 这是每个人在日常生活中使用日期的方式。当你手写支票并使用日期的“斜线”格式时,你就是这样写的。
  • 存储2位数字比存储4位数字占用的空间更少(现在硬盘如此便宜,这不是什么大问题,但在老旧机器上曾经是个大问题)。
  • 直到最近,标准机构才建议使用4位日期格式。
  • 没有人预料到这些软件会有如此长的寿命。1970年编写软件的人没有理由相信这些软件在30年后仍在使用。

当年份输入“00”时,两位数年份格式给大多数程序带来了问题。软件不知道是将“00”解释为“1900”还是“2000”。因此,大多数程序默认为1900年。也就是说,大多数程序员编写的代码要么在两位数日期的前面加上“19”,要么不对世纪做任何假设,因此默认是“19”。这本来不是问题,除非程序对日期进行大量计算。例如,为了计算你的年龄,程序会用今天的日期减去你的出生日期。这种减法在两位数年份的日期上运作良好,直到今天的日期和你的出生日期处于不同的世纪。那时计算就不再起作用了。例如,如果程序认为今天的日期是1/1/00,而你的生日是1/1/65,那么它可能会计算出你是-65岁而不是35岁。结果,日期计算给出错误的输出,软件崩溃或产生错误的结果。

重要的是要认识到,这就是全部了。这就是整个2000年问题。许多程序员在他们的程序中使用了两位数年份格式,结果他们的日期计算在2000年1月1日将无法得出正确答案。仅此而已。

解决方案显然是修复程序,使其正常工作。有几个标准解决方案:

  • 重新编码软件,使其理解00、01、02等年份实际上意味着2000、2001、2002等。
  • 通过对年份使用4位占位符并重新编码所有软件以处理4位日期,从而“彻底解决问题”。[一个有趣的问题:为什么年份要用4位数字?为什么不用5位,甚至6位?因为大多数人认为8000年后没有人会再使用这个软件了,这似乎是个合理的假设。现在你可以明白我们是如何陷入Y2K问题的了……]

从概念层面来看,这些修复都很容易做到——你进入代码,找到每个日期计算并修改它们以正确处理。只是软件中有数百万个地方需要修复,而且每次修复都必须手动完成并进行测试。例如,一家保险公司可能有2000万到3000万行代码来执行其保险计算。代码中可能有10万或20万个日期计算。根据代码的编写方式,程序员可能需要手动修改程序中每个使用日期的地方。然后他们必须测试每一个更改。在大多数情况下,测试是最困难的部分——可能需要大量时间。

如果你估算每次修改和测试需要一天时间,并且有10万次修改需要完成,一个人每年工作200天,那么这意味着需要500人一年才能完成所有修改。如果你还考虑到大多数公司没有500名闲置程序员坐等一年来完成这项工作,他们必须雇用这些人,你就会明白这可能成为一个相当昂贵的问题。如果你估算一个程序员每年花费大约15万美元(包括程序员的工资、福利、办公空间、设备、管理、培训等所有费用),你就会明白修复一个大型程序中所有日期计算可能花费一家公司数千万美元。

广告

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

2000年1月1日,未经修复的软件将停止工作或产生不正确的输出。大问题是,“这对我们所知的世界会产生多大的影响?”

有些人预测世界将会终结。例如,全球停电、交通基础设施彻底崩溃(意味着食物无法运到商店等)、飞机从天上掉下来等等,都是这些人预见的场景。他们预测社会结构将崩溃,各地的人们将发生暴乱,世界将化为灰烬。当然,做出这些预测的人往往都是:A) 民兵成员,B) 生存主义者,C) 宗教狂热者。认识到这些预测的来源很重要。

广告

实际上,什么都不会发生。可能会有一两周的不便,因为意想不到的问题出现并得到解决。除此之外,不会有任何影响。这是一个容易做出的预测,因为:

  1. 大多数公司和政府机构将在1999年底前修复其软件,或采取变通方案。如果他们不这样做,他们就会倒闭,这是促使他们完成这项工作的强大动力。
  2. 无论我们认为自己多么依赖计算机,大多数事情都由人来操作,而不是硅片。以食物为例。番茄和生菜会继续生长,采摘它们的人会继续采摘,罐头厂会继续罐装,卡车司机仍会驾驶他们的卡车,杂货店仍会销售它们。换句话说,即使一些计算机停止工作,世界也不会停止。
  3. 有些公司将无法妥善处理,并会出现问题。它们会倒闭。这是正常的资本主义运作。在赢家和输家自行解决问题时,会有一点点混乱,但这有什么新鲜的呢?

另一件要记住的事情是,我们一直都在经历不便,但它对我们的影响微乎其微。例如,1997年UPS(联合包裹服务公司)罢工时,它导致美国大约80%的包裹递送基础设施中断。世界并没有因此而终结——每个人都改用邮局和联邦快递。1999年1月3日,芝加哥和底特律经历了30年来最严重的暴风雪。它导致全国航空旅行中断,底特律车展的开幕推迟,数万人滞留等等。我们都设法克服了不便幸存了下来。2000年1月1日,会有一些公司出现问题。但会有很多其他公司没有问题。它可能会造成不便,但仅此而已,两周后我们就会解决。这和一场大暴风雪或一次大罢工没什么不同——我们总能找到解决问题的方法,生活继续。

关于2000年问题,存在许多恐吓策略和夸大其词。所有这些都相当普遍地假设人们无法再履行职责。重要的是要认识到,即使世界上许多计算机在2000年1月1日突然关闭,总影响也将是最小的,因为人们知道他们在做什么。让我告诉你为什么:

  • 假设美国所有的自动取款机都停止工作。银行仍然有柜员,你仍然可以在正常营业时间与柜员交谈,进行存取款。
  • 假设UPS的所有计算机都关闭了。UPS就是一群驾驶棕色卡车的人,他们都能阅读地址标签。包裹仍然会送达。
  • 假设商店里所有的条形码扫描仪都停止工作。收银员仍然可以手动输入价格。
  • 假设美国联邦航空管理局(FAA)的所有计算机都关闭了,飞机上的所有自动驾驶计算机都停止工作。空中交通管制员是人,飞行员仍然可以驾驶飞机。我们可能无法在繁忙的机场每分钟降落两架飞机,但飞机仍然会飞行。
  • 围绕Y2K问题最大的恐吓策略之一是“电网故障”。假设某个地方出了问题。有成千上万称职的人管理和修复电网——这些人与每次重大飓风、冰暴等灾害后重建电网的人是同一批。同样重要的是要注意,电网并不是什么神奇的东西。请阅读《电网如何运作》并自我教育。电网由无源电线和变压器组成。电子在2000年1月1日仍将通过电线流动。

末日论者们有一种假设,认为不知何故,在2000年1月1日,所有计算机都会失效(这很愚蠢),而且所有人类也会不知何故“失效”。如果你仔细想想,你就会明白这是多么不真实。我们都知道如何做好自己的工作,我们都想过自己的生活。2000年1月1日,我们都将是同样的。我们会上车,我们想去买东西。卖东西的人仍然想卖,这样他们就能赚钱。这一点永远不会改变。

链接

广告

常见问题

Y2K是什么意思?
“Y2K”一词是2000年问题的简称。问题在于许多计算机系统仅使用年份的最后两位数字存储日期,这可能导致一些系统将2000年误解为1900年。这可能导致数据处理和其他依赖日期的活动出现问题。
为什么Y2K曾是一件大事?
Y2K问题曾是一件大事,因为它有可能造成广泛的混乱。问题在于一些计算机系统没有被编程来正确处理1999年之后的日期。这可能导致许多问题,例如关键基础设施故障或重要数据丢失。
什么是Y2K病毒?
Y2K病毒是一种旨在在2000年第一天传播的计算机病毒。该病毒导致计算机崩溃,并造成了数十亿美元的损失。

广告

加载中...