新的十年开始了。
二十年前,在千禧之年钟声敲响的时候,诸多 Y2K 应急队的程序员坐在电脑前惴惴不安,他们此前刚刚用最简单易行的 “懒人方法” 修补了一个被称为“千年虫”(Millennium Bug,又称 Y2000 problem,简称“Y2K”)的大 bug。二十年后,这群程序员老了,但是新一代的青年程序员又要为老一辈的懒惰而付出代价。

据《纽约时报》报道,纽约的停车收费表从 2020 年 1 月 1 日开始不支持信用卡付款,整个城市的一万多个计费表已手动更新,仅通过现金或 ParkNYC 接受付款;波兰公司 Novitus 生产的收银机由于记录时间故障而无法打印收据;视频游戏 WWE 2K20 于 2020 年 1 月 1 日午夜停止工作;华为手表和部分设备丢掉了新年伊始两三天的 TrueSleep 睡眠数据,需要更新并重启……

“千年虫”bug归来,新一代程序员将如何解决

似乎有相当数量的系统出现 #2020 错误。当年解决 Y2K 问题的方案把这个问题推迟了 20 年……20 年后的今天,当时的一些系统仍然还在使用,系统以为我们在 1920 年。”

“千年虫”bug归来,新一代程序员将如何解决

千禧年前后出生的青少年们或许很少有人知道“千年虫”。

大约在 20 世纪 80 年代中期以前投用的系统上,囿于存储空间有限,再加上人们普遍觉得系统更新会很快,所以程序员大多采用两位数来表示年份,比如 06/15/98,而不是 06/15/1998。但是到了 2000 年,系统只知道是 01/01/00,不知道这是 1900 还是 2000。

千年虫主要集中在配备较早的主机系统上,如在 IBM 4381,IBM AS/400 等机型上运行的应用程序,比如美国的 AT&T 电讯公司,其内部就有超过 3.6 亿行的应用程序需要检测是否存在 Y2K 问题。另外,在自动化仪器仪表、电梯、警报系统、恒温灯等嵌入式设备也容易存在千年虫隐患。

计算机在上世纪六七十年代开始普及,到九十年代,人们开始意识到问题的严重性:不知道从 1999 年最后一天的 23:59 到 2000 年第一天的 00:00 的转变意味着什么?在渲染和炒作下,大众的惊恐程度不亚于“2012”。人们猜测,如果程序停止运行、崩溃或者发出错误指令,是否影响到银行、电站、航线等等,存款会一夜清零、恐怖袭击、飞机坠落、股市崩溃,世界陷入混乱?

当时甚至有媒体报道,有人把山洞当做避难所,存储了很多食物、医疗包等必需品,还有一些人把银行存款纷纷取出来或者是购买黄金。

“千年虫”bug归来,新一代程序员将如何解决

为了避免 “灾难” 发生,政府和企业动用大量资源查找和修复这个 bug。有报道显示,当时克林顿政府和业内人士估计,用 “windowing” 的方式修补 80% 的计算机,预计耗资数千亿美元。BBC 报道认为全球花在防备千年虫上的费用在 3000 亿到 5000 亿美元之间。真实耗资目前无法考证。也有言论说千年虫是个商业大骗局。

当时修复 bug 的方式有两种:完全重写代码,或者采用 “windowing” 的方式快速修复。“windowing”就是把 00 到 20 之间的所有日期都当做 20XX 年而不是 19XX 年。很显然,相比于把所有两位数表示的年份都修改成四位数,后一种方式更省钱、更快而且更容易。

从 1970/01/01 开始,很多编程语言和系统都把日期时间以秒来处理,也叫 Unix time。因此,鉴于中点 1970 的重要性,编码人员选择 1920 到 2020 作为标准窗口。

Unix time 被广泛用于各种行业操作系统,并被视为是一种标准。Unix 和 Windows 系统有环境变量来为系统设置 “转折年”。“转折年” 以后的任何一年属于本世纪,“转折年”以及 “转折年” 之前的任意一年属于上个世纪。但是一些产品,如 Microsoft Excel 95 使用的是 1920-2020 年的 windowing,在解决千年虫问题之后,仅仅过 20 年就有可能再次出现日期错误。

“千年虫”bug归来,新一代程序员将如何解决

当时的专家认为,等到程序员投入大量的资金和时间去永久修复好这些 bug 之后,系统早就被更换了。所以,尽管 “windowing” 修复的程序智能使用二三十年,专家也觉得足够了。

2020 年的到来,意味着我们已经进入到了 1920-2020 窗口期的末端。2019 年 11 月,由于被发现容易受到 Y2020“攻击”,大数据公司 Splunk 向用户推出了修复服务,它的用户涵盖了美国《财富》一百强公司中的 92 家。由于各家公司尚未披露相关细节,目前还不清楚 “Y2020” 将持续多久。

另外,在 2038 年我们将面临另一个数据存储问题。32 位的 Unix 和 Linux,能存储的最大数字为 2 的 31 次方,即 2147483647。从 1997 年开始计算,2147483647 用来表示的秒数最多只能用到 2038 年 01 月 19 日 03 时 14 分 07 秒,在这个时间之后,系统会回到 - 2147483648,代表的时期是 1901 年 12 月 13 日 20 时 45 分 52 秒。

