歡迎光臨
每天分享高質量文章

新年號來了,島國程式員卻哭了

導讀:就在四月一日!日本的新年號公佈了,它叫“令和”。等到五月一號,島國就將徹底告別平成時代,迎來令和元年!

“初春令月,氣淑風和。”這個新年號的發表,讓日本舉國上下都進入了一種期待美好未來的歡欣之中。

並且,因為天皇交替,日本還會在四月末五月初迎來幸福到暈過去的十連休。

在島國生活的絕大多數社畜們露出了久違的微笑:“可以利用十連休好好粗去玩嘍!”

但是對於我們碼農來說,在假期到來之前將要面對的,是枯燥繁瑣的IT系統年號變更問題,以及由此可能導致的加班問題!

不懂程式的素人可能會問了:“換個年號而已,改不改的有那麼嚴重嗎?”

還真是很嚴重。

 

作者:唐賽依

來源:程式員在日本

在人類已經離不開資訊科技的今天,IT系統裡的時間問題,稍有不慎,就會產生影響我們衣食住行的大動蕩。

出生於九零年以前的人,可能都對1999年記憶猶新。這一年,滿世界都在瘋傳一個謠言:

一九九九年

審判降臨

魔王現世

人類將迎來世界末日

然後什麼都沒有發生,所謂的末日預言,被歷史證明只是網際網路的一場狂歡。

不過,從計算機發展史來看,1999年還真算得上人類是保衛了地球文明的一年。這一年,無數的程式員加班熬夜,終於趕在千禧年鐘聲響起之前,解決了計算機系統計時程式裡無法區分1900年和2000年區別的“千年蟲問題”。

要知道,如果沒能解決這個問題,銀行的存款可能因為系統時間混亂而全部清空;核導彈發射系統也可能在bug中隨機發射。

不懂程式的素人可能又要問了:計算機辣~麼聰明,怎麼會搞不清1900和2000年的區別呢?

原來呀,古早時候的電腦比較弱小,記憶體只有64-128KB,用它做事必須很節約,能省一點兒是一點兒。所以那時候的程式猿在輸入日期時都只用兩位數來表示年份——

比如1999年1月1日就寫成“990101”這樣一來,1988年變成了“88年”,1900年變成了“00年”……

這時候一拍大腿你會發現:不對呀!照這麼寫,1900年和2000年都變成“00年”,沒有區別了哇!

沒錯!計算機也是這麼想的!

當時間跨過1999年最後一天的零點,如果不提前修改系統,全世界的計算機都會在

  1. 倒回1900

  2. 跨入2000

  3. 選擇原地狗帶

三種樣式中陷入沉思。

有識之士很早就註意到了這個問題,號召政府和企業儘快採取措施。比如咱們國家就準備得比較完善,還在北京專門成立了一個“計算機2000年問題”辦公室,應對各地打來的求助電話。

甚至由於宣傳過於到位,連根本不懂計算機的老爺爺老奶奶們也知道“千年蟲”要來了。然鵝,他們真的把千年蟲當成了一種帶著病菌的害蟲。於是就發生了下麵兩則故事……

與此同時,跟咱們隔海相望的日本,也開始了“防蟲”宣傳。

那時候的日本首相,叫做小淵惠三。小淵惠三親自演了個廣告,從1998年開始就天天在電視上輪放,催促本國程式員趕緊“捉蟲”。

▲小淵惠三你很眼熟吧新年號出來之前,他這張圖已被玩壞

在碼農們齊心協力的努力下,日本全國系統中的bug都被修複or掩蓋得差不多了(為啥會說“掩蓋”?這個咱們最後解釋)。

即使這樣,在新千年到來之際,謹小慎微的日本人還是暫停了大多數公共設施的運轉。JR和私鐵各社統統停運,飛機也不飛了。直到2000年順利到來,才讓它們重新出發。

千禧跨年之劫順利度過,霓虹上下鬆了一口氣。平成廢宅又可以放心去玩耍啦,以至於大家高興地忘了一個恐怖的事情:

大魔王2000年,不僅僅是新千年。它,還是一個閏年!

從小老師告訴我們——能被4整除的年份,叫做閏年。但是,在所有能被4整除的年份裡,同時又能被100整除的,它就變回平年了。但但是!在這些能被100整除的平年裡,同時還能被400整除的,它就又變回閏年了!

所以1900年不是閏年,但2000年!是一個大大滴閏年!

1900年沒有出現過的bug,2000年會出現。

2000年2月29日,北海道札幌市地鐵線上通勤的霓虹金,突然發現自己的定期券失效了。“明明自己買的是2月15到3月14一個月的月票,怎麼到2月29就不能用了呢?”

因為霓虹金忘了修改閏年2月底多出來的一天。在計算機的認知裡,2000年2月29日變成了不該存在的日子。人們的定期券也就因此失效了。那一天剛好是通勤地獄星期二,被改札機困住的社畜們,應該很想錘爆札幌鐵道局吧。

總之說了這麼多,就是為了告訴大家,計算機裡的日期變動對程式員來說是不可小覷的大事件。這個bug如果不被重視,可能會引起很可怕的後果。輕則ATM宕機,重則人造衛星撞地,是一定一定要提前做好準備的。

說回這次“平成”變“令和”的事件。

現在是2019年4月,還屬於平成31年。日本這個國家很奇葩,明明都21世紀了,自己也引入了公曆,官方檔案還在固執地延續帝位紀年法。我們在日華人從各個機構領到的證件裡,看到的多是“昭和XX年”“平成XX年”這種表記方式。

但是和歷紀年有一個致命的bug:那就是未來的日期未必真的存在。

比如下麵這張保險證:

