您的代码可以是优雅的,但是还有更重要的
发布时间:2011-06-18 12:15:31 文章来源:www.iduyao.cn 采编人员:星星草
你的代码可以是优雅的,但是还有更重要的
转自:http://www.iteye.com/news/24566
引用
软件设计有两种方法:一种是尽可能地简单,这种设计明显没有什么缺陷;另一种是尽可能地复杂,这种设计没有明显的缺陷。
——C.A.R. Hoare,1980年图灵奖讲座
在开发过程中,我的口头禅是: Your code may be elegant, by mine works。我为此而常常受到质疑,也有人反驳我“你不会使用最优方法!”“你在逃避测试!” 为了避免一次又一次地重复解释,我决定阐述下我的观点,仁者见仁,智者见智。
首先,我认为“项目可能会延期,但是代码会更好或更容易维护或更简洁”这句话是有问题的。项目延期,就是未完成,不应该用代码质量会更高作为借口。如果客户要在圣诞节进行推广活动,但你在12月29号才完成项目,即使提供了史上最好的产品,也是毫无价值的。
其次,我们来谈谈“最优方法”这个问题,“最优”是否意味着要写出更易于维护的代码需要更长的时间呢?其实除了大家都知道的《101个最优方法》以外,“最优”的标准是各种各样的。无论你对其进行怎样的定义,“最优方法”对所有程序员来说,应该是一种自然的编程标准。举个最简单的例子,经验丰富的程序员会自然地将变量命名为:$a、$b、 $c等,也能正确地缩进代码行。说得再深入一点,有经验的开发者知道在什么时候、如何提高效率以使得项目能如期完成。虽然 “最优方法”的标准有很多,但这些标准不会令你因此而延长项目时间。这引出我将谈到的下一点——Over-engineering(过度设计,指设计出来的系统比恰到好处要复杂臃肿的多,过度的封装、一堆继承、接口和无用的方法,以及超复杂的xml配置文件)。
像任何经验丰富的程序员一样,我了解那种想为每个项目搭建最好、最灵活、最耐用的系统的心态。但我也了解每个项目都有的商业限制:时间和资金。大多数项目都有明确的截止日期和项目预算,开发者要有意识地去控制项目规模以按时达到目标。你没有任何理由花一周时间,来为一个20行的table表上的数据库查询设置“恰当的”缓存层。多了解实用案例,如果只是为了实现一个页面访客计数器的功能而构建支持多种同时响应请求的XHR框架,是不现实的。要有眼界,这是我最强调的一点,最好的程序员不是精通如何构建最棒的系统的人,而是了解系统不需要的是哪些功能的人。
另外,在软件开发领域,上市时间是商业驱动力,在web应用开发领域,由于其动态性,这点更为明显。当时间成为关键,“最优方法”就是最简单的解决方案。
最后,我们来讨论一下技术债务(指为了匆忙实现一个功能,破坏了现有的程序库,在实现的过程中污染了代码库的设计)。如果在开发过程中,你在某个地方偷工减料了,那么就会产生无法解决的长期存在的技术债务,而且在之后的开发中,任何一个决定,都会受该债务的影响。事实上,在接手商业项目时,明白何时、如何对代码进行简化的能力是很关键的,这也是区分老手和菜鸟的标准。解决技术债务的办法有很多,但应尽量做到不产生技术债务。同样地,过度设计也不可避免地会产生技术债务。
通常人们在谈到技术债务的危险时,并没有包含商业影响。但其实技术债务与实际投资回报率是相对的,因为在许多情况下,早日上市更具成本效益。也有种情况是技术债务与收益同时存在,那么你可以慢慢偿还债务,但这会延长你的项目时间,很可能当你解决完技术债务时,你也失去了市场机会。
作为软件开发者,我们常常认为自己的工作就是开发软件,但其实这只是一种手段,我们的目的是令开发商达到他们的商业目标,你的代码也许很优雅很简洁,但如果不能达到目的,就丝毫没有意义。
英文原文:Your Code May Be Elegant
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
SigMOD2012感兴趣的论文(时空数据处理)——记下慢慢看
图中联合做距离数据处理:
Efficient Processing of Distance Queries in Larg...
-
怎样控制你的情绪在项目中,释放压力
在项目中由于甲方,乙方的关系,涉及到彼此的利益,所以争吵是在所难免的;客户要求你把功能,字段...
-
ISTQB AL-TM连载系列14:处理缺陷的严重程度与优先级
正确处理和区分缺陷的严重程度和优先级是所有的软件开发和测试相关人员的重要...
-
ISTQB AL-TM连载系列11:基于会话的探索性测试管理
探索性测试是一个特殊的测试过程,它的测试活动和测试内容是动态变化的,更多的是通...
-
【在线研讨】《用户故事分类与组织结构(一期)》2012-06-26(周二)
主题:《用户故事分类与组织结构——火星人的需求管理理念(一期)》日期:2...
-
探索流程的奥秘之三, 如何梳理业务流程
软件开发的难点之一是如何了解客户的需求,现实工作中,开发者们就像瞎子摸象一样从用...
-
ISTQB AL-TM连载系列13:搭建有效的缺陷管理过程
缺陷是测试过程中的重要输出和工作产品。缺陷的生命周期是一系列的活动和状态所组...
-
项目经理思考什么是团队
在软件项目实施过程中大家谈的最多的可能是“需求”这个词,之后谈的较多的是“团队”相关的话题。求职者...
-
通过robbin的管理问题谈自己遇到的管理问题
首先澄清每个公司,每个管理团队都有着不同的背景和状况。很多事情都不能一概而论,就和...
-
loadrunner、QTP、TestDirector学习笔记
在Windows XP下安装了loadrunner 8.1、QTP 9.2、TestDirector 8.0
运行菜单Samples Set...