不同于千年虫,2038 会影响的不仅仅是应用层,而是会影响到最底层的时间控制功能。不过幸运的是,如果能在 2038 年之前把所有 32 位系统淘汰并采用 64 位的话,我们将会巧妙地躲开 2038 问题。
加Q裙937963151自取Python学习资料和学习视频,还有大神在线指导哦

千年虫”bug归来,新一代程序员将如何解决相关推荐

  1. 实习生两分钟解决程序bug,老程序员笑笑不说话,还是太年轻?

    又到一年高校毕业季,为了能实现更好就业,大学生们也是使尽了浑身解数. 从某种程度上来说,985.211高校毕业的大学生找工作要比普本院校毕业的学生要容易很多,现在也有不少985高校的毕业生已经进入了实 ...

  2. 当程序出Bug时,程序员最喜欢说的30句话

    又快到周日时间,今天来个轻松娱乐的话题,当程序出Bug时程序员最喜欢说的30句话 1.在我的电脑上是正常的啊... (环境问题,不关我的事) 2.不可能出现这种情况的 (操作方式有问题) 3.快了,已 ...

  3. 论程序员价值:解决失误bug被涨绩效,零失误时无人问津

    最近某程序员发了一个令自己奇怪的事儿:说自己已加班一年有余,工作从不敢出错,怕出现bug失误,平时和领导沟通的也不多,绩效稳定在3.5. 没想到最近不小心出了两次大事故,一样正常的加班,被客户感谢,领 ...

  4. 泡着枸杞写bug的三流程序员凭什么逆袭到一线大厂?

    大多数互联网的从业者都有一个梦想:进大厂. 因为不仅可以享受较好的福利待遇,也能与更优秀的人一起共事,获得更专业.更快速的成长. 最近经常有朋友提及想要入门编程学习,该如何学习? 关于编程学习,各种语 ...

  5. 泡着枸杞写bug的三流程序员凭什么逆袭到一线大厂?你不服不行!

    最近经常有朋友提及,想要入门深度学习,该如何学习? 关于深度学习,网上的资料很多,不过貌似大部分都不太适合初学者. 我曾经是一名三流程序员,每天的工作内容就是在前人留下的 bug 上写新的bug,我以 ...

  6. 佛祖保佑代码无bug图片_程序员都有哪些奇趣的代码注释,细思极恐

    在很多不熟悉程序员的群体中,可能都认为程序员是沉闷一次的代表,但其实不然,很多程序员都是非常幽默有趣且都有一颗非常闷骚的心.这尤其体现在他们呢好玩的代码注释上面,我找了一写奇趣的代码注释类型,小伙伴们 ...

  7. python闯关训练营怎么样3.0_泡着枸杞写bug的三流程序员凭什么逆袭到一线大厂?...

    大多数互联网的从业者都有一个梦想:进大厂. 因为不仅可以享受较好的福利待遇,也能与更优秀的人一起共事,获得更专业.更快速的成长. 最近经常有朋友提及想要入门编程学习,该如何学习? 关于编程学习,各种语 ...

  8. 还在肉眼找bug??赶紧进来!!!程序员一定要学的调试技巧.

    本文介绍了什么是bug,什么是调试,调试重要性,如何调试解决bug,各种常用的调试快捷键,如何写出好代码以及const关键字,assert断言库函数介绍,写代码各种遇见的错误, 调试训练 实用调试技巧 ...

  9. 《绝地求生》平底锅挡子弹bug,源于程序员的一个错误

    在<绝地求生>游戏里,平底锅可以算得上是神器了.在经过某次更新之后,玩家们惊奇地发现平底锅居然可以挡子弹,连一枪秒杀三级防的喷子都打不穿!玩家称这是个完美且好玩的设计,那么,平底锅到底是什 ...

最新文章

  1. BI+Tableau
  2. 多线程编程实战(一)
  3. 反应机理_过敏反应的发生机理及表现
  4. JEECMS8——系列文档
  5. Linq学习笔记(三)
  6. java反射 基本知识
  7. pip 安装 tensorflow_TensorFlow 学习笔记2-1:ubuntu下安装pip3amp;tensorflowamp;opencv
  8. 新基建7大产业链约500家企业图谱!
  9. mysql为datetime类型的字段设置默认值current_timestamp,引发 Invalid default value for 错误...
  10. 24-Logistic Regression
  11. 机器学习性能评估指标(综合性总结)
  12. Collection完整内容整理
  13. [比赛]2015/12/25BNU新生赛
  14. ecshop微信登录php代码,Ecshop实现微信第三方授权扫码登录
  15. 定时任务实现方式对比
  16. Linux进程中的RSS和VSZ
  17. win10打开计算机管理闪退,win10系统下任务管理器闪退的解决方法
  18. 实习渗透工程师面试记录
  19. 微信小程序用户信息解
  20. 在小程序中实现海报制作

热门文章

  1. Android进阶课学习收获 (13~18)
  2. 这些电脑软件你使用过吗?
  3. Linux系统换源(以Ubuntu为例)
  4. 浅谈物联网管理平台的优势与应用
  5. 四.初步了解第一个Hello world C项目
  6. Linux上不错的EPUB阅读软件
  7. Java 聚合支付 实战 XorPay
  8. Debeaver导入csv文件后处理乱码与数字型转varchar丢失精度问题
  9. SpringBoot 使用MultipartFile上传组件实现本地上传用户头像
  10. DAMA数据管理知识体系指南-读书笔记16