《代码大全》这本书读了一点之后,我感觉到软件开发的前期要仔细研究需求,稳定的需求是开发优质可靠软件的基本保证,也可以有效降低开发成本。要描述出系统的多个方面,在确定需求阶段考虑的越全后期变动的可能性就越小,这要和他人多次充分的交流,我甚至觉得可以采用询问犯人的做法,对一个需求做多次的需求确认,研究对方的话有什么差异,把这些差异再次确认。当然并不能杜绝后期的变动,但至少会避免很多偏差了,大大降低了返工的风险。作者认为,开发是一个迭代的过程,要持续地反思之前的工作,对不理想的地方进行重构。现在慢慢地自己也有这种习惯,特别是写的程序比较大的时候,总会发现前面的设计与实现的不足之处,及时改正它们比收尾的时候改正风险、代价都会小很多,这也说明前期设计的重要性。抵御“尽快开始编码”的欲望,多在前面的需求和设计花些功夫是值得的,也希望提需求而不怎么懂软件开发的人员能理解这里面的道理。
作者对于软件的构建过程是倾向于自上而下的设计的。在确定软件需求后,先设计出总的功能模块划分,然后对功能模块设计需要的包和类,设计类的接口抽象,设计子函数的抽象。特别要强调,降低模块、类之间的耦合度,然它们的接口一致地表明自己的功能,这种一致地抽象十分重要,能极大地提升其可读性;强调函数内操作目标的一致性,都是要为函数名所表达的目标服务,如果有多余的要考虑把它们独立出去,步骤的实现细节要隐藏到子程序中;强调要隐藏实现细节,不能让使用者看到数据的类型、实现的结构等细节,这些细节应是作为私有的部分而隐藏起来的,这样设计下来内部的聚合性会比较强。作者认为,人同时关注的兴趣数量是有限的,这样的设计能保证不会超过这个上限,从而让开发人员能很好地关注自己要