有效日期那裡赫然寫著:平成32年8月31日。

可是4月一過,直接就進入令和元年了,哪兒來的平成32年???

既然沒有平成32年,那這些所有日期標註在平成31年4月30日以後的駕照,保險證,各種各樣的契約合同,豈不是統統要回爐重造?

回爐重造的話要花費大量人力物力,還需要民眾的積極配合。連個my number都推廣不出去的島國政府根本搞不起來,可是不重新發行的話,那就只能允許新舊兩個年號同時存在。

和歷就是這一點很迷,天皇一齣事兒,年號就要換。日本國民的時間表,就會迎來大錯亂。

歷史上就有過這麼一次,那是大正15年(1926)的事情。眾所周知,日本人在新年的時候喜歡相互寄賀年片,年末的時候,郵局已經把大家寫好的賀年卡都收上來、蓋好了大正16年1月1日的郵戳,就等著當天統一送信啦。

結果12月25日,大正天皇……掛了。

而且,在換算和歷xx年等於公曆xx年的時候,日本人的畫風也是這樣嬸兒的:

首先要把每個年代開始的年份作為常識背下來,然後在此基礎上計算加減,對於我們中途上島的外國人來說,實在是面倒くさい……

這時候就會有人問了:既然和歷換算這麼麻煩,為啥不乾脆全改公曆算了?實際上,大部分霓虹金也是這麼想的。但是堅持和歷的人認為:公曆是具有基督教背景的曆法,強制採用公曆違反了憲法中宗教信仰的自由。

憲法高於一切。所以最終,大家還是一起忍受著和歷的折磨。

邁入資訊時代後,最受折磨的就是我們悲慘的程式員。跟官方檔案一樣,日本很多系統也是以和歷形式儲存日期的。2019年4月30日在系統裡被記錄為H310430,而到了五月,年號變成了“R”開頭的令和,2019年5月1號就變成R010501了。

原本計算機按照H開頭往下加算的日期,從五月開始就要改成R開頭。現代開發的系統,實際上對於這個問題已經應對得更成熟,改修起來按說應該比較容易。

但是日本很早就進入了數字化時代。有大量的系統是用cobol,pascal等上古語言開發的。這些系統執行時間超過30年,像老古董一樣又脆又難修。而且30年前的檔案早就已經停止維護,很多時候只能讓程式員一行一行看程式碼來分析,等到專案結束,可憐的猿們就該排隊去看眼科了。

唯一讓猿們感到欣慰的是,明仁是一位很不錯的天皇,博學多才,愛好和平,不戀權不好戰,業餘喜歡研究蝦虎魚,一不小心還成了這塊兒最厲害的權威。

這位很不錯的天皇,連退位也是有條不紊地讓程式員可以提前做好準備。如果像大正一樣那麼突然,大家可能要直接上天台了。

然鵝,即使天皇早在幾年前就宣佈了提前退位,公佈新年號也還是前幾天的事情。對於霓虹程式員們來說,這依然是一項時間緊任務重的大工程。微軟、IBM等公司也必須在最短時間內根據新年號修改各種程式工具。

尤其對於給銀行稅務證券機構改系統的猿而言,就更不能掉以輕心了。不僅要改得快,還要保證沒有錯誤,不然在金額上出了差錯,就真的會背上一個比天還要大的鍋了。

啊!說到背鍋!我終於能講出今天最後一個小故事了!這是一個關於上屆程式員甩鍋的故事。

大家都知道,在平成之前的呢,叫做昭和時代。昭和時代橫跨1926~1989,那會兒人們也已經用上計算機啦。

所以早在昭和天皇去世的1989年,日本的IT系統就經歷過一次改元。當時的島國程式員已經預見到這些系統會在2000年的時候撞上千年蟲問題。1989,離2000只差11年了,那會兒自己還沒退休,說不定會被公司綁去祭天。

這時,不知哪個工程師賊光一閃,提議道:“要不咱這樣吧,用公曆1989的話,過11年就會撞上雙零,但是如果沿用昭和64年的話,還有36年才會爆發危機!等到那會兒咱就退休,啊不,就開發出更先進的技術了!後輩肯定有辦法解決的!

其他碼農聽了紛紛覺得:

於是,大家就這樣管殺不管埋地,接著給昭和老鬼續命。

所以,直到今天,一個名叫昭和的幽靈,依然在日本列島上空盤旋。

當年的碼農們,為了延後2000年問題的爆發,只為一般消費市場的IT系統進行了改元換算。而在更牽扯國民經濟命脈的政企領域,則按昭和的年份繼續悄無聲息地加算。

現在令和元年都要來了,這些政企系統的軟體裡,錶面上是平成31年的記錄,內部卻是令人毛骨悚然的昭和94年(63+31)!

再過六載,也就是2025年,昭和也要歸零了。這就是在日本IT界比“換位改元問題”更加令日本人擔憂的“昭和100年問題”。

因為舊的仕様書很多已經遺失,當年參與開發的工程師也都退休了,幾乎沒人知道怎麼去修改這些昭和年代留下的老古董。

所謂前人砍樹,後人遭殃。日本職場的甩鍋絕技,就這樣跨越兩個時代,直接打擊到走向令和的我們身上。那一天的島國會出現怎樣的光景呢?想想就覺得好刺激啊。

最後給大家講個IT界流傳已久的笑話:

 

一個COBOL程式員因解決了千年蟲問題掙了大錢,以至於他可以花錢請人將自己冷凍起來。

未來的某天這隻猿突然被覆活,睜開眼他詢問自己被覆活的原因

未來人這樣回答他:

“現在是9999年,而你懂COBOL語言”。

 

    贊(0)

    分享創造快樂