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

2018 年 12 月 20 日 九章算法


程序猿的终极噩梦应该是祖传代码了吧。


很多码农小萌新们,都经历过这样的时刻吧。矜矜业业检查前人代码时,发现了明显到觉得智障的漏洞,认真的你准备大刀阔斧地修改,但你的老司机同事可能会劝你最好不要动,并露出意味深长的表情。


因为他们知道,你遇到了祖传代码。


什么是祖传代码


祖传代码(legacy code)就字面意思而言,就是前人程序猿给你留的“宝藏”代码。这些代码都存在着问题,但你要么就无从下手无法修改,要么就一改出大问题,这就是为什么这些宝藏会存在这么久流传到你的手上。


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


//add by xxxx 201x-x-x: 这是一段神奇的代码。。反正这么写就对了


或是这样的



“曾经我一直不信还有能让人辞职的代码,

直到我遇到了祖传代码。”

——By 网友


几乎每个公司都存在着祖传代码


每家公司都会有那么些“历史遗留问题”。亚马逊的工程师形容说他们的代码:“一座很大的屎山,你见过的最大的山,每次你想修正一个bug,你的工作就是爬到屎山的正中心去”。


有网友曾发现了微软的祖传代码。


看过几年Windows内核的代码,也就只是看看,不能改。有时候看到一些奇怪的逻辑,不要慌张,这里面一定有一个很长的故事。

不过万事没有绝对。

有一次和同事一起调试一个蓝屏,看到一段内核内存管理的代码,有一个地方没看懂,貌似for循环多循环了一次。恩,这一定是我们的理解能力太差了。然后我们仔细看了一下午,终于想出了几个貌似合理的解释。为了确认,我们鼓起勇气写信给当时Windows内存管理的大牛Landy(他现在已经是tech fellow了)询问了此事。

结果人家很快回复了我们。"It is a bug since day 1. I have just checked in a fix." 留下我们俩一脸懵逼。

就这样一个从NT开始藏了十多年的bug被两个小白给发现了。

ps. 这个bug没有什么显著影响,只是内核态内存分配性能略微受损。

—by知乎@Tim Chen



有些祖传代码,你一动, 我们就再也回不去了


我们组有一个著名的6000行后端JS,没有面向对象封装,纯靠函数。其中有好几个上千行的函数,带了二十多个形参,几个标志位,分别有十几个数字状态。注释?没有的。

每一个接手过这段代码的人都会不约而同的发一条朋友圈以示佩服。

但神奇的是,代码在执行上基本没太多的错。

直到几个月前,一个大牛在走之前把这段代码全部重写了一遍,留下了至今都没有改完的bug。

——by 网友


也许你只是想改个注释,但却出现了以下场景。



有时候,祖传代码是可以用来创造岗位的


刚来到这家公司的时候,看那些老旧代码觉得逻辑为何这么绕,本来是一个很直接的事,非要绕着圈子写,没必要共用一个函数还非要实现一个公共函数,结果该公共函数超级复杂。

后来发现负责的模块比较稳定的人都被fire了,明白了叔叔大爷们的良苦用心。

在某些国家的某些行业里,保住饭碗是多么不易啊!

——知乎网友 @砖头


一个祖传代码是如何代代相传的


面对祖传代码,每个接手的程序猿都会添点新料,但没有谁有勇气真的去解决,毕竟谁也不想给自己挖坑。




很多行业是前人栽树后人乘凉的,不过程序猿很多时候却是前人挖坑,后人填坑的


希望猿界,大家能多给后人留条活路。




相关阅读:

我见过最有趣的代码注释,都在这里了


九章算法 | 帮助更多中国人找到好工作


全栈开发项目实战

美西时间1月6日周日 10:00-12 a.m

北京时间1月7日周一 02:00-04 a.m


九章基础算法班(Java)互动课

随时上课,正在报名中


拉到文末阅读原文,可免费报名!



登录查看更多
4

相关内容

程序猿的天敌 有时是一个不能碰的magic
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【CVPR2020】图神经网络中的几何原理连接
专知会员服务
56+阅读 · 2020年4月8日
Python数据分析:过去、现在和未来,52页ppt
专知会员服务
99+阅读 · 2020年3月9日
我的if else代码纯净无暇,一个字也不能简化
机器之心
3+阅读 · 2018年12月28日
已删除
雪球
6+阅读 · 2018年8月19日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
PyTorch 到底好用在哪里?
AI研习社
3+阅读 · 2017年10月27日
AI都干过什么让人细思极恐的事?
全球创新论坛
4+阅读 · 2017年9月15日
你见过马化腾17年前写的代码吗?
互联网it观察
5+阅读 · 2017年7月3日
Arxiv
11+阅读 · 2018年1月15日
Arxiv
9+阅读 · 2018年1月4日
Arxiv
27+阅读 · 2017年12月6日
Arxiv
6+阅读 · 2016年1月15日
VIP会员
相关VIP内容
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【CVPR2020】图神经网络中的几何原理连接
专知会员服务
56+阅读 · 2020年4月8日
Python数据分析:过去、现在和未来,52页ppt
专知会员服务
99+阅读 · 2020年3月9日
相关资讯
我的if else代码纯净无暇,一个字也不能简化
机器之心
3+阅读 · 2018年12月28日
已删除
雪球
6+阅读 · 2018年8月19日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
PyTorch 到底好用在哪里?
AI研习社
3+阅读 · 2017年10月27日
AI都干过什么让人细思极恐的事?
全球创新论坛
4+阅读 · 2017年9月15日
你见过马化腾17年前写的代码吗?
互联网it观察
5+阅读 · 2017年7月3日
相关论文
Top
微信扫码咨询专知VIP会员