祖传代码跟人有爷爷一样,不可避免,人人都会碰上,所以这里,我想讨论下,如果领导让你接手一个有很多祖传代码的老项目,你接还是不接?
一
先讲两个我亲历的与祖传代码相关的例子。
(1)
原来我带的团队里,有一份实现P2P传输的C代码,混合了C++和C两种写法,经历了4个人的手,糅合了各种风格,打满了花式补丁。
2012年,维护这份代码的程序员离职了,我招了有三年开发经验的小黄进来,让他接手这份代码。
小黄猫在工位上,一个星期都没找我,也没告诉我能否看懂老代码。我找他问,他说刚开始看。
又过了两个星期,小黄找到我说,觉得自己不适合做开发了,要离职。
我知道,罪魁祸首是这份老代码……但我还是同意他走了。
(2)
2014年11月份,我进了QS,在云会议客户端团队工作。这个团队负责的会议SDK和客户端,代码是十来年前的,老员工都走光了,没人熟系,团队的负责人YJ,也是1个月前刚刚来的。当时YJ还从苏州到西安来接收西安这边的人员,和我聊了一次。
YJ一开始只是接手了SDK客户端团队,他算是最基层的经理角色。
2017年7月,我离开QS的时候,YJ还是原来的角色,大部分代码都经历了重构,但团队里的成员,基本上又换了一遍——大部分人受不了规模庞大的老代码和基于这些代码的各种修修改改。
2018年,YJ成了更高一级研发部门的负责人,SDK客户端团队、服务器、音视频,都归他管了。
现在,2020年,我了解到,YJ是QS的CTO了。
二
看完这两个例子,我们会发现,其实老代码,既可能给我们带来难以承受的苦难让我们退避三舍,也可能给我们带来挑战让我们浴火重生。
那假如领导要求你接手祖传代码,你到底要不要接手呢?
其实,是否接手,取决于两点:
- 个人对老代码有多讨厌
- 这份老代码是否足够重要
先说第1点,假如你对老代码特别讨厌,讨厌到看见它们就有生理反应,那不接就不接吧,哪怕为此丢了工作,也不要接。
因为呀,干工作,最重要的,是自己开心嘛,如果这个工作,让你天天恶心,上班如上坟,那何必呢?
当你觉得,老代码即便像屎一样,你也能搅合搅合的话,那再来说第2点。如果这份老代码很重要,是某个重要产品的支柱,或者后面会有很重要的发展可能,那这就是个机会呀,抓住嚒,大不了弄一手屎,水龙头低下冲一冲呗。
三
你决定接手祖传代码之后,你是会浴火重生,还是会缴械投降,就取决于你如何看待它们了。
假如你把祖传代码当作一个挑战,能借着陆续出现的新需求,慢慢把老代码重构了,焕发新机,并让领导看到成果,那你可能就会浴火重生,看到后面的机会,获得更多的资源,拥有更大的选择权。
假如你以“捏着鼻子忍受”的态度来对待,觉得闭住呼吸忍受一阵子,忍到机会到来,就可以解放了,那恐怕,你多半忍不到那个时候,两个原因,一是,你的气儿没那么长,可能憋不住就放弃了,二是,你心里总觉得再忍,总不接纳这个现实,你就很难把这老代码搞定,很难搞出成绩,你搞不出成绩,自然就没后面的机会了。