《代码大全》解读(一)
其实很早就知道这本书,但是我一直望文生义的以为他是一本讲如何具体来实现某些功能的书,所以也就没太在意。直到最近CSDN上头版有几篇代码大全第二版的文章,而且最近我也在关注和思考软件工程这方面的东东,因此也就想起要看一看了。在网上转了一圈,只找到第一版的中译电子版,PDF格式的,虽然不如纸质的看起那么爽,但是好的思想不会因为是笔写成的或是激光照排的而有所区别,也就将就了。
前言中提到本书适合于三种人—经验丰富的程序员、自学成才的程序员、学生。我恰好是第二种,而且书中提到很多的“隐喻”却是我本身的专业—工民建,所以感觉很亲切。
第一章《欢迎进入软件创建世界》
它提出软件创建的概念(System Construction)。在现在大型的软件项目中需要经过以下的流程(与译文有点区别,但我觉得更加合理)
问题定义 System Specification
需求分析 Requirements Analysis
总体设计 Architectural Design
详细设计 Detailed Design
创建实现 Coding And Debugging
单元测试 Unit Testing
系统测试 System Testing
维护 Maintenance
创建活动包括:详细设计、编码、调试、单元测试。它占软件系统构建的绝大部分。
这一章我觉得没有太多新的东西,它就是说要重视创建活动的内容,它最终决定软件的具体实现,也决定软件的成败。
第二章《利用隐喻对编程进行更深刻的理解》
首先作者用了一大堆的故事和历史无非说明了几件事。
1、人类在生产生活活动中喜欢用隐喻(我觉得用模型更合理)来理解事物。
2、当旧模型被新模型替代时,使用旧模型的人总是很难理解新模型。
3、有效的旧模型在适当范围内还是有效的。
接着作者列出了现代软件开发常用的几种模型:
1、写模型(Write code)
不需要过多的设计,适合用开发一个功能性的函数或小型的软件。
2、播种模型(Growing a System)
很有意思,作者用的是growing。这种模型是每次完成一小部分,然后逐渐生成一个大系统。它的缺点是就象播种一样,无法控制它的生长。不知道软件最终会变成一个什么样子
3、系统积累(System Accretion)
它是首先构建一个简单的模型,然后每天一点代码,逐渐丰富这个模型。也就是现在所说的每天一个迭代版本。这也是目前在很多的极限编程中推荐的方法
4、建造软件(Building Software)
对于大型的软件,象建筑一栋大厦一样,首先有详细的设计方案,具体到每道梁的布筋、每皮砖的摆放都需要在详细设计中说明。在编码时完全按设计进行实施,在测试时按设计要求进行测试。目前这种方式才开始运用。
5、智能功具箱
一个优秀的工匠知道用什么工具来解决什么样的问题,一个程序员也是应该有大量的工具或者是方法来解决对应的问题。而不是用一种方法来解决所有的问题。作者写了好几页,其实我们的古人早就简要地说了“物因匠名,匠因器利”(好象是这样的)。
6、综合模型
根据实际情况来使用模型,不拘泥于何种开发模型。
其实我觉得在小结中作者提出了几点很重要的意见:
1、 开发软件前一定要精心设计。
2、 每个优秀的程序员应该有好的工具,并为每件工具寻求合适的工具,这是优秀程序员必备的素质。