## 第4章 关键的构建决策
> // checklist For Major Construction Practices
> 核对表:主要的构建实践
### 编码
- 你有没有确定,多少设计工作将预先进行,多少工作在键盘上进行(在编写代码的同时)?
- 你有没有规定诸如名称、注释、代码格式等”编码约定“?
- 你有没有规定特定的由软件架构确定的编码实践,比如如何处理错误条件、如何处理安全性事项、对于类接口有哪些约定、可重用的代码遵循哪些标准、在编码时考虑多少性能因素等?
- 你有没有找到自己在技术浪潮中的位置,并相应调整自己的措施?如果必要,你是否知道如何”深入一种语言去编程“,而不受限于语言(仅仅”在一种语言上编程”)?
### 团队工作
- 你有没有定义一套集成工序–即,你有没有定义一套特定的步骤,规定程序员在把代码checkin(签入)到主源码(代码库)中之前,必须履行这些步骤?
- 程序员是结对编程,还是独立编程,或者这二者的某种组合?
### 质量保证
- 程序员在编写代码之前,是否先为之写测试用例?
- 程序员会为自己的代码写单元测试吗(无论先写还是后写)?
- 程序员在check in 代码之前,会用调试器单步跟踪整个代码流程吗?
- 程序员在checkin代码之前,是否进行集成测试(integration-test)?
- 程序员会复审或检查别人的代码吗?
### 工具
- 你是否选用了某种版本控制工具?
- 你是选定了一种语言,以及语言的版本或编译器版本?
- 你是否选择了某个编程框架,或者明确的决定不使用编程框架?
- 你是决定允许使用非标准的语言特性?
- 你是否选定并拥有了其他将要用到的工具—编辑器、重构工具、调试器、测试框架、语法检查器等?
### 中文要点:
- 每种编程语言都有其优点和弱点。要知道你使用的语言的明确优点和弱点。
- 在开始编程之前,做好一些约定(convention)。“改变代码使之符合这些约定”是近乎不可能的。
- “构建的实践方法”的种类比任何单个项目能用到的要多。有意识地选择最适合你的项目的实践方法。
- 问问你自己,你采用的编程实践是对你所用的编程语言的正确响应,还是受它的控制?请记得“深入一种语言去编程”,不要仅“在一种语言上编程”。
- 你在技术浪潮中的位置决定了哪种方法是有效的——甚至是可能用到的。确定你在技术浪潮中的位置,并相应调整计划和预期目标。
### English Key Points:
- Every programming language has strengths and weaknesses. Be aware of the specific strengths and weaknesses of the language you’re using.
- Establish programming conventions before you begin programming. It’s nearly impossible to change code to match them later.
- More construction practices exist than you can use on any single project.Consciously choose the practices that are best suited to your project.
- Your position on the technology wave determines what approaches will be effective—or even possible.Identify where you are on the technology wave, and adjust your plans and expectations accordingly.