论坛首页 综合技术论坛

设计与开发的五条原则–六年真谛

浏览 16325 次
精华帖 (0) :: 良好帖 (9) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-21   最后修改:2009-12-21
引用
high_java 写道
引用
KISS,当你不知道你后面的的需求变化有多大的时候,还是保证你的设计具有灵活性才好,而不是Keep it Simple,Stupid


貌似KISS 和灵活性并不矛盾吧。事实上我认为不必要的复杂度和过度设计是灵活性和可扩展性的大敌。


如果需求不明确,应该采用原型模型,需求变化太大,应该采用演化模型。
0 请登录后投票
   发表时间:2009-12-22  
引用

楼主的感悟非常有道理。但在有些时候是不符合国情的,就像corejava5 所说的,需求变更非常大的情况在某些行业里还是有的。


恕我愚钝,能不能请您说说楼主的哪条感悟在什么时候不符合了您的什么国情?

在软件开发中,需求变更大在任何地方都是非常常见的。
0 请登录后投票
   发表时间:2009-12-22  
引用

但是有疑问。就是第三条规则,KISS。 Keep It Simple Stupid。

模式、重构、分层真的是“无知下的自虐”吗?


当然不是。模式、重构、分层都是可以让你的程序变得更简单。当然,模式、分层会增加程序的indirection. 但它最终应该让你的程序结构更清晰,模块和模块之间的关系更简单。如果你的模式,分层没有给你带来这些好处,你就应该考虑一下是否有必要用这些模式和分层了。
0 请登录后投票
   发表时间:2009-12-22   最后修改:2009-12-22
再增加一条吧,写完这篇文章后觉得必须加进去的一条:

第五条: 一定需要且只需要数页简单明了的设计说明书。

这个设计说明最好不用word,最好是放在源代码下的html或者txt格式。简单粗线条的UML最适宜用在这种地方。判断一个开发人员的设计素质如何,打开源代码,看看有没有这个文档以及这个文档的水平,就知道了。
0 请登录后投票
   发表时间:2009-12-22  
引用

第一条原则,首先弄清你的问题是什么。这一条规则无论怎么强调都不过分。在《Programming Pearls》第二版的开篇,Jon Bentley 讲的就是,首先弄清你的问题是什么! 在你没有详细、明确地定义好你的问题之前,你所做的大部分工作只产出废物。这些年,曾经的最头疼的事,就是经常搞了一大堆东西,累死累活,甚至加班加点,最后总才发现很多事情偏离了目标。但这样的事情,总是在周围一遍一遍地发生。

  一个工程师,如果在接到一个问题时首先不是尽可能挖到细致的资料,定义问题,并向了解问题的人去反馈,详细讨论问题的定义。虽然问题定义不是那么容易,但不首先定义好问题,那就是不合格的工程师。

  还有很多原则,大抵都是这个原则的派生品。
不是所有问题在一开始就能完全清楚的,XP推崇的是隐喻,说白了也就是知道问题的主要关键以及方向,而不是一开始去弄清它。等你完全弄清楚后,新问题又来了。所以此条作为原则不适合, 对待问题的关键是知道如何解构问题。
引用

第二条规则,弄清你要干什么,以及哪些先干,哪些后干,哪些根本就不需要干。说白了,就是把问题分解,列个表,排个先后顺序。这是大部分程序员最蹩脚的部分。高效的本质不是捧着ThoughtWorks那本《卓有成效的程序员》,而是我这条原则。我对Joel的书里印象最深刻的就是有关用Excel列任务列表的部分。
  这条仍然是如此重要,以致于著名的YAGNI, (You ain’t gonna need it )仅仅是一条推论而已。

   当然,区分的标准是什么?It depends. 但是最重要的参照是,怎么做你能获得最大产出?也许你会在所谓的扩展性、适应需求变化与可工作的代码,用户的需求之间抉择。 最重要的还是可工作的代码,能够按时 ship the beta!

  记住,先列出来要干什么;然后分清先后顺序,然后淘汰那些可以不干的。
对于软件设计,尤其是复杂的软件设计,不是很容易详细区分哪些先干,哪些后干的。当然了,清楚事情的优先级是必要的,不过,这个应该是二维关系,而不是简单的前后续关系。
引用

第三条规则,KISS。 Keep It Simple Stupid。用郭靖和杨过来比喻,代码要像郭靖一样用最简单直接的方式强壮地工作,不需要太多的波折。你的程序要是像杨过的人生那么复杂、聪明,早死翘翘了。你的程序要简单强壮地干活,思想越简单越好,功能和特性越少越好。
   这一条对于设计是至关重要的,浮躁的程序员们经常要在架构设计中引入模式、分层,又或者是绚丽的Ajax效果之类,完全是无知下的自虐。我也是好些年后才明白这条道理,直到后来开始使用Unix下的那些让无数人着迷的工具,才真真地看到了这条规则的巨大威力。
   要特别澄清一下,KISS 与你的程序是否好用,是否易于复用,不但不矛盾,而且是相辅相成的。你要知道的只是你的程序应该做什么,然后努力做好。借用《Programming Pearls》开篇里法国作家兼飞机设计师的话::“设计者确定其设计已经达到了完美的标准是不能再减少任何东西”。
还好,这是规则,要是原则就会撞死许多人了。 对于设计者确定其设计已经达到了完美的标准是不能再减少任何东西“这句话最经典的反驳就是最烂的设计也是什么不能减去,你要一个苹果,它给你一大篮水果。其实真正优秀的设计是可以简单并且容易的增加东西(也就是扩展)。设计模式也好,其他也好,追求的就是重用性。KISS的目的是要程序不要将简单问题复杂化,而并非意思要将复杂问题简单化。如果纯粹一个KISS的概念,一个类,一个方法最好了,完成功能了,讲究什么重用啊,大不了再拷贝。
引用

