什么是千年蟲?
引言
今年您將會在新聞中不斷聽到關于“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日,我們并不會有什么不同。我們將乘自己的汽車,我們將要去買東西。賣東西的人仍將希望出售貨物,這樣他們就能掙錢。這是永遠不會變的。
評論
查看更多