程序猿的终极噩梦应该是祖传代码了吧。
很多码农小萌新们,都经历过这样的时刻吧。矜矜业业检查前人代码时,发现了明显到觉得智障的漏洞,认真的你准备大刀阔斧地修改,但你的老司机同事可能会劝你最好不要动,并露出意味深长的表情。
因为他们知道,你遇到了祖传代码。
什么是祖传代码
祖传代码(legacy code)就字面意思而言,就是前人程序猿给你留的“宝藏”代码。这些代码都存在着问题,但你要么就无从下手无法修改,要么就一改出大问题,这就是为什么这些宝藏会存在这么久流传到你的手上。
比如,你可能会遇到这样的代码。
//add by xxxx 201x-x-x: 这是一段神奇的代码。。反正这么写就对了
“曾经我一直不信还有能让人辞职的代码,
直到我遇到了祖传代码。”
几乎每个公司都存在着祖传代码
每家公司都会有那么些“历史遗留问题”。亚马逊的工程师形容说他们的代码:“一座很大的屎山,你见过的最大的山,每次你想修正一个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了,明白了叔叔大爷们的良苦用心。
在某些国家的某些行业里,保住饭碗是多么不易啊!
——知乎网友 @砖头
一个祖传代码是如何代代相传的
面对祖传代码,每个接手的程序猿都会添点新料,但没有谁有勇气真的去解决,毕竟谁也不想给自己挖坑。
很多行业是前人栽树后人乘凉的,不过程序猿很多时候却是前人挖坑,后人填坑的。
希望猿界,大家能多给后人留条活路。
其实对于新员工,特别是刚进入职场的新人。进入到公司的时候肯定会接触到老项目,老代码。如果你没遇到,那么就是新公司,要么就是新项目!接触到老项目的新员工或新职场人,看到老项目的代码时,总是有想改动的冲动!!!跟当年我进入公司一样一样滴,不过你要是重构的话,劝你少做这样的事!
- 第一:会花费大量的时间。而且你手头也有任务,所以会消耗你大量的精力!
- 第二:重构还可能带来很多新的bug,老的项目已经打了几次补丁,已经很“稳健”了!你改好了,没人表扬,要是改出线上问题,那可是要绩效处理的!
所以 劝年轻人一定要三思而后行!!!!不要只看到代码糟糕,可能上一个人没办法那样写,因为是上上个人留下来的代码造成不好改!!!
同样的,你看别人代码很垃圾,别人看你写的其实也不会觉得好到哪里去。除非你真的本事过硬。比周围的同事都要高出一大截的技术!!!否则你也不会好到哪里去
本文来自投稿,不代表天一生活立场,如若转载,请注明出处:http://tiyigo.com/phone/30774.html