第四条规则,一键集成和适当的自动化测试。这条不多说了,在有条件的情况下做会受益非浅。
其他还有一些很有名的原则,例如 DRY (Don’t Repeat Yourself), 也许是因为一开始我就懂得了这个道理(尤记得大学的时候把ASP代码提取函数,封装Head和Foot,将写HTML Table的封装成方法来根据不同的数据集打印,好傻。),感触没那么深。
这个是赞同的,因为程序员的”懒“促进了进步,促进了重用。

引用

第五条: 一定需要且只需要数页简单明了的设计说明书。
这个设计说明最好不用word,最好是放在源代码下的html或者txt格式。简单粗线条的UML最适宜用在这种地方。判断一个开发人员的设计素质如何,打开源代码,看看有没有这个文档以及这个文档的水平,就知道了。

  简单明了的设计说明书是好事,不过什么放在源代码下的html和txt最好,就有些牵强了。楼主还有本事用txt画UML?至于后续说判断一个开发人员素质如何的方式,呵呵,那apache, spring, jboss, sun等所有的开发人员都比较低劣,因为几乎没发现他们这样做。
0 请登录后投票
   发表时间:2009-12-22   最后修改:2009-12-22
引用
不是所有问题在一开始就能完全清楚的,XP推崇的是隐喻,说白了也就是知道问题的主要关键以及方向,而不是一开始去弄清它。等你完全弄清楚后,新问题又来了。所以此条作为原则不适合, 对待问题的关键是知道如何解构问题。

并不是说一开始就要完全将问题定义清楚,定义清楚以后再干活,而是说在当前条件下,要尽可能地明白问题。

引用
还好,这是规则,要是原则就会撞死许多人了。对于设计者确定其设计已经达到了完美的标准是不能再减少任何东西“这句话最经典的反驳就是最烂的设计也是什么不能减去,你要一个苹果,它给你一大篮水果。其实真正优秀的设计是可以简单并且容易的增加东西(也就是扩展)。设计模式也好,其他也好,追求的就是重用性。KISS的目的是要程序不要将简单问题复杂化,而并非意思要将复杂问题简单化。如果纯粹一个KISS的概念,一个类,一个方法最好了,完成功能了,讲究什么重用啊,大不了再拷贝。


KISS 确实首先强调的当然包括不要将简单问题复杂化。不过你后面举的这个例子就是过了,与KISS没关系。所谓的追求重用性,跟KISS并不矛盾, 遵循KISS原则,则恰恰可以帮助许多总是想着重用的人们端正态度,不要去臆测重用需求,只着眼于有确实根据的需求或衍生需求。

引用
简单明了的设计说明书是好事,不过什么放在源代码下的html和txt最好,就有些牵强了。楼主还有本事用txt画UML?至于后续说判断一个开发人员素质如何的方式,呵呵,那apache, spring, jboss, sun等所有的开发人员都比较低劣,因为几乎没发现他们这样做。


放在源代码下是是词不达意,应该说是说跟源代码放在一起,通常是一起放在版本控制系统下的。 txt 格式当然不能画 UML,不过UML文件你可以放在同一目录下的了。 在文字上细究那当然无可奈何

无论是 apache, spring, jboss, sun, 他们也是有设计文档的。当然设计的内容也许放在 Wiki 上,也许在在其他的地方。不这么做并不是说就是不好的,如果这么做了,那么应该素质是不错的。 我修改一下原话。
0 请登录后投票
   发表时间:2009-12-23  
楼主是沈阳工业大学的么?....
0 请登录后投票
   发表时间:2009-12-23  
引用
KISS 确实首先强调的当然包括不要将简单问题复杂化。不过你后面举的这个例子就是过了,与KISS没关系。所谓的追求重用性,跟KISS并不矛盾, 遵循KISS原则,则恰恰可以帮助许多总是想着重用的人们端正态度,不要去臆测重用需求,只着眼于有确实根据的需求或衍生需求。
这个非常赞同.... 不过现在啊,最大的问题就是KISS被滥用了,呵呵。
引用
放在源代码下是是词不达意,应该说是说跟源代码放在一起,通常是一起放在版本控制系统下的。 txt 格式当然不能画 UML,不过UML文件你可以放在同一目录下的了。 在文字上细究那当然无可奈何
我到也不是究你文字,只是你作为原则,让人误解了总是不好。 而对于放在版本控制下的文件,其中有个建议是最好不用二进制格式的,包括word,excel等等,因为二进制是无法进行版本识别和判断的。其实wiki比较好,在没有wiki的情况下,word其实是一个不错的选择的,因为word是可以跟踪修改记录的。所以使用html也好(其实这个并建议,html最好是自动化生成,而非人手写的文档,受格式的影响非常难以版本比较),txt也好,也只能是建议,而上升不到原则的。

   其实跟楼主说这些,只是希望大家在很多时候更多斟酌,不要轻易下决定,其实很多时候,技术也好,方法论也好,都是有适用场景的,不是么?
0 请登录后投票
   发表时间:2009-12-24   最后修改:2009-12-24
只对第四条有同感,其他几条,呵呵,就不发表什么评论了,不知道楼主做的项目涉及的领域都是什么方面。
0 请登录后投票
   发表时间:2009-12-24  
都不错。
任何原则都是有例外的,所谓仁者见仁,智者见智。
原则是没有错的,只有领会错,用错的人。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics