这个星期开始看code complete,这在豆瓣上评分上了9分并且被称为程序员必读10本书之一。
这个星期看到第6章,进度可以说是很慢。就看了前面小部分而言,这本书给我的感觉很像clean code,refactor这样。
它不是教你一个具体的技巧而是介绍一种编程风格和习惯,有了好的习惯自然可以少走弯路,也就是人们说的最佳实践。
我发觉这类软件书籍的写作风格也像是编程一般,先介绍框架,再步步展开,层次分明。
下面就是回忆一下看过的几章内容主旨吧。
Chapter 1 Welcome to Software Construction
主要提出软件编程就如建造房屋一样也是一种工程项目。因此编程就有工程项目的一些固有特性和流程。
需求分析
问题定义
工程进度计划
架构设计
细节设计
单元测试
项目测试
整合测试
系统测试
项目维护
把编程作为项目来处理是非常合适的,因为要实现一个具有一定功能的软件,其复杂程序是很高的
只有按照项目工程来严格得操作才能实现高可用性,减少bug产生的可能,提高可维护性。
Chapter 2 Metaphors for a Richer Understanding of Software Development
接上一章节,提出编程时候类比思想的重要性。值得一提的是,这本书的case study很多都是c++,java编写。而OO编程本来就以类比的思想建模的
因此类比思想确实值得深入思考。
编程面对是是电脑,用的是编程语言。与现实中的项目工程不同的是,程序似乎不是一种实体的存在。
也就是要实现软件功能是一种无中生有的过程,而现代计算机在理解人类需求方面能力还极其匮乏,也只有靠程序员来衔接需求和实现的中间过程。
这一过程也就是要求程序员把具体的问题抽象成可供计算机处理的模型和流程。
具体展开来说,就拿OO语言来说,把class比作工厂,通过其构造器可以生产出Object,特定的Object具有自身的方法和属性。这一过程就是实现了一种抽象。
这种类比的方法有一定的局限性,虽然它应用范围广,但只是解决问题的一种方法技巧,而不是一种具体的实现。当然如果抽象类比的足够好的话,程序员就可以很容易理解不同Object之间的关系,也就是说大大方便了程序的实现。
Chapter 3 Measure Twice, Cut One: Upstream Prerequisites
展开项目设计的重要性。书中引用了不少统计数据表明,项目在有设计的情况下可以大大缩短项目时间以及减少成本。
这一点其实不难理解。很多人在拿到问题时候急于开始写代码,而忽略了实现过程中可能遇到的坑,这样非常可能在实现过程中走弯路,甚至是做了很多没用或者不相关的工作。就项目而言,前置的问题分析其实就是列提纲的过程,需要解决什么问题,要解决这些问题的基本流程,每个流程所需的资源(类库支持),以及可能遇到的坑等等。
有了这个提纲之后,宏观上面就形成了一定的架构。在细节问题上也有一定的提前思考,虽然我们不可能在计划时候考虑得面面俱到,这是显然是不现实的,但是在分析可能遇到的坑时,就是把一个大的问题给细化了,方便实现时候可以分而治之。
Chapter 4 Key Construction Decisions
这章简略介绍了几个目前流行编程语言的特性,也就是在针对具体问题时,选取不同的工具可以达到事半功倍的效果。
Chapter 5 Design in Construction
介绍了隐藏思想,也就是最小化类属性可访问范围。比如把类属性设置成private 通过get和set方法来提供外部访问。
这其实是一种封装的思想,也就是只提供方法,但是具体实现由类自己控制,这样可以在实现变化时达到最小化改动的目的。
同时可以保证类内部数据是可控的。
Chapter 6 Working Classes
主要介绍了面向接口编程的思想,在类的范围封装思想的又一体现。
继承与包含的区别用法。继承是"is"关系,包含是“has”关系。如果只是想用一个类的方法,应该使用包含。
继承的一大作用是实现多态,也就是实现类的层次关系。