Oct 9, 2008

Code Complete PART 1: Laying the Foundation

Chapter 1. Welcome to Software Construction
What is Software Construction Activity:
problem definition
requirements development
construction planning
software architecture (high-level design)
detail design
coding and debugging
unit test
integration testing
integration
system testing
corrective maintenance
chapter 2. Metaphors for a Richer Understanding of Software Development
Metaphors: analogy --> modeling
Metaphors: heurstic, subject to chance Algorithm: predictable, deterministic, not subject to chance
common software Metaphors
Writing code: trial and error
Growing a System: incremental, iterative, adaptive, evolutionary
Building Software:
problem definition --> architectural design --> construction --> optimization (review and inspections)

Chapter 3. Measure Twice, Cut Once: Upstream Prerequisites
根本目标:降低风险
流程 --> 质量
Importance of Prerequisites
Causes of Incomplete Preparation:
Non't konw How --> 如果不能做好,做再多也没用!
尽快开始编码:WIMP(why isn't Sam Coding?)
Determine the Kind of Software You're Working On
商业系统 使命攸关 性命攸关
Inerative Approbches --> 修正成本地,发现缺陷的时间更接近引入缺陷的时间
Choosing Between Interative and Sequential Approaches:
需求稳定性 设计是否透彻 熟悉性 项目风险 长期可预测性 后期改变需求、设计和编码的代价
Problem-Definition Prerequisite
product vision -- vision statement -- mission statement -- product difenition == problem definition
应用客户的语言书写
Requirements Prerequistite
scope --> 降低更变
The Myth of Stable Requirements
Handing Requirements Changes During Construction: 评估,通报,建立程序,开发方法
Architecture Prerequistite
system architecture -- high-level design -- top-level design --> architecture specification
Typical architecutral components
program organization: 维护设计的缘由 <--> 维护设计本身
major classes: rules and relationship
data design: files & database
business rules
user interface design: 模块化,便于更换
resource management: 数据库连接、线程、句柄、内存
security: threat model
performance: 资源的使用,速度、内存、成本的优先顺序
scalability: 增长以满足未来需求的能力
internationalization / Localization (I18N, L10N)
Input/output: reading scheme (look-ahead or look-behind or just-in-time)
Error processing: a coding-convention level problem
纠正 or 检测? 主动 or 被动? 错误传播 消息处理 异常处理 处理错误的层次 输入数据有效性
Fault tolerance: 检测 恢复 包容
容错策略:退回 try again;辅助代码,主代码错误时使用;表决算法,分别计算-比较;使用虚假值(phony value)
architectural feasibility
overengineering
buy-vs.-build decisions
resuse decisions
change strategy
general architectural quality: 维护概念完整性
Amount of Time to Spend on Upstream Prerequisites
工作量:10% ~ 20%
时间:20% ~ 30%

Chapter 4: Key Construction Decisions
Choice of programming language
C: 1
Fortran 95: 2
C++, Java: 2.5
VB: 4.5
Perl, Python, Smalltalk: 6
语言的表达能力--思考的能力:你思考的能力取决于你是否知道能够表达该思想的能力
Language descriptions
Cobol: COmmon Business-Oriented Language
Fortran: FORmula TRANslation
Perl: Practical Extraction and Report Language
PHP: PHP:Hypertext Processor
BASIC: Beginner's All-purpose Symbolic Instruction Code
Programming in a language (如果语言工具是初级的,那么程序员的思想也是初级的)
programming into a language (思想 --> 决定如何使用工具)

2 comments:

Anonymous said...

啥东东,完全看不懂啊

Sunix.Xu.许一尊 said...

全是书上摘下来的,只是排得乱了。