| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 325 人关注过本帖
标题:【分享】敏捷开发之道之——欲速则不达
只看楼主 加入收藏
zghnxzdcx
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:550
专家分:1176
注 册:2010-4-6
收藏
 问题点数:0 回复次数:0 
【分享】敏捷开发之道之——欲速则不达

魔鬼告诉你:“你不需要真正地理解那块儿代码,只要它能够工作就可以了。只要在结果中再加上几行代码,它就可以工作了。干吧!就把那几行代码加进去,它应该可以工作。”

我们经常会遇到这种情况,出现了一个bug,并且时间紧迫。快速修复确实可以解决它——只要新加一行代码或者忽略那个列表上的最后一个条目,它就可以工作了。但接下来的做法才能说明,谁是优秀的程序员,谁是拙略的代码工人。

拙略的代码工人会这样不假思索地改完代码,然后快速转向下一个问题。

优秀的程序员会挖掘更深一层,尽力去理解为什么这里必须要加1,更重要的是,他会想明白会产生什么其他影响。

这个例子听起来有点做作,甚至你会觉得很无聊。但是,真实世界中有大量这样的事情发生。Andy以前的一个客户正遇到过这样的问题。没有一个开发者或者架构师知道他们业务领域的底层数据模型。而且,通过几年的积累,代码里有着成千上万的+1和-1的修正。在这样的脏乱的代码中添加新的功能或者修复bug,就难逃脱发的噩运(事实上,很多开发者因此而秃顶)。

千里之堤,溃于蚁穴,大灾难是逐步演化来的。一次又一次的快速修复,每一次都不探究问题的根源,久而久之就形成了一个危险的沼泽池,最终会吞噬整个项目的生命。

防微杜渐。 Beware of land mines.

在工作压力之下,不去深入了解真正的问题以及可能的后果,就快速修改代码,这样只是解决表面问题,最终会引发大的问题。快速修复的诱惑,很容易令人把持不住,堕入其中。短期看,它似乎是有效的。但从长远来看,它无异于穿越一片流沙,你也许侥幸走过了一半的路程(甚至更远),一切似乎都很正常。但是转眼间悲剧就发生了……

只要我们继续进行快速修复,代码的清晰度就不断降低。一旦问题积累到一定程度,清晰的代码就不复存在,只剩一片浑浊。很可能在你的公司里有人这样告诉你:“无论如何,千万不能碰那个模块的代码。写代码那哥们儿已经不在这儿了,没有人看得懂他的代码。”这些代码根本没有清晰度可言,它已经成为一团迷雾,无人能懂。

如果在你的团队中有这样的事情发生,那么你是不可能敏捷的。但是敏捷方法中的一些技术可以阻止这样的事情发生。

孤立非常危险,不要让开发人员完全孤立的编写代码。如果团队成员花些时间阅读其他同事写的代码,他们就能确保代码是可读和可理解的,并且不会随意加入这些“+1或-1”的代码。阅读代码的频率越高越好。实行代码复审,不仅有助于代码更好的理解,而且是发现bug的最有效的方法之一。

另一种防止代码难读的重要技术就是单元测试。单元测试帮助你很自然的把代码分层,分成很多可管理的小块儿,这样就会得到设计更好、更清晰的代码。更深入项目的时候,你可以直接阅读单元测试——它们是一种可执行的文档。有了单元测试,你会看到更小、更易于理解的代码模块,运行和使用代码,能够帮助你彻底理解这些代码。

不要堕入快速的简单修复之中。要投入时间和精力保持代码的整洁、敞亮。

在项目中,代码应该是很亮堂的,不应该有黑暗死角。你也许不知道每块代码的每个细节,或者每个算法的步骤,但是你对整体的相关知识有很好的了解。没有任何一块儿代码被警戒线隔离开。

平衡的艺术

    你必须要理解一块代码是如何工作的,但是不一定需要成为一位专家。只要你能够使用它进行有效的工作就足够了,不需要把它当作毕生事业。
    如果有一位团队成员宣布,有一块代码其他人很难看懂,这就意味着任何人(包括原作者)都很难维护它。请让它变得简单些。
    不要急于修复一段没能真正理解的代码。这种+1/-1的病症始于无形,但是很快会让代码一团糟。要解决真正的问题,不要治标不治本。
    所有的大型系统都非常复杂,因此没有一个人能完全明白所有的代码。除了深入了解你正在开发的那部分代码之外,你还需要从更高的层面来了解大部分代码的功能,这样就可以理解系统各个功能块之间是如何交互的。
搜索更多相关主题的帖子: 欲速则不达 开发 分享 
2010-10-28 16:11
快速回复:【分享】敏捷开发之道之——欲速则不达
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037200 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved