毒蜂作品 25-04-03 09:52
微博认证:读物博主

刚才我提到了屎山。很多人不理解:什么叫屎山?

屎山的全称是:屎山代码。

这个代码并不是指某一段具体功能出错的代码,而是从整体上形容一个项目的代码混乱无序。

这类代码往往缺乏清晰合理的结构,模块之间的边界模糊不清,不同功能的代码随意交织在一起,如同将各种食材随意搅拌成一团,难以分辨和处理。

代码中还存在大量的重复代码,一个简单功能可能在多个地方重复实现,不仅浪费存储空间,还增加了修改和维护的工作量。

冗余代码也很多,一些不再使用却未被清理的代码片段混杂其中,使代码变得臃肿不堪。而且,屎山代码的语法和命名不规范,变量名随意,难以从名称判断其用途,让阅读和理解代码变得极为困难。

那么这种屎山代码是如何形成的呢?

在软件开发过程中,需求不断变更,新功能持续添加,是一个主要的原因。

后续的开发者为了尽快完成任务,往往在原有的基础上修修补补,没有时间和精力对整体代码进行优化和重构,导致代码结构逐渐混乱。

不同程序员的风格差异也是一大原因,一个项目如果由多个程序员接力开发,由于各自的编程习惯、设计思路不同,代码就很难统一规范,久而久之便杂乱无章。

另外,赶进度的情况下,程序员可能会选择一些简单直接但不规范的实现方式,以快速完成任务,这些短期行为最终也会让代码质量下降,形成屎山。

那么屎山代码会带来哪些危害呢?

屎山代码严重影响项目的维护成本。当需要修改或添加功能时,开发人员要花费大量时间去梳理代码逻辑,定位相关代码位置,增加了出错的可能性。

在大型项目中,这种效率的降低会导致项目进度延误,成本大幅增加。而且,屎山代码让新成员难以快速上手,增加了团队协作的难度,阻碍项目的顺利推进。

同时,它也存在很高的风险,由于代码结构混乱,一个小的修改可能引发一系列意想不到的连锁反应,导致程序出现难以排查和修复的错误。

那么优秀的程序员,是如何应对屎山代码的?

对于已经形成的屎山代码,逐步重构是关键。可以制定合理的重构计划,按照功能模块逐步梳理和优化代码,先从核心功能模块入手,提高代码的可读性和可维护性。

但是,在这些代码还不够复杂的时候,重构这些代码,其本质也不过是一种质量稍高的修修补补而已。随着时间的推移,这座代码构成的屎山,其内部结构越来越复杂之后,你再对他进行修补,其成本甚至远高于重新写一个新的。

比如最近日本的一件事:2023年10月10日,日本金融遭遇了一场灾难性的支付系统故障。

日本全国银行资金结算网,这个为日本全国1000多家金融机构提供结算服务,平均每天处理650万笔交易,涉及资金超过12万亿日元(约合810亿美元)的关键系统,突然陷入瘫痪。

从当天上午8点半开始,三菱日联银行、理索纳(Resona)银行、埼玉理索纳银行等11家金融机构深受影响,无论是窗口业务、ATM机操作,还是网上银行服务,均无法向其他银行进行转账,同时也无法接收来自其他银行的汇款。

两天内,受影响的汇出、汇入交易分别多达255万笔和251万笔。由于10月10日是日本许多企业发放工资的日子,且此前有周末及公众假日“体育日”,结算业务量远超平常,此次故障给民众生活和企业运营造成极大不便,部分地区儿童补贴发放、企业工资发放以及企业间资金往来均被延迟。

究其根源,是将各金融机构与全国银行间结算系统连接起来的“中继计算机”软件出了问题。在10月7日 - 9日的系统更新中,把旧的RC17系列的14家金融机构迁移到新的RC23系列时,对索引表扩容考虑欠佳,致使索引表损坏,进而引发系统故障。

长期以来,日本全国银行资金结算网系统一直依赖着诞生于1973年启用之初的老旧代码!!!我有必要提醒你一下,故障发生在2023年。也就是说,这是一座堆积了50年的巨大屎山!!!

多年来,面对这座屎山不断出现的各种问题,技术人员只能在原有基础上进行修修补补。每一次出现故障,就临时编写一些代码来解决当下问题,没有从整体架构和长远发展去考虑。

随着时间推移,代码变得杂乱无章,新添加的功能和修正的错误与原有的代码交织在一起,模块之间的逻辑关系混乱不堪,形成了典型的“屎山代码”。

当这次故障发生后,技术人员最初仍尝试采用以往修修补补的方式解决问题。但这次,“屎山代码”的复杂性使得常规修补毫无效果。

经过两天的连夜抢修,问题依然无法解决。直到12日黎明前,针对系统软件故障的修复工作才完成,上午8点半汇款交易才恢复正常。

面对这样的情况,日本相关部门意识到,对这套老旧系统的代码进行从底层重写重建或许才是根本的解决之道。如果继续对“屎山代码”修修补补,未来可能会面临更频繁、更严重的故障,每一次故障所带来的经济损失和社会影响都难以估量。而且,不断为老旧代码添加补丁,会让维护成本越来越高,效率越来越低。

若选择重写重建,采用当下先进的编程语言和框架,新代码在可读性、可维护性和运行效率上都将有质的提升。

当然,重写重建需要投入巨额资金,用于开发、测试、人员培训等,虽然目前难以估算具体金额,但肯定是一笔庞大的开支。同时由于系统庞大复杂,涉及众多金融机构和业务环节,可能需要数年时间才能完成。

在计算机领域,这叫做代码重建。在社会科学领域,这被称为——革命。

发布于 天津