`
ender
  • 浏览: 42805 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

代码腐化之路

阅读更多

11年刚进入一个新部门,接手一个老项目,典型的legacy code , 一个jsp 好几千行,那叫一个乱。

但是细细瞧瞧, 还有不少代码是不错的,依稀能看到漂亮代码的影子,可以想象,当初的架构应该还是优美的,只不过经过了若干程序员之手以后,代码慢慢的腐化了。

 

07 年做的一个项目也是这样,刚开始的时候设计了一个漂亮的架构,大家都严格遵循规则写代码,很注意维护架构的完整性和一致性,也做Code Review,坚决杜绝 dirty code。 随着时间的推移,项目的进度压力加大,什么原则了,纪律了都抛弃了,实现功能是第一要务, 最后系统变成了一个难于理清的大怪物, 现在大家都盼望着它赶紧退休,推倒重写。

 

联想到我2010年做的咨询项目,客户是行业的领导者,软件和产品运行在世界各地,原以为代码质量会很不错,进入项目组一看,好家伙,代码够乱的,项目组成员在实现新特性的时候,好多copy&paste , 然后就忙着fix bug 。

我深入的看了它的代码结构, 隐隐约约的看到最初的一些好的原则,模式隐藏在代码的背后,对照现在的代码,让人无限感慨。

 

代码腐化之路

 

新项目来了,大家很happy,有机会从头开始构建一个东西,是很难得地,于是仔细小心的设计架构,定下规矩和原则,约定大家都要遵守,刚开始时运转正常,平安无事。

 

渐渐的出现了一些新情况,需求变动,时间很紧张, 程序员发现有一个非常直接的办法,可以快速的实现客户的要求, 几天就可以搞定, 但是违背了架构的原则或最初的项目的编码约定, 如果想遵循的话,可能需要花费好几倍的工作量,可能需要几周才能完成,更要命的是,为了实现这个新需求,可能需要对整个架构进行调整, 真的调整了,测试跟不上,风险太大, 怎么办?

大多数情况下,程序员都经不起诱惑,也扛不住进度的压力, 会用最直接的办法进行快速修改,“管他呢,先实现再说,反正我还记得细节”  ,实际上,改完以后我们又忙着干别的事情去了,过上几个月,自己都看不懂了。久而久之,这些脏代码没有人知道是怎么回事了, 后面接手的程序员就会骂前面的程序员 “这么烂的代码,谁写的!!!???” 

 

代码就是这么腐化的......

 

 

 

 

31
2
分享到:
评论
26 楼 rabbit2011 2011-04-16  
重构须贯穿于始终。
25 楼 fanfq 2011-04-15  
DOCDOC 写道
tianmo2008 写道
很多程序员都是散弹式的,修改bug时见逢插针,那里出了问题就在附近加点处理逻辑。
很多有经验的程序员也会经常了为快速处理bug,采取这种方式,久而久之,本来条理很清晰的程序,变得越来越臃肿,同样的处理逻辑散落得到处都是。。。。。
越是后面接手的人越是痛苦,
很多接手的人都想过重写,想上面提出,回复是“虽然有问题,但整体运行得还好,重写风险太大,不给干。”。
想私下重写,但开发任务又压得紧,出了bug又象催命鬼似的催个不停,只能继续霰弹式蔓延。
等到那一天处理不了了。。。。

对于一些数据准确性比较敏感的应用,一般是没有任何理由去重写的.
一个系统能常年运行并频繁使用着,说明这个系统本身是具有业务价值的. 在这种大前提下,如何规避风险,保证业务价值是要优先去考虑的.重写的风险太大了.
至于修Bug, 换个角度:病人治病,治疗方案当然是针对病灶. 当然,保健医生(好比:顾问)会提供很多的预防建议,但是主治医生(好比:技术维护人员)的义务,只是治好病



一直在安慰自己,只要跑的不出问题的代码就是好代码。修改bug时见逢插针也未尝不可。

如果时间够的话,那就再重构的,要是没时间,那就改bug。
24 楼 href 2011-04-15  
俺们的项目我看见过,一个方法长达250多行。
23 楼 C.T 2011-04-15  
我们现在这样骂人,然后到时又被人这样骂啊!
22 楼 Jacky-Q 2011-04-13  
简直是项目必经之路了,我的项目也是这样。
关键像上面的朋友们讲的,重构代码没有激励,快速交差更能拿奖金。三五年后的代码会怎样,who care?按IT业的跳槽频率,这是后来者的麻烦了。
21 楼 MaxWu 2011-04-12  
一开始就考虑到两种情况:
1) Branch + Refactory
2) High pressure and low skilled ppl
20 楼 pch272215690 2011-04-11  
我们的系统就是这种现状,烂到改不动了就辞职。
19 楼 ffychina 2011-04-10  
经历过,有感受,也为此辞职。我现在是不允许我的开发团队有垃圾代码,我会用一些开发管理方法去降低垃圾代码,提交代码的可维护性,当然,这需要整个团队所有成员的配合和共识。
18 楼 sniffer123 2011-04-09  
重构不能卖钱,不能作为资历,不能作为年终奖的凭据,谁乐意重构?
辛辛苦苦写的漂亮的代码,结果别人稀里糊涂复制黏贴后反而被夸奖手脚利索,呵呵
17 楼 alyouge 2011-04-09  
我们的代码就是这个样子的 !
16 楼 xiaojin21cen 2011-04-09  
深有同感,也深受其害。现在的项目的代码“怎一个烂字了得”
15 楼 DOCDOC 2011-04-07  
tianmo2008 写道
很多程序员都是散弹式的,修改bug时见逢插针,那里出了问题就在附近加点处理逻辑。
很多有经验的程序员也会经常了为快速处理bug,采取这种方式,久而久之,本来条理很清晰的程序,变得越来越臃肿,同样的处理逻辑散落得到处都是。。。。。
越是后面接手的人越是痛苦,
很多接手的人都想过重写,想上面提出,回复是“虽然有问题,但整体运行得还好,重写风险太大,不给干。”。
想私下重写,但开发任务又压得紧,出了bug又象催命鬼似的催个不停,只能继续霰弹式蔓延。
等到那一天处理不了了。。。。

对于一些数据准确性比较敏感的应用,一般是没有任何理由去重写的.
一个系统能常年运行并频繁使用着,说明这个系统本身是具有业务价值的. 在这种大前提下,如何规避风险,保证业务价值是要优先去考虑的.重写的风险太大了.
至于修Bug, 换个角度:病人治病,治疗方案当然是针对病灶. 当然,保健医生(好比:顾问)会提供很多的预防建议,但是主治医生(好比:技术维护人员)的义务,只是治好病
14 楼 huangfoxAgain 2011-04-07  
是的,前期都设计的好好的,干干净净,后来需求变动,时间压得紧,就顾不上那些了~ 先实现功能,给眼前的领导个交待再说~后来就陷入了代码沼泽中,希望快点解脱,于是就有了很多其他理由的离职~
13 楼 DOCDOC 2011-04-07  
ender 写道
3 楼说的很对,不断的重构时解决腐化问题的出路,可惜啊, 我所经历的项目中还没有一个能够做到持续的重构, 保持清洁的代码。

我自己也有些怀疑了,到底有没有项目是能够保持Clean Code ?

传说有,但是极少极少.
很多外表光鲜,号称世界级的XXOO系统,代码也是一团乱麻. 刚工作时,曾改过一个号称有20年的C代码, 那才叫惨不忍睹
12 楼 tianmo2008 2011-04-06  
很多程序员都是散弹式的,修改bug时见逢插针,那里出了问题就在附近加点处理逻辑。
很多有经验的程序员也会经常了为快速处理bug,采取这种方式,久而久之,本来条理很清晰的程序,变得越来越臃肿,同样的处理逻辑散落得到处都是。。。。。
越是后面接手的人越是痛苦,
很多接手的人都想过重写,想上面提出,回复是“虽然有问题,但整体运行得还好,重写风险太大,不给干。”。
想私下重写,但开发任务又压得紧,出了bug又象催命鬼似的催个不停,只能继续霰弹式蔓延。
等到那一天处理不了了。。。。
11 楼 ender 2011-04-06  
snake1987 写道
深有同感,也深受其害,很期待楼主的文章能引出一套解决方案出来

不好意思, 我也没有Solution,这里只能发发牢骚,然后告诉自己,看到烂代码,就不要再骂了,因为自己也可能是烂代码的来源。 当然自己尽量写Clean Code, 防止被别人骂 
10 楼 Sunny_kaka 2011-04-06  
我现在还在努力保持代码干净.
虽然背负着很大的进度压力.
只是因为我们都见过慢慢腐烂的系统,不想让悲剧重演.
9 楼 waiting 2011-04-06  
都是被逼的~
8 楼 jssay 2011-04-06  
后面接手的程序员就会骂前面的程序员 “这么烂的代码,谁写的!!!???” 
这句比较经典!
7 楼 snake1987 2011-04-06  
深有同感,也深受其害,很期待楼主的文章能引出一套解决方案出来

相关推荐

    微服务架构治理 - 架构腐化之谜-Thoughtworks

    微服务架构治理 - 架构腐化之谜-Thoughtworks 微服务架构治理是指在微服务架构中,通过合理的设计、实施和管理来确保架构的健康度和可维护性。本文将讨论微服务架构治理的重要性、架构腐化的原因、保持架构健康度的...

    重构改善现有代码的设计

    1. **重构的意义**:重构的主要目的是使代码更容易理解和修改,避免软件腐化,提高代码的可测试性,并降低未来添加新功能或修复错误的成本。 2. **重构的基本原则**:保持重构过程小而频繁,每次只做微小的改动,...

    修改代码的艺术(2)共 5

    开发人员常常面对的现实是,即便是最训练有素的开发团队也会写出混乱的代码,而且系统的腐化程度也会日积月累。本书是一部里程碑式的著作,针对大型的、无测试的遗留代码基,提供了从头到尾的方案,让你能够更有效地...

    修改代码的艺术(3)共 5

    开发人员常常面对的现实是,即便是最训练有素的开发团队也会写出混乱的代码,而且系统的腐化程度也会日积月累。本书是一部里程碑式的著作,针对大型的、无测试的遗留代码基,提供了从头到尾的方案,让你能够更有效地...

    代码重构思想

    通过持续重构,我们可以保持代码的活力,防止代码腐化,从而支持软件的长期健康演进。同时,良好的重构实践也需要配合版本控制系统,以便在出现问题时能够快速回滚。 总结起来,代码重构是一种主动优化代码的策略,...

    ThoughtWorks_持续集成之腐化与涅槃重生.rar

    《ThoughtWorks_持续集成之腐化与涅槃重生》是一个深度探讨IT行业实践案例的资料,特别是关注运维领域的持续集成过程。在这个文档中,作者详细分析了持续集成从理想到现实过程中可能出现的问题,以及如何通过改进...

    <<重构>>的进阶版,修改代码的艺术

    2. **重构的重要性**:重构能够帮助我们避免代码腐化,保持代码的清晰和整洁,提高软件的可测试性,从而降低维护成本,增强团队的生产力。 3. **重构的原则**:始终保持代码可运行,每次重构的步骤都应小到可以立即...

    Q5.7OpenCV249图像腐化

    【描述】提到的"It1995"是在CSDN(中国软件开发网络)上的一篇博客,可能提供了关于如何在Qt环境下使用OpenCV进行图像腐化的详细步骤和示例代码。Qt是一个跨平台的应用程序开发框架,常用于创建图形用户界面。结合...

    修改代码的艺术(英文版)

    开发人员常常面对的现实是,即便是最训练有素的开发团队也会写出混乱的代码,而且系统的腐化程度也会日积月累。本书是一部里程碑式的著作,针对大型的、无测试的遗留代码基,提供了从头到尾的方案,让你能够更有效地...

    重构,改善既有代码的设计

    在项目开发过程中,适时地进行重构可以避免代码腐化,使得软件能够适应未来的需求变化。因此,重构成为了持续集成、持续交付等现代软件开发方法中的核心实践之一。 《重构:改善既有代码的设计》这本书还强调了测试...

    重构_改善既有代码的设计(中文版)

    1. **代码重构的重要性**:重构可以避免代码腐化,保持代码的整洁,提高软件的灵活性和可扩展性。当项目随着时间推移变得庞大复杂时,良好的代码结构显得尤为重要,能够降低维护成本,减少错误。 2. **重构的步骤**...

    编写高质量代码之Java.epub

    怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍。也请有过代码质量相关经验的朋友提出宝贵的意见。

    重构:改善既有代码的设计(英文版) pdf 文字版

    它旨在提高代码的可读性、可维护性和可扩展性,同时减少软件腐化。随着面向对象技术,尤其是Java编程语言的广泛应用,由经验不足的开发者编写的低质量代码数量显著增加,这导致应用程序变得效率低下且难以维护和扩展...

    修改代码的艺术(1)共 5

    开发人员常常面对的现实是,即便是最训练有素的开发团队也会写出混乱的代码,而且系统的腐化程度也会日积月累。本书是一部里程碑式的著作,针对大型的、无测试的遗留代码基,提供了从头到尾的方案,让你能够更有效地...

    修改代码的艺术(5)共 5

    开发人员常常面对的现实是,即便是最训练有素的开发团队也会写出混乱的代码,而且系统的腐化程度也会日积月累。本书是一部里程碑式的著作,针对大型的、无测试的遗留代码基,提供了从头到尾的方案,让你能够更有效地...

    修改代码的艺术(4)共 5

    开发人员常常面对的现实是,即便是最训练有素的开发团队也会写出混乱的代码,而且系统的腐化程度也会日积月累。本书是一部里程碑式的著作,针对大型的、无测试的遗留代码基,提供了从头到尾的方案,让你能够更有效地...

    重构-改善既有代码设计

    通过持续不断地重构,可以避免代码腐化,提高团队的生产力,降低项目的维护成本。因此,《重构-改善既有代码设计》这本书不仅是Java开发者,也是所有程序员都应该深入学习的经典之作。 总结来说,"重构"这一概念是...

    Refactoring Improving the Design of Existing Code.pdf 代码重构

    本书首先介绍了重构的基本概念,解释了为何在软件开发中需要进行重构,以及重构如何帮助避免代码腐化,保持代码库的健康。作者强调,重构不仅仅是个人技能的体现,更是团队协作的重要组成部分,能够促进代码的共享和...

    重构-改善即有代码的设计

    持续、适时的重构能够保持代码库的健康,防止代码腐化。 总结来说,《重构-改善既有代码的设计》是一本指导开发者如何通过系统化的方法改进代码结构的权威指南,对于任何希望提升软件质量和开发效率的人来说,都是...

Global site tag (gtag.js) - Google Analytics