老代码不死_风闻
code2Real-有人就有江湖,有code就有bug2022-02-16 10:13
IEEE Spectrum 编程语言排行榜一年发布一次。
与其它排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果。考虑到不同 Spectrum 读者的需求,他们提供了几个预设的权重 —— 如新兴的语言、雇主/求职者需求的语言、开源的热门语言等。读者也可按 Web 端、移动端、嵌入式等不同的应用场景来对语言进行排序。
2020 年,无法绕开的 COVID-19 也在这份榜单中留下了痕迹。例如,将交互指标切换至 Twitter 后排名飙升至第 7 的 Cobol。这是一门相当古老的语言,多被用于一些比较重要且大型的商业数据处理领域。即便已经过时多年,多数金融业核心系统仍在使用 Cobol。系统庞大难修改是一方面,Cobol 的稳定性也使它的生命延期超乎寻常。
今年,受疫情影响,美国政府需要处理大量失业给付,但难以应付 Cobol 编写的老旧系统,许多地方的失业救济金系统不堪重负,非完全自动化的程序操作起来也很耗时耗力。因此,很多已退休的 Cobol 又返回来协助维护系统,Cobol 的创始团队还在网上公开了教程和学习资源。这则比较特别的新闻在那段时间引发了网络热议,Cobol 语言的讨论度迅速上升,这一切都被记录在榜单中。
cobol真正体现了“老兵不死”的精神。
作为一种1959年诞生的编程语言,cobol已经有60多年的历史了。
若说cobol的优点,好象并不多,但是它比较稳定,在数据处理上有一定优点,对于重视精度和稳定性的银行业,这是很重要的优点。
具体而言:
1.真正的定点变量和数学。所以,对于15美元75美分,您的内部表示是二进制数字1、5、7和5。这是相对于标准浮点近似的精确表示。此外,该固定点变量的所有加减也是固定点变量。学过c/c++,java都知道浮点计算会损失精度,如果用java开发银行软件,不能用标准浮点数进行处理。
2.报表编写器扩展非常擅长生成报表和处理页眉、页脚、分页符、分节符,以及与生成报表有关的任何内容。至少c/c++,java标准库不支持。
3.排序/合并扩展也非常非常好。使用各种允许的构造,您可以简单地排序/合并,或者在排序之前处理排序输入记录,或者在排序之后排序输出。例如,直接将输入记录送入排序,但在排序的记录上使用报表编写器,而不必在代码中管理中间排序的文件。
cobol程序员很像传统的银行职员,保守稳重,总是西服三件套,不像硅谷的程序员,身穿T恤杉,牛仔裤。在几十年前,cobol程序员象天使一样伺候上帝一样围着Mainframe转。
自微机兴起后,越来越多的平民涉足计算机编程,他们生性自由奔放,不喜欢cobol语言的古板与严谨,所以cobol不受新生代的欢迎。
尽管有文档,但是代码中真正有价值的是业务逻辑,可惜,老代码的业务逻辑大部分留在cobol程序员的脑海里,随着这些老程序员的退休和死亡,这些业务逻辑被带进坟墓。
由于这些老代码仍然可以稳定运行,所以没有人敢轻易抛弃这些代码。所以对关键业务而言,硬件是可更换的行星,而软件是恒星,一旦能正常上线,可以稳定运行五六十年之久。
有人分析过C/C++的寿命,认为C/C++至少还能活20年,因为任何一种新语言要取代旧语言,只有两种选择:
1)开辟新领域:java通过借web东风,确定了自己的地位;
2)把旧代码用新语言重写一遍。这在经济上是不合算的。早在十几年前,就不断有人认为java将死,但是想到要将1000亿行java代码重写一遍,不仅需要至少10年的时间,而且经济上不能承受(至少需要招上百万程序员做这个代码迁移工作),大家还是继续容忍JAVA的又臭又长的裹脚布。即使推出scala,Kotlin这样的编程语言,仍然很难动摇java的根基。
在自然界,古生物学家发现过去几亿年,每隔一段时间会有生物大灭绝,大灾之后,新的生物获得发展空间。
但是在编程领域,缺少这样的大灾难。所以才有cobol语言这样的老代码。
所以,很久以前,我曾经思考过一个问题:为什么会有死亡?为什么很少存在长生不老的生物?
我的回答是,长生不老意味着生物缺乏应对变化的能力,可能会在某次大灭绝之后就消失了。
那些能够速死的生物种群,会为变化提供可能。
电信领域的erlang,为了追求99.9999999%的高可靠性,采取多种方法,其中一个措施是“速死”,在问题发生之前就让可能出现问题的代码/线程死亡,消灭问题于萌芽之中。
曾经美国人在海滩上实践了一次大灭绝行动,他们用多种杀虫灭菌药消灭海滩上的微生物和虫子。三个月后,海滩上又重新产生新的生物种群,这些种群与原有的种群不一样,但是都具有抗药性。
对于生物而言,某些个体可能存在消化不良等疾病,但是在大灭绝中,这些有问题的生物个体反而因祸得福,因为消化不良,吃的杀虫灭菌药比较少,没死,反而进化出了抗药性。
我们现在之所以要保护生物多样性,就是为了防止生物品种太单一而导致的生物灭绝。
对于科学理论,有人说:新理论之所以战胜旧理论,不是旧理论支持者都改信新理论了,而是终于把那群信旧理论的老家伙熬死了。
与科学理论不一样,软件不存在熬死老代码的开发者的问题,因为一些业务会持续很长时间,只要业务在,老代码就一直在发挥作用,除非人类社会遭遇大的变故,银行和金融完全不需要了。