论设计,需求和编码三者的关系
设计本身也要有"源"才行,凭空出现的设计那不过是空想,也是不符合实际需要的.没有一个设计可以满足所有需求,因此设计本身就要根据"需求"源头来做.
第一,先有需求
这里要说何谓需求,需求笼统来说就是业务,你对业务的理解是一个不断加深的过程,这个过程不是设计出来的,而是你的见识,经验,联想,对比其它产品,寻找灵感的过程. 总的来说就是你的认识,行动上表现为 "幻想",总结,分析,对比,收集资料等.
需求不是设计, 也不是编码,需求是一切之源头(除了你赚钱的欲望),但是需求并不反对编码. 甚至应该产生一定量的编码.作为程序员,我们有两种语言,一种是母语,一种是程序语言.我们用母语来思考,也要用程序语言来思考,但是这种思考并不是为了得到实际产品,而是验证我们的构思,是一种测试.是一种工具手段.
第'二, 中间是设计.
当我们深入理解业务,并能通过程序的初步验证,已经有所眉目,这个时候就需要设计来帮助我们开展"有秩序"的工作.设计的目的是"秩序",是有条不紊,而非创造力.创造力是需求阶段,设计是工程阶段.你想你的编码有条不紊,不会乱到一团糟,可以方便的展开工作,就需要设计.就如建筑,你随便可以搭,但是搭到第'二层的时候发现一楼少了根柱子,或者.起好墙发现那里需要放一个墙柜,又要推倒从来.设计的目的是让你先一步看到整体,做好预留工作.
设计阶段,是整体架构软件的阶段,也是组织我们对业务理解的阶段,同时也是分解每一道工序的阶段,任意一道工序我们都必须具备解决的能力,砌墙有砌墙的工人,刷灰又刷灰的工人,分解成我们可以解决的工序,找出我们无力解决的工序,修改需求.
设计者往往希望设计一个超越需求的设计,希望这个设计可以满足将来需求的变化.这是错误的,至少在这个阶段来说是错误的决定.假如你想满足将来的需求,那么你就应该在需求阶段提升需求,而不是在设计阶段想需求的变化.
第三,最后是编码
有图纸,要做一栋房子是很简单的事情.如果在图纸中已经完全解决了编码所需要的各种技能都是我们具备的,所有工序都是我们曾经做过的,那么按照图纸,必然得到图纸所呈现的结果.
总结: 不要急于设计,也不要害怕编码,要延长需求分析阶段,让自己多幻想一段时间.
设计不是解决一切问题的良方,而是工程指令而已,真正有创造力的思想,是在我们需求阶段给出来的.
不要超前设计,但是可以超前需求.
整理好我们的编码片断,以提供设计材料.设计是高于编码的语言.而这个语言的素材源于编程经验.