本文来自微信公众号:InfoQ(ID:infoqchina),作者:Dave McKay、Ian King等,头图来自:视觉中国
COVID-19 疫情的蔓延,让美国 10% 的劳动力失业,人数达到了 1700 万。但美国至少有 12 个州的失业救济系统运行在已经有 60 年历史、使用 COBOL 编程语言的大型机上。这迫使政府机构出手争抢平均年龄已达 60 岁的 COBOL 程序员为他们解决各种系统故障。
不仅仅是政府机构,当下全球财富五百强企业的系统当中有 90% 都运行在 COBOL 基础之上,这些系统构建于几十年前,如今已经很难找到关于其设计思路的说明文档,因此政府机构及企业只能依赖长期在职的程序员们回忆这些具体细节。这些系统的代码编写方式陈旧,没有模块化的概念,像“意大利面条”一样交织在一起,牵一发而动全身,极难维护。
现在很多 COBOL 职位的招聘要求拥有 20 年工作经验,但开出的年薪却只有 35000 美元。年轻人也不愿意学这种复杂的过时语言,这就意味着这些已经 60 岁高龄的 COBOL 程序员至少还需要在未来一二十年里继续维护这些老系统。
COBOL:60 岁的激进编程语言
COBOL 的发明人 Grace Hopper 绝对是个现象级的人物。她拥有耶鲁大学数学博士学位、在瓦萨大学担任教授,并曾出任美国海军少将职务。她对整个计算领域的贡献,单从专为纪念她而命名的项目数量就可见一斑。国家能源研究科学计算中心以她命名 Cray XE6 超级计算机,海军当中也有一艘“Hopper 号”导弹驱逐舰——该舰的座右铭是“Aude et Effice(敢想敢为)”,很可能正是 Hopper 本人的生活准则。
Hopper 致力于在计算机能够理解的范围之内,开发出一种更接近英语表达的编程语言;此外,她还开发出了世界上第一款编译器。这也为 FLOW-MATIC 等一大批早期编译语言打开了大门。这些贡献,让她在 1959 年的数据系统语言大会(CODASYL)上获得了一个宝贵的席位。当然,她还协助制定并开发出了面向公共业务的 COBOL 语言。在 1959 年 6 月 23 日的首次 CODASYL 会议之后,她很快于次年 4 月发布了 COBOL 语言及编程规范。
COBOL 当中包含着一系列突破性概念。可以说,该语言最重要的特性就是能够运行在不同制造商生产的硬件之上——在当时,这是一种前所未有的重要特性。COBOL 语言经过精心设计,允许程序员使用与英语相近的词汇表达,能够处理大量数据并拥有极高的数学运算精度。
COBOL 语言的保留字(构成该语言的可用字)总词汇量接近 400 条。程序员可以将这些字串连起来,建立起语法意义,进而开发出完整程序。任何熟悉其他语言的程序员朋友,都会马上意识到 COBOL 的保留字确实相当丰富。相比之下,C 语言只有 32 个保留字,Python 语言则为 33 个。
COBOL 的另一大特性,在于其严格要求开发者将某些程序行放置在特定行当中。没办法,这是打孔卡时代遗留下来的问题。如今,程序员在 COBOL 编写格式方面拥有更大的自由空间,也不必再用大写字母输入所有内容了。为了体验 COBOL 的最初面貌,下面一起来看这段代码示例:
IDENTIFICATION DIVISION.
PROGRAM-ID. Hello-World.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY "Hello world, from How-To Geek!"
STOP RUN.
END PROGRAM Hello-World.
蓬勃发展几十年,如今却无法迁移和升级
虽然用今天的眼光看,COBOL 的设计已经非常笨拙,但在刚诞生的时候,这绝对是一种革命性的编程语言。COBOL 在金融部门、联邦政府以及大型企业 / 机构中备受青睐。究其原因,出色的可扩展性、批处理功能以及数学精度成为 COBOL 的致胜之道。它被广泛安装在世界各地的大型机中,长久扎根并蓬勃发展。如同顽固的杂草,COBOL 似乎永远无法被彻底消灭。
那么,当下到底有多少系统仍然运行在 COBOL 之上?结果绝对令人惊讶。根据路透社 2017 年发布的报告,我们看到了以下令人瞠目结舌的统计数据:
目前,全球仍有 2200 亿行 COBOL 代码被持续使用。
COBOL 在全部银行系统基础设施中占据 43%。
COBOL 支持的系统每天处理 3 万亿美元的商业交易。
COBOL 处理着 95% 的 ATM 机刷卡业务。
COBOL 支撑着高达 80% 的店面信用卡交易操作。
如大家所见,如果 COBOL 及相关系统突然消失,人类社会很可能会瞬间崩溃。银行账户与支票清算服务,外加面向公众的各类基础设施(包括 ATM 机与交通信号灯)仍在使用几十年前编写的 COBOL 代码。
这类陈旧系统的升级之路绝不像听起来这么简单。因为此类系统往往扮演着极为重要的角色,意味着各分支机构、金融、政府乃至整个商业世界都在 24/7 全天候依赖于这些系统。另外,其中的 COBOL 代码老旧、分层而且往往极度缺少说明文档。再加上升级过程不能破坏系统的正常运行,导致整个过程就像是在正在前进的飞机上拆下螺旋桨、然后换个喷气发动机上去。
那些迁移失败的案例...
去年,美国政府问责办公室曾在报告中 26 次提到 COBOL,并敦促各机构对核心陈旧技术进行现代化升级。HP Marin Group 首席技术官 Phil Teplitzky 表示,目前仍在使用的 COBOL 代码数量超过 2400 亿行,它们的存在完全是为了支撑企业继续使用早已陈旧不堪的计算系统。
这些系统构建于几十年前,如今已经鲜有关于其设计思路的说明文档,因此政府机构及企业只能依赖长期在职的程序员们回忆这些具体细节。Teplitzky 将其称为 COBOL“民俗学”。更可怕的是,很多专家已经去世,而在被要求对这些系统的代码做出重大修改时,在职人员往往感到无从下手。
COBOL 代码的陈旧编写方式,同样给更新带来了挑战。现代计算语言会将程序拆分成多个块,每个块拥有明确且特定的用途。COBOL 程序员则往往将所有内容编织在一起,意味着对其中任意部分的代码做出变更,都有可能影响或损坏程序的其他部分。这种现象被称为“意面代码”,彼此缠绕的状态令代码修改比学习编程语言本身难上十倍甚至百倍。
除了风险,迁移至现代系统的方案还存在不少经济障碍。维持这类大型机与 COBOL 程序的正常运转需要花费惊人的成本,考虑到代码本身仍能正常运行,各机构真的有必要放弃一切、重新开始吗?决策者很难做出这样的判断。
希尔斯伯勒县学区的学生信息系统就是基于 COBOL 构建的。该系统最初安装于 1984 年的 IBM 大型计算机中,由 14 名 COBOL 程序员和大型机操作员负责维护,每年维护花费 150 万美元。与其他大型学区相比,该学区的学生需要在这种又老又笨重的大型台式机组成的计算机实验室中学习,而不是在配备较小平板电脑的教室中。他们不得不进行升级,希望能将该系统从 COBOL 迁移到 Java。“但他们花了四年,仍然没有完成。”他们的顾问 COBOL Cowboys 公司的 Hinshaw 表示。
澳大利亚联邦银行曾在 2012 年借助埃森哲和 SAP 替换了其核心 COBOL 平台。这个项目十分复杂,不同时代的老系统紧密交织在一起,一旦失败,成千上万客户的帐户数据就会消失。转换成功前后花去五年时间,最终成本为 7.499 亿美元(约合 10 亿澳元)。
这还是一切按计划进行的结果。再来看另一例,英国银行 TSB 在 2018 年被迫进行了一轮 COBOL 系统迁移,由于执行不力,导致整个银行的正常交易中断数日,最终迁移成本为 3.3 亿英镑——这还不包括实际迁移产生的工程费用。此外,TSB 在系统崩溃期间还因财务欺诈损失了 4910 万英镑。
客户赔偿总额更高达 1.25 亿英镑,TSB 方面还被迫投入 1.22 亿英镑雇用新员工以处理多达 204000 例客户投诉案。首席执行官因此引咎辞职,到事件两年后的今天,TSB 仍没能彻底走出这片阴影。
“真心不推荐你学习 COBOL!”
大多数 COBOL 代码都运行在大型机上,而这些计算设备出自 IBM 之手。多年以来,IBM 公司一直在努力帮助客户物色 COBOL 技术专家,并说服年轻人继承这门“老手艺”。
就在上周,IBM 方面宣布推出一项新的培训课程,除了向初学者传授 COBOL 知识之外,也帮助经验丰富的专业人员进一步提升自身水平。IBM 公司副总裁 Barry Baker 表示,“事实上,某些关键系统一直没能得到应有的关注。现在的年轻人有必要了解并掌握某些早期技术,这也足以支撑起理想的职业生涯。更重要的是,专业的传承具有重大意义。”
Gartner 方面估计,目前全球 COBOL 程序员的平均年龄已经超过 60 岁。掌握 COBOL 编程技巧的程序员要么退休了、要么正在考虑退休、要么已经不幸离世。是的,能够保障这些重要系统正常运转的技术人员群体正在快速萎缩。新的、年轻的程序员们压根不知道怎么使用 COBOL,而且大多数人也不想维护或者更新这些陈旧的系统。
在 2004 年进行统计时,Gartner 方面发现拥有 COBOL 技能的专家约有 200 万名,这一数字每年下降约 5%。瑞士联合银行的统计数据则显示,目前全球软件开发者总数约为 2500 万。通常,当对编程语言的需求超过程序员供应量时,技术行业就会做出调整。近年来,大学中的计算机科学课程正成倍增加,也出现了不少帮助人们快速掌握 Java、Python 以及其他语言的开发训练营。但 COBOL,显然不在此列。
COBOL 的全称为“面向商业的通用语言”,诞生于上世纪五十年代末,当时大学中甚至还没有任何计算机科学课程。在缺少学术界支持的情况下,众多 COBOL 程序员开始在政府机关、保险、银行以及票务预订等领域使用该语言,他们也被广泛视为科技行业的第一代蓝领工人。
斯坦福大学退休教授 Gio WIederhold 指出,“我个人真心不推荐现在的学生们学习 COBOL。跟这种语言相关的全都是维护性工作,给不了人什么有意义的启发。”Wiederhold 曾经培养出成千上万计算机科学家,他的学生先后在苹果公司、Facebook 以及谷歌等硅谷科技巨头工作。他还回忆道,斯坦福大学自从 1979 年迁址以来就再没设置过 COBOL 课程。
75 岁的 Mahmoud Ezzeldin 表示,“这是一场灾难。”曾为保险公司 Blue Cross Blue Shield 与美国国税局工作的他拥有数十年的 COBOL 计算机系统工作经验,他说“COBOL 确实是种很难掌握的语言,而且在设计上也没有考虑到互联网这一运行背景。现在的大学生都喜欢学点简单的东西,这不怪他们。”
Gartner 公司分析师 Thomas Kinect 则认为,企业及其他组织需要在招募 COBOL 人员方面再加把劲,包括开出更高的薪酬。否则,这些老设备和老系统就要停摆了。他强调,“看看那些招聘启事,大家就能感受到这有多荒谬了。这些职位的入门要求是 20 年工作经验,但开出的年薪只有 35000 美元。”
这个问题迫使已经退休的 COBOL 资深大牛 Bill Hinshaw 再度出山,建立了 COBOL Cowboys 公司。这是一家私人咨询企业,专为那些身陷绝望、找不到任何 COBOL 程序员的企业客户提供帮助。他们清楚地知道,当下全球财富五百强企业的系统当中有 90% 都运行在 COBOL 基础之上。Hinshaw 说,在担任兼职顾问的 20 位“牛仔”中,有许多已经达到退休年龄,尽管有些“年轻人”:“好吧,我称他们为年轻人,但他们也已经 50 多岁了。”这些经验丰富的 COBOL 程序员,他们修补各种故障,重写编码手册,使新系统与旧系统一起工作,但每小时只赚 100 美元。
小结
维持现状不可行,但全面升级似乎同样不靠谱。无论如何,想要切实改善事态,唯一的方法就是寻找受控且谨慎的现代软件与硬件迁移道路。
为了在实现这一目标的同时,不致引发业务中断、数据丢失以及系统宕机,各类机构需要投入大量专业人才与金钱。而这,还仅仅是成功迁移的一半;另外一半则在于 COBOL 专家与时间周期。遗憾的是,目前我们既找不到充足的 COBOL 专家,也没有太多时间可耗。
参考阅读:
https://www.howtogeek.com/667596/what-is-cobol-and-why-do-so-many-institutions-rely-on-it/
https://news.bloomberglaw.com/banking-law/an-ancient-computer-language-is-slowing-americas-giant-stimulus
本文来自微信公众号:InfoQ(ID:infoqchina),作者:Dave McKay、Ian King等
网址: 80岁都无法退休的COBOL程序员 http://m.xishuta.com/newsview21384.html