怎样和虐死人的老项目谈恋爱

转载 2017年05月17日 19:08:00

有位朋友说他最近失眠严重,都是因为接手了两个老项目,情况如下(我整理了聊天记录):

我最近接到两个有点坑的 VS 旧项目,之前一直是接触 Qt ,没有接触过 VC++ 和 MFC 库,感觉有些吃力。

现在好不容易解了一个旧项目的 BUG ,但是另一个更恐怖,整个项目只有我一个人,什么也不懂,正在慢慢摸索。

这个老项目是好几年前的,原来的开发人员都离职了,也没什么文档,只有代码,代码中用了好多库, poco 、 boost 、 thrift 等等,还用了 Python 混编……这些东西我以前都没接触过,看起代码来云里雾里,心里没什么底。

关键是我看不懂的代码和逻辑,也无处能问——老同事离职了,现在的同事,没有一个了解这些代码的。我经常一脸无助+懵逼,心里压力很大,都开始吃不消了。

经理给的时间很紧,一直在催我,导致我神经一直在绷紧状,总感觉活在恐惧中,所以最近失眠严重……

这样的状态,认真负责的你,可曾经历过吗?有没有想过怎样才能愉快地和老项目相处?

开发者的老项目宿命

说实话,作为开发者,我们都讨厌接手老项目,可是,开发者的宿命就是:你别无选择,终归要和一个老项目相爱相杀

包括我自己,做开发十多年,可以说有八年都在和老项目鏖战!从 2015 年到现在,都在和有十几年历史的老项目卿卿我我!

时常会有奔溃的赶脚啊!

然而我们真的不能不管老项目吗?

答案是:不能!不能!不能!

原因很简单:一个项目,一旦发布上线,交付使用,就会成为老项目,但是它的声明周期却不会结束,紧接着就是修复 Bug 、添加功能、性能优化等等。

所以,所有的新项目,终归都会成为老项目!

所以,从这个角度上讲,即便你从头开始做了一个新项目,做着做着就成了老项目。

我 2009 年时从头开始做一个智能机顶盒的项目,做着做着就到了 2014 年,新项目就变成了老项目,人员来来去去,部分代码就不可维护了。有一次招募一个小伙伴来接手网络传输部分的代码,他待了两个星期,就因为无法搞定那些代码而离职了。

我觉得老项目就是开发者的宿命,你终归要和一个老项目相爱相杀,不是现在,就是将来,无可选择。

那么,我们能做的,就是以什么样的姿态来面对老项目。

如何与老项目恋爱

当我们无可避免的要与老项目恋爱时,怎样才能让自己愉快一点呢?

请尝试以下几点:

  • 用学习型心态来面对
  • 不断设立小目标
  • 迭代式重构
  • 记录你的经历和思考
  • 尽人事听天命

稍稍展开一下吧。

  • 学习型心态

这点是最重要的,我们要多想想:通过解决 Bug 、二次开发等,我能从这个老项目中学到什么。比如你有可能学到这些:

  • 业务逻辑
  • 好的软件架构设计
  • 不好的设计
  • 我之前未接触过的技术
  • 如何重构

学习型心态,以解决问题为目的,关注如何解决问题,关注自己在解决问题中可以收获什么。

如果你拥有这种心态,开发工作就会有趣一些。如果你是消极心态,总骂着“靠,怎么这么多烂 Bug !”,那你的工作就充满了撕扯、抗拒以及各种不愉快。

  • 不断设立小目标

对于老项目的维护和开发,要化整为零,每次就解决一个小问题,每次都给自己一个小目标,这样比较现实,Bug 、需求等小目标实现了,也会给自己一些正向激励。

如果目标太大,就拆分开,一两天完成一个小的,让自己不断有成就感,这样就容易坚持下去。

有时你接手老项目,很长时间就是阅读代码,那这个时候,就给自己定一些目标,比如今明两天了解认证鉴权的逻辑,再接下来了解这些逻辑和代码的映射关系……这样一头大象就可以一口一口的吃,不至于无从下嘴。

如果你自己无法分解你的目标,就找熟悉的同事,或者你的经历,一起讨论出一些目标,再一起拆分成小目标。

  • 迭代式重构

相信有不少朋友和我一样,看到不顺眼的代码,阅读时拒绝感很强烈,总想着重写、重写、重写,以为自己出手重写一遍,世界就会美妙起来。

我干过不少这样的事情,但是,后来我发现,当我把所有要支持的功能都叠加进去,所有意外情况都处理了,之后,我重构出来的代码,居然和原来我讨厌的老代码差不多了……

所以,现在我知道,在我想推倒重来之前,要先了解状况:

  • 这个项目的需求是什么
  • 老代码的历史是什么
  • 老代码是如何走到今天的,中间处理了什么状况
  • 如果局部重构,该从哪里开始

虽然开发者很重要的一部分工作是做设计写代码,但实际上,阅读代码是比写代码更重要的能力。当你搞不明白一份老代码的意图时,贸然推倒重写,往往会陷入泥沼。

所以,最现实的策略就是,每次都结合你要修改的功能或者 Bug ,设定较小的重构目标,比如改几个函数,改两个类的接口等等,这样既容易实现,又能够让老项目慢慢变好。日积月累,这样微小的重构就可能发生巨大的作用。

  • 记录你的经历和思考

我们很讨厌别人的代码没有文档、注释,可是我们自己的代码往往也是如此。让你去看自己两年前的代码,你可能就会讨厌它们,不忍卒读。

所以,当你接手老项目,有一项非常重要的工作可以做,就是记录你的经历和思考,显性化你取得的进展。

