建立试验性原型
- 试验性原型是为了解决如何判断你设计是否存在缺陷的问题;
- 试验性原型的定义为:写出用于回答特定设计问题的、量最少且能够随时扔掉的代码的这项活动;
- 试验性原型代码只是一个指导方向,并不是真正的产品代码;
- 只有设计问题够明确够具体,才能进行试验性原型代码的进行,否则就没有任何意义;
- 为了程序员能够指导试验性原型代码是可以随时扔掉的代码,可以用非项目的语言去实现(比如项目用的是c语言,可以用python或者c++来实现,那么程序员就只能扔掉这段代码了)
合作设计
- 其实就是三个臭皮匠赛过诸葛亮的俗语,最后在自己形成思路之后,能够与其他人交流,这样既可以找出问题,也可能找到新的思路;
- 如果只是提高创造力并引入更多的备选方案的话,那么最好选择一些非正式的方式来进行交流;如果方案已经确定,那么最好选择一种正规的方式来进行核查以找到方案中的错误;
要做多少设计才够
- win10截屏快捷键是win键+shift+s;
- 如果无法预知项目的困难,那么最好先做出最详细的设计方案;
- 应该花更多的精力寻找方案比如提出更多的备选方案,而不是简简单单的提出一个方案,花更多的精力去完成这个平庸的方案;
记录你的设计成果
- 将设计文档插入到代码里:这种注释一般放在代码文件的开头,优点是对于写这部分代码的程序员是立即可取的,而且可以保持文档与代码的同时更新;
- 用wiki来记录设计讨论和决策
- 写总结邮件:每次讨论都进行纲要的总结,保证每次讨论都有收获和结果;
- 使用数码相机
- 保留设计挂图:将设计图纸放到巨大的图纸上,放在显眼的地方,便于阅览和修改;
- 使用CRC卡片;
- 在适当的细节层创建UML图;
对流行的设计方法的评论
你在应用某种设计时越教条,你所能解决的现实问题就越少;所以不要停留在你想到的第一套方案,而是寻求合作,探求简洁,在提出的原型的基础上进一步迭代;
软件设计,一般性问题
这部分只是介绍了一些数据:
- 《面向对象的思考过程(第二版)》 weisfeld matt,这是一本易于理解的介绍面向对象编程的数据,它更适合初学者;
- 《OOD启思录》Riel Arthur,这本书关注在类一层的设计,易于理解;
- 《Program on purspose: Essays on Software Design》 Plauger , P.J. 此书中包含很多有关软件设计的好点子,作者精通大量的设计方法;
- 《UNIX编程艺术》,此书从UNIX的角度很好的研究了软件设计;
设计模式
Gamma Eric 《设计模式》是实际模式领域的开山之作;
Shalloway Alan and James 《设计模式精解》对设计模式做了深入浅出的介绍;
标准
- Recommanded Practice for Software Design Descriptions;这份文档包含了用于软件设计的IEEE-ANSI标准,它说明了应该把哪些文档放入软件设计文档中;
- Recommanded Practice for Architectural Description of Software Intensive Systems 这份文档用于创建软件架构规范的IEEE-ANSI指南;
第五章小结
- 软件的首要技术使命就是管理软件复杂度,以简单性作为努力目标的设计方案对此最有帮助;
- 简单性获取的两种方式:①减少同一时间所关注的本质性复杂度的量;②避免生成不必要的偶然的复杂度;
- 设计是一个启发性的过程,不要用一种方式来束缚住自己;
- 好的设计和程序都是迭代的,你尝试的可能性越多,你的最终设计就会越好,所以要尽可能的去尝试去迭代,即使迭代或尝试有错误,那么对于你个人来说也是一种提升;
- 信息隐藏是个非常有价值的概念;