请修改这段程序,立刻!

你们正在开发一个新项目,你在一个地方看到一段有问题的代码。错误的处理方式是,“啊,别人写的,我最好别碰它”,“我没有时间去改它——我有自己的事要做”,“如果我修改它,肯定会改出问题”。

问题是——有问题的代码会越积越多。即使是很小的一段程序,经过一段时间的累计,你很快就能看到它成为一个“由一些菜鸟写的、没人愿意去维护的巨大的历史遗留项目”。有人曾说,超过6个月的项目全是“历史遗留”项目,因为里面都会积累大量的有问题的代码,或用另外一个词——技术债务。

这就是为什么你要马上修改它们的原因。当你看到一些有问题的代码,或一些不是好的写法的东西——改掉它。立即。否则,当你再次注意到它时就已经太晚了,因为其它的代码就开始依赖它,新的代码会模仿这种编写风格(也许是拷贝/粘贴而来),修改这些东西将会变成你的噩梦。让我们把上面错误的做法纠正:

  • “啊,别人写的代码,我最好别动它”——什么?你的项目团队的一员,你有“权力”去修改它。如果有人把代码写的很糟糕,他可能并没有意识到自己的代码很烂——所以,他们不会改正它。不要认为改正这些代码会冒犯他们。他们也许会没面子,但不是因为你。
  • “我没有时间去修改它——我有自己的事要做”——这就是你的事。你可以在你的缺陷跟踪里添加上一条任务,写上“重构X”,写上花费的时间。你也可以把它推迟到下一个sprint(如果是敏捷开发)。管理层坚持认为开发新东西比修改旧程序重要吗?告诉他们去读读《重构》这本书或Spolsky的文章..或本文。(也许不管用,但不妨试一试)
  • “如果我修改它,肯定会改出问题”——也许。但是,等一下,你们有单元测试用例,不是吗?还有集成测试,确认测试。如果没有——先把这些补齐了。这样你就不用担心把程序改坏了。

代码审查是避免这样的代码很重要的方法。如果提交的代码都经过了代码审查,未被察觉的有问题的代码会大幅度的减少。仍然会有,但会少的多。

对于这样的做法唯一的问题是——如何确定一段代码是有问题、需要改进的?这就需要经验了,需要你熟悉好的开发方法和模式。对这个问题我不能给出一个秘诀。但你需要在团队里有一群能明辨是非的程序员。如果没有——读一读《代码大全(Code Complete)》(以及《Effective Java》,如果你们使用的语言是Java。)

所以——请马上修改。这会省下你的时间,免去你的头疼,让你对这个项目更有自豪感,而不是“这烂项目是一些菜鸟写的,我只是做了一些辅助的工作。”你不能这样说——如果项目很烂,你难辞其咎。

[英文原文:Fix That Code Immediately! ]
分享这篇文章:

11 Responses to 请修改这段程序,立刻!

  1. Arch says:

    “如果项目很烂,你难辞其咎。”

    的确是这样。

  2. myrual says:

    我很赞同。但是在目前所在的地方不会这么做。理由很简单。
    1 这个地方不是软件公司,软件的质量和最终的销量没有直接和间接的关系。
    2 木有缺陷管理系统,木有单元测试。有一个速度非常慢的版本管理系统导致我们只把代码打成zip包上传。
    3 很多管理层认为理由2不是问题,但是认定自己是 软件公司。

  3. wales says:

    “啊,别人写的代码,我最好别动它”——什么?你的项目团队的一员,你有“权力”去修改它。如果有人把代码写的很糟糕,他可能并没有意识到自己的代码很烂——所以,他们不会改正它。不要认为改正这些代码会冒犯他们。他们也许会没面子,但不是因为你。

    我就像問一下,我們項目中有5個人。其他四個寫的代碼就沒有結構,我是不是應該改他們的代碼?改錯了誰負責?我自己的工作誰做?其他四個人會怎麼想?

    • 拓星 says:

      我们是用svn来进行版本控制的,所以一般也不会随便改别人代码,因为有时候会出现未知的麻烦,一般会告知那个人。

  4. wales says:

    “如果我修改它,肯定会改出问题”——也许。但是,等一下,你们有单元测试用例,不是吗?还有集成测试,确认测试。如果没有——先把这些补齐了。这样你就不用担心把程序改坏了。

    好吧,要做這個要做那個。。。是不是項目組中所有的事情都是我自己的。那要項目組做什麽?我自己一個人所有的事情都搞定就OK了。還給公司省了雇傭其他人的錢。!!!!

  5. carry says:

    做事的态度值得学习,如果在这样的可行的团队中,是件幸福的事

  6. 忧郁 says:

    不要随便改别人的代码,这是原则性问题。如果你觉得这段代码会出问题,你就跟编写代码的程序员说,至于这段代码可以优化,这段代码没有结构,这都是别人的问题,不是你的问题。只要这段代码没有错误,你就不可以修改它。

  7. nscboy says:

    啊,别人写的,我最好别碰它
    最大的问题是理解别人的意图和这个修改所涉及到的所有关联的功能点.改不是问题.但该好而不是改坏才是真正的考虑.特别是当你对整个软件系统不太熟悉时.

  8. lxh_007 says:

    我最近在重构历史代码,这段代码已经有上千行了,是对一个excel表格的各列做种逻辑。而且 按现在的需求,其逻辑判断可能会到2000行。
    于是我开始痛下杀手,重构他。我先了解了这段主要做什么。
    然后把switch抽取出来
    把公用 逻辑抽取出来
    使用链式的检测做checek,把数据的读取,与处理分开执行
    现在是加上一个新的逻辑 ,只需要注册我的接口,实现自己的内部即可。
    然后目前我已经不负责这项目了。
    因为现在有更垃圾的代码在等待。。。。

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据