程序猿的终极噩梦,祖传代码,一动修半年!

489 阅读3分钟

1024程序员节即将到来,今天咱就来聊点轻松诙谐的话题——那些让人好气又好笑的祖传代码

很多萌新们都经历过:兢兢业业的检查代码,结果挖出一堆不知多久以前的漏洞。当你信心满满准备修复,结果刚动手,整个系统就崩了。

这些前人贡(wa)献(keng),也被称为祖传代码,是一代又一代程序员的噩梦。

九章算法班 2020版》扩充5倍课时

课程亮点:

  • 疫情应对版《九章算法班》,令狐冲老师扩容5倍课程量
  • 8周内讲解57个面试核心高频考点
  • 课程内容由9章节增加至43章

7天视频回放,戳我即可免费报名

什么是祖传代码?

祖传代码(legacy code),就字面意思而言,就是老程序猿留下“宝藏”代码。可能当初写代码的人早就离开了,但代码逻辑混乱又无注释,后人完全看不出来写的是个啥!

要么就是前人写下的时候就不完美,历经许久,业务需求也变了,随便一动就到处是问题。

比如,你可能会遇到这样的代码:

//add by xxxx 201x-x-x:

 这是一段神奇的代码。。反正这么写就对了

几乎每家公司的代码都有“历史遗留问题”,而越是大公司,情况越严重。

亚马逊的工程师形容他们的代码:“一座很大的屎山,你见过的最大的山,每次你想修正一个bug,都得爬到屎山的正中心去”。

最最可怕的是,有些祖传代码,你一动, 就再也回不去了。

(图源自知乎网友:同一轮月亮)

用这张图再形象不过了👇

可以用新代码替换祖传代码吗?

为什么新代码不如旧的好?别着急反驳!先听我说完。

旧代码是已经**运行过、测试过的。**无数的bug在被发现前都上线运行过,发现之后程序员们可能在花了好些日子才修复了这些bug。

这种修复可能是一行代码,也可能是几个字符,无数的时间和精力都花在了这些bug修复上。

当你决定抛弃这些旧代码从零开始的时候,也丢掉了前人的全部努力。而重写可能会带来更大的风险。

对技术leader来说,重写代码也是一个异常艰难的决定。因为从公司层面说,重现代码甚至会威胁产品的市场竞争力。

一旦决定重写代码,那么与竞品相比,你可能落后了2~3年——在软件行业,这时间可够长的。

新代码带不来产品功能提升

即便新代码能实现旧代码搭建的所有功能,但实际上,重写用的新技术、新语言、新框架并没有给产品带来质的飞跃。

更不用说这个耗时又耗力的过程,还容易遇到一些意外:  

当你认为旧代码稀烂,那要怎么办?

先冷静一下,毕竟这些旧代码已经上线,也在生产环境中经受住了考验。这时候,可以从三个方面入手理解代码、改善代码

现实情况是,你重写一遍前人的代码,很有可能会再走一遍前人的老路。所以,面对糟糕的ShitCode,不要想着重写。如果还能找到写代码的人,先狠狠K一顿再说吧!