在20世紀末,人類社會曾經遭遇過一場空前的大危機,如果這場危機真的降臨,甚至有可能終結整個人類文明。
後來,在全世界精英們共同努力之下,這場危機終於得以化解。
這場危機既不是地震,也不是海嘯,更不是瘟疫大流行,而是電子計算機帶來的「千年蟲」問題。
千年蟲問題,到底是怎麼來的呢?
說到這個問題,就不得不提起一位偉大的程序媛小姐姐,Grace Murray Hopper。
說起這位小姐姐,那可真是厲害了,她是美國海軍準將,也是一位計算機科學家。
Grace Murray Hopper都取得過哪些成就呢?
她發明了最早的現代編譯器:A-0系統。
她創造了最早的商用程式語言:COBOL。
她在出故障的計算機裡發現了一隻飛蛾,使得Bug與Debug成為了計算機領域的流行詞彙。
在上世紀60年代,計算機的存儲資源非常稀缺,程式設計師在編寫每一行代碼的時候,都要為存儲的使用而精打細算。
為了更好的節約內存空間,Grace Murray Hopper採用了6位數字的組合來存儲時間信息。比如1965年7月23日,對應存儲形式就是65/07/23,省去了前面的「19」。
這樣的存儲形式,很快就在計算機領域流傳開來。儘管它節約了一定的存儲成本,卻埋下了兩個隱患:
1. 由於年份只保留了後兩位,當2000年到來的時候,年份存儲的信息是「00」,計算機無法區分這到底是1900年,還是2000年。
2. 1900年不是閏年,但2000年是閏年,如果年份的前兩位被默認為「19」,那麼2000年的2月29日就會被當做3月1日,存儲為00/03/03。
這兩大隱患,都是到了2000年才會爆發出來,所以這個問題被稱為「千年蟲」問題,英文縮寫為Y2K。
1.抓住重點
既然全量的程序改不過來,那就重點修改那些起到核心作用的程序,比如醫療、航空、金融、軍事領域的程序,這樣工作量就減少了許多。
2.修改時間窗口
對於大多數不那麼核心的程序,程式設計師們想出了一個取巧的方式,這種方式叫做windowing,翻譯過來就是時間窗口。
這種方法暫時保留了6位時間表達,但是表達的時間範圍不再是默認的1900年-1999年,而是1920年-2019年。
比如,程序當中的「10」年,以前默認代表著1910年,現在代表著2010年。
這個做法大大降低了修改成本,但是沒有根本解決問題,而是把問題的爆發推遲了20年。
非洲甘比亞,一些政府機構的軟體系統臨時癱瘓了。甘比亞政府特意宣布當天(周一)為非工作日,以暫時減輕出事機關所要承受的壓力。
中國廣州,某商務公司的7臺電腦接二連三出現故障,當他們向軟體供應商公司求助時發現,那裡已經接到100多家公司資料庫癱瘓的消息。
喜歡本文的朋友,歡迎關注公眾號 程式設計師小灰,收看更多精彩內容