在你理解老项目业务逻辑、代码逻辑,修复 Bug ,新增功能的时候,把必要的注释加上,把核心的逻辑流程绘制出来,把不全或缺失的设计文档补上……

这样做有巨大好处:

  • 自己能看到自己的成果,有正向激励
  • 方便自己以后维护,提高效率
  • 方便后人维护
  • 提升项目质量,降低整体成本

这也是我们自我成长的方式,只有记录和思考,你才能不断复盘项目复盘自己,才能每做一件事情都有收获。

  • 尽人事听天命

前面的要求可能有些高,很多人觉得难以达到。没关系,我们并不是要把自己逼死,相反,我们这些要求,是为了做好项目,更重要的,是为了自己的成长,让自己有良好的自我感觉。

而,假如,你面对的情况非常特殊,你的努力几乎改变不了根本问题,很难取得突破,那这个时候,心态也要放平,要有“尽人事听天命”的豁达。

活人不能被老项目逼死,对吧,尽力去做,真做不好,可以尝试换个角度、换个项目再做做看。

不要过分苛责自己,也不要因此认为自己能力不行。这个老项目你搞不定,只能说明你在这个项目上失败了,你理解老项目遇到了困难,它真的不能说明你这个人就彻底不行。你可能很善于做技术探索,很善于架构设计,精于某类算法……我们得客观评价自己,知道自己的长处在哪里,努力把自己放到能发挥自己长处的项目中去。

要对自己负责

我们要有专业精神,努力解决问题创造价值,但另一方面,也一定要对自己负责,不要把自己逼死。

如果你觉得老项目真真是让人难以忍受,多看一天人生就多灰暗一天,那就尝试离开这个项目。

有两种方式离开一个老项目:

  1. 在公司内寻找其它的机会
  2. 公司内没有机会,就离开公司

该离开的时候,就果断一些,更好的位置,出门左转,就在拐角处。

转载地址 :  /foruok/article/details/72356115

怎样和虐死人的老项目谈恋爱

遇到令人头疼的老项目老代码,怎样才能好过一点点?
  • foruok
  • foruok
  • 2017年05月17日 06:54
  • 5135

怎样和虐死人的老项目谈恋爱

有位朋友说他最近失眠严重,都是因为接手了两个老项目,情况如下(我整理了聊天记录): 我最近接到两个有点坑的 VS 旧项目,之前一直是接触 Qt ,没有接触过 VC++ 和 MFC 库,感觉有些吃...
  • Qsir
  • Qsir
  • 2017年05月19日 11:29
  • 183

1965年美国虐童事件(美国式犯罪背景资料)

花季女童受虐惨死 1965年10月26日,印第安纳波利斯警方接到一个报警电话,称发现一个年轻女性死者。电话来自城市贫困地区一个车站前的电话亭。报案者的声音听起来像一个尚未完全变声的少年,并且...
  • FHZZWZ
  • FHZZWZ
  • 2014年09月09日 22:09
  • 11421

关于老项目切换到maven项目遇到的坑

一、maven编译遇到的问题1、antlr包丢失 需要以下组合依赖,版本也要对应上 org.hibernate hibernate-core 4.1.1.Final ...
  • Bactryki28
  • Bactryki28
  • 2017年04月08日 17:16
  • 793

各种面试题-虐虐虐

各种面试问题来的更猛烈些吧不分种类不分题型就是做不需要答案就是看题就是做1. JAVA内存空间:方法区、堆、栈? 1. 所有对象实例都是在Java堆上分配内存 2. 方法区用于存放ClassLoa...
  • gyhgx
  • gyhgx
  • 2017年05月05日 21:50
  • 718

对菜鸟程序媛来说这是个充满BUG的世界。八阿哥虐我千百遍,我待八阿哥如初恋。

菜鸟程序媛对这个充满BUG的世界的些许感悟!!!
  • u012037685
  • u012037685
  • 2014年11月14日 14:58
  • 705

与程序猿谈恋爱后,我不得不做心机婊

程序猿VS心机婊
  • TLzhelian
  • TLzhelian
  • 2017年03月23日 22:19
  • 1243

程序员也有追求爱情的资格!!!舞步学院 阿龙 教你谈恋爱

兄弟们,好久不见,今天阿龙为大家带来了一个很独特的实战案例,之所以说它很独特,是因为阿龙在这场实战恋爱中,是以一个独特的身份插入其中的。相信这个案例,能给正在苦痛暗恋和纠结恋情中挣扎的兄弟们一个很好的...
  • i2imc48g8a
  • i2imc48g8a
  • 2017年05月16日 16:28
  • 748

代码虐我千百遍,我待代码如初恋。

团队里的程序员张三丰要离职,领导让你接手他的工作,叮嘱你一定要尽快掌握张三丰的代码。你的心儿扑通扑通地跳动,你的脑海里萦绕着三个选择:是拒绝呢,还是拒绝呢,还是拒绝呢?你强颜欢笑但实际上心烦意乱怨气纵...
  • mingtianguohou100
  • mingtianguohou100
  • 2016年08月19日 09:32
  • 853

新生代与老年代

Java堆中是JVM管理的最大一块内存空间。主要存放对象实例。 在JAVA中堆被分为两块区域:新生代(young)、老年代(old)。 堆大小=新生代+老年代;(新生代占堆空间的1/3、老...
  • a519781181
  • a519781181
  • 2016年06月09日 18:13
  • 1545
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:怎样和虐死人的老项目谈恋爱
举报原因:
原因补充:

(最多只允许输入30个字)