日本更换新年号,却害惨程序员了!
作者 | 唐塞依
责编 | 伍杏玲
本文经授权转载自程序员在日本(ID:programmerinjapan)
【程序人生 编者按】就在四月一日!日本的新年号公布了,它叫“令和”。等到五月一号,日本就将彻底告别平成时代,迎来令和元年!
然而程序员却遇到一个头疼的问题……
“初春令月,气淑风和。”这个新年号的发表,让日本举国上下都进入了一种期待美好未来的欢欣之中。
并且,因为天皇交替,日本还会在四月末五月初迎来幸福到晕过去的十连休。
在岛国生活的绝大多数社畜们露出了久违的微笑:
“可以利用十连休好好粗去玩喽!”
但是对于我们码农来说,在假期到来之前将要面对的,是枯燥繁琐的IT系统年号变更问题,以及由此可能导致的加班问题!
不懂程序的素人可能会问了:
“换个年号而已,改不改的有那么严重吗?”
还真是很严重。
在人类已经离不开信息技术的今天,IT系统里的时间问题稍有不慎,就会产生影响我们衣食住行的大动荡。
出生于九零年以前的人,可能都对1999年记忆犹新,这一年,满世界都在疯传一个谣言:
一九九九年
审判降临
魔王现世
人类将迎来世界末日
然后什么都没有发生,所谓的末日预言被历史证明只是互联网的一场狂欢。
不过,从计算机发展史来看,1999年还真算得上人类是保卫了地球文明的一年。
这一年,无数的程序员加班熬夜,终于赶在千禧年钟声响起之前解决了计算机系统计时程序里,无法区分1900年和2000年区别的“千年虫问题”。
要知道如果没能解决这个问题,银行的存款可能因为系统时间混乱而全部清空。核导弹发射系统也可能在Bug中随机发射。
不懂程序的素人可能又要问了:计算机辣么聪明,怎么会搞不清1900和2000年的区别呢?
原来呀,古早时候的电脑比较弱小,内存只有64-128KB,用它做事必须很节约,能省一点儿是一点儿。
所以那时候的程序猿在输入日期时,都只用两位数来表示年份——比如1999年1月1日,就写成“990101”。这样一来,1988年变成了“88年”,1900年变成了“00年”。
这时候一拍大腿你会发现:不对呀!照这么写,1900年和2000年都变成“00年”,没有区别了哇!
没错!计算机也是这么想的!
当时间跨过1999年最后一天的零点,如果不提前修改系统,全世界的计算机都会在:倒回1900,跨入2000,选择原地狗带,三种模式中陷入沉思。
有识之士很早就注意到了这个问题,号召政府和企业尽快采取措施。比如咱们国家就准备得比较完善,还在北京专门成立了一个“计算机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日以后的驾照、保险证,各种各样的契约合同。岂不是统统要回炉重造?
回炉重造的话要花费大量人力物力,还需要民众的积极配合。
可是不重新发行的话,那就只能允许新旧两个年号同时存在。和历就是这一点很迷,天皇一出事儿,年号就要换。日本国民的时间表就会迎来大错乱。
历史上就有过这么一次,那是大正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语言”。
作者简介:唐赛依,从岛国IT圈冉冉升起的次时代伤痕文学创作之星,热衷于以兴高采烈的口吻记叙日本码农的悲惨世界。
声明:本文经授权转载,如需转载请联系原作者。
热 文 推 荐
戳他↓↓↓
☞ 零编程基础的 15 岁少年,仅用 9 个月开发了 9 款 App?!
☞ V神玩起freestyle! 5位以太坊核心大咖在悉尼的演讲精华全在这了!| 直击EDCON
System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"