接手老代码,真是逃不开的宿命吗?
“有问有答”栏目,是程序视界提供的免费咨询入口。想参与,可以这样:
公众号后留言,以“有问有答”开头。
描述你的困惑或者问题。
我每周会慎重回答一个问题并整理成文章,周四发布在订阅号程序视界内。
如果觉得这种方式较为麻烦,或者你的问题较为复杂,可以使用“在行”小程序,搜索“安晓辉”,付费约我一对一咨询。
我是一名嵌入式软件工程师,刚入职一家公司的新产品部门。新公司的产品对于我来说是新的业务,我原来不在这个行业。由于新产品开发(这里称项目A)需求不算很急,就被安排参与到项目B(使用新技术从新开发现有产品),只是参与,主要工作任务 还在项目A。
后来又因为项目B的负责人(同事A)忙于维护公司现有产品(这里称项目C,公司主要产品),我被任命为项目B的负责人。在任命的同时,领导也说了打算让我做完项目B后再接手项目C的维护工作,且接管项目C的团队。但是我心里是不想接手项目C的工作的,因为我看过项目C的代码,简直是不堪入目,一看到他的代码就像吃了苍蝇一样,心里是很抗拒的。所以我当时就跟领导说,做项目B的项目负责人我很乐意,但是要接手项目C的工作我要考虑一下。心里想着先把项目B按进度完成(周期也要一年半载),如果到时领导还是坚持让我接手项目C,我就拒绝,那时我对新业务也熟悉了,即使谈不来我也可以找别的出路。
但是计划没有变化快!项目B还没进入正轨,前不久由于同事A被客户和公司里的其他同事投诉,领导又觉得同事A的性格原因(确实比较难沟通)不适合在项目C中对接客户,就直接安排我接手项目C的维护工作了,然后项目B的负责人还是由同事A负责,我还是参与到项目B中。
我的问题是:我现在是否马上找领导说明我不想接手项目C的工作,还是继续忍受着项目C的烂代码,一边还要参与项目B的工作?
盼复!
先找领导表明态度,如果领导坚持让你接手项目C的工作,那你再来考虑,你对老代码的厌恶是否足以让你放弃当下的工作,如果没到那个程度,就接手喽,如果到那个程度,走就好了。
◇◇◇
为什么要先说明你不想接手老代码呢?
这是因为,我们干工作,最重要的,是自己开心嘛,如果这个工作,让你天天恶心,上班如上坟,那还是换个环境好呀。
即便这个工作没到那个程度,但你不争取,就一定会做你不喜欢的。那如果将来你发现,当年要是争取下,就可能有转机,那你就会后悔呀。因为,最让人遗憾的,不是你做不到,而是你原本可以。
◇◇◇
那为什么还建议你在某个条件下接手老代码呢?
我来先讲两个我亲历的例子,看了你会更有体会。
(1)
原来我带的团队里,有一份实现P2P传输的C代码,混合了C++和C两种写法,经历了4个人的手,糅合了各种风格,打满了花式补丁。
2012年,维护这份代码的程序员离职了,我招了有三年开发经验的小黄进来,让他接手这份代码。
小黄猫在工位上,一个星期都没找我,也没告诉我能否看懂老代码。我找他问,他说刚开始看。
又过了两个星期,小黄找到我说,觉得自己不适合做开发了,要离职。
我知道,罪魁祸首是这份老代码……但我还是同意他走了。
(2)
2014年11月份,我进了QS,在云会议客户端团队工作。这个团队负责的会议SDK和客户端,代码是十来年前的,老员工都走光了,没人熟系,团队的负责人YJ,也是1个月前刚刚来的。当时YJ还从苏州到西安来接收西安这边的人员,和我聊了一次。
YJ一开始只是接手了SDK客户端团队,他算是最基层的经理角色。
2017年7月,我离开QS的时候,YJ还是原来的角色,大部分代码都经历了重构,但团队里的成员,基本上又换了一遍——大部分人受不了规模庞大的老代码和基于这些代码的各种修修改改。
2018年,YJ成了更高一级研发部门的负责人,SDK客户端团队、服务器、音视频,都归他管了。
现在,YJ是QS的CTO了。
看完这两个例子,我们会发现,其实老代码,既可能给我们带来难以承受的苦难让我们退避三舍,也可能给我们带来挑战让我们涅槃重生。
那究竟会是什么情况呢?取决于两点:
这份老代码是否重要
你如何看待老代码
先说第1点,以你现在的情况来看,项目C可能是比较重要的,因为有客户不断在使用,领导想安排得力的人来接手。当然具体怎么样,还要你来判断。如果它比较重要,那就是个机会。
再说第2点,屎一样的老代码,当然让人难受,但从另一个角度讲,这也是一个挑战,你如果把它当个挑战,能借着陆续出现的新需求,慢慢把老代码重构了,焕发新机,并让领导看到成果,那你就经受住了考验,后面可能有更多机会,比如项目B,也可能是你的。
关于老代码重构,可以看看这本书:
最后,再重复一下,关于你碰到的老代码情况,我的建议是这样的:
- 先找领导谈,说你不愿意接手老代码
- 如果领导同意,最好。
- 如果领导不同意,问问你是否愿意因为老代码的事儿放弃这个工作机会,如果不愿意,就留下来,干死老代码,干好老代码,赢得转机。
愿你做出好决定。
◇◇◇
最近文章