Fly with my dream » 日志 » CC2 notes[001]
CC2 notes[001]
cooky 发表于 2007-11-20 22:05:39
最近在看《代码大全》(第二版),即 "Code Complete"(2nd edition) 简称CC2。摘抄点内容作为笔记,以备以后复习用。
关于软件构建。软件构建是软件开发的核心活动,是每个项目中唯一一项必不可少的工作。软件构建的主要活动包括:详细设计、编码、调试、集成、开发者测试(包括单元测试和集成测试)。对”如何进行构建“的理解程度,决定了一名程序员的优秀程度。
关于前期准备。构建活动的准备工作的根本目标在于降低风险。软件开发过程必须由始至终关注质量。让你的老板和合作者明白在开始编程之前进行充分准备的重要性。许多项目应该是高度迭代式的,某些应该是序列式的。如果没有明确的问题定义,那么你可能会在构建期间解决错误的问题。如果需求变更发生在构建之后的阶段,其代价是在项目早期更改需求的20到100倍。要有良好的架构设计。理解项目的前期准备所采用的方法,并相应的选择构建方法。[核对表:需求] [核对表:架构] [核对表:前期准备]
关于关键的构建决策。要”深入一种语言去编程“(programming into a language),而不是仅仅”在一种语言上编程“(programming in a language)。在开始编程之前,做好一些约定,使团队的每个人更容易理解其他人的代码。[校对表:主要的构建实践]
关于软件构建中的设计。理想的设计特征包括:最小的复杂度,易于维护,松散耦合,可扩展性,可重用性,高扇入,低扇出,可移植性,精简性,层次性,采用标准技术。软件的首要技术使命就是管理复杂度,以简单性作为努力目标的设计方案对此最有帮助。简单性可能通过两种方式来获取:一是减少在同一时间所关注的本质性复杂度的量,二是避免生成不必要的偶然的复杂度。设计是一种启发式的过程,固执于一种单一的方法会损害创新能力,从而损害你的程序。信息隐藏是个非常有价值的概念,通过询问“我应该隐藏些什么?”能够解开很困难的设计问题。设计的一般层次:1.软件系统,2.分解为子系统或包,3.分解为类,4.分解成子程序。主要设计中的启发式方法:寻找现实世界的对象,形成一致的抽象,封装实现细节,在可能的情况下继承,信息隐藏,找出容易改变的区域,保持松散耦合,探寻通用的设计模式。其他启发式方法:高内聚性,构造分层结构,严格描述类契约,分配职责,为测试而设计,研究以前出现过的失误以避免失误,有意识的选择绑定时间,创建中央控制点,考虑使用蛮力,画一个图,保持设计模块化,等等。分而治之。自上而下和自下而上的特点。[核对表:软件构造中的设计]
关于软件构建。软件构建是软件开发的核心活动,是每个项目中唯一一项必不可少的工作。软件构建的主要活动包括:详细设计、编码、调试、集成、开发者测试(包括单元测试和集成测试)。对”如何进行构建“的理解程度,决定了一名程序员的优秀程度。
关于前期准备。构建活动的准备工作的根本目标在于降低风险。软件开发过程必须由始至终关注质量。让你的老板和合作者明白在开始编程之前进行充分准备的重要性。许多项目应该是高度迭代式的,某些应该是序列式的。如果没有明确的问题定义,那么你可能会在构建期间解决错误的问题。如果需求变更发生在构建之后的阶段,其代价是在项目早期更改需求的20到100倍。要有良好的架构设计。理解项目的前期准备所采用的方法,并相应的选择构建方法。[核对表:需求] [核对表:架构] [核对表:前期准备]
关于关键的构建决策。要”深入一种语言去编程“(programming into a language),而不是仅仅”在一种语言上编程“(programming in a language)。在开始编程之前,做好一些约定,使团队的每个人更容易理解其他人的代码。[校对表:主要的构建实践]
关于软件构建中的设计。理想的设计特征包括:最小的复杂度,易于维护,松散耦合,可扩展性,可重用性,高扇入,低扇出,可移植性,精简性,层次性,采用标准技术。软件的首要技术使命就是管理复杂度,以简单性作为努力目标的设计方案对此最有帮助。简单性可能通过两种方式来获取:一是减少在同一时间所关注的本质性复杂度的量,二是避免生成不必要的偶然的复杂度。设计是一种启发式的过程,固执于一种单一的方法会损害创新能力,从而损害你的程序。信息隐藏是个非常有价值的概念,通过询问“我应该隐藏些什么?”能够解开很困难的设计问题。设计的一般层次:1.软件系统,2.分解为子系统或包,3.分解为类,4.分解成子程序。主要设计中的启发式方法:寻找现实世界的对象,形成一致的抽象,封装实现细节,在可能的情况下继承,信息隐藏,找出容易改变的区域,保持松散耦合,探寻通用的设计模式。其他启发式方法:高内聚性,构造分层结构,严格描述类契约,分配职责,为测试而设计,研究以前出现过的失误以避免失误,有意识的选择绑定时间,创建中央控制点,考虑使用蛮力,画一个图,保持设计模块化,等等。分而治之。自上而下和自下而上的特点。[核对表:软件构造中的设计]
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾

