1. 为人编写程序,而不是为电脑
一段程序不应该要求其阅读者能够比电脑内存记住更多的东西
变量名称要保持一致、独特、有意义
代码的风格要保持一致
2. 一些工作让计算机去做
重复的工作交给计算机
将最近使用的命令保存在一个文件中,以便后期重复使用
使用一个构建工具来自动化工作流程
3. 增量式改进
将工作分为若干个小步骤,快速反馈,及时修正
使用一个版本控制系统
将手动创建的所有东西都放入版本控制系统中
4. 不要重复自己(或他人)
每一块数据必须在系统中有一个单一权威的表征
模块化代码,而不是复制和粘贴
重用代码,而不是重写代码
5. 对错误进行规划
在程序中添加断言,以检查其操作
使用现成的单元测试库
将bug转化成测试用例
使用一个符号调试器
6. 软件正常工作后再进行优化
使用分析器来确定程序的瓶颈
尽可能使用高级语言来编写代码
7. 记录项目的设计和目标,而不是记录技术细节
记录接口和用途,而不是实现
重构代码优先于解释它是如何工作的
将文档作为软件的一部分
8. 协作
对预合并的代码进行审查
在带新人和处理棘手的问题时使用结对编程
使用一个问题追踪工具
一段程序不应该要求其阅读者能够比电脑内存记住更多的东西
变量名称要保持一致、独特、有意义
代码的风格要保持一致
2. 一些工作让计算机去做
重复的工作交给计算机
将最近使用的命令保存在一个文件中,以便后期重复使用
使用一个构建工具来自动化工作流程
3. 增量式改进
将工作分为若干个小步骤,快速反馈,及时修正
使用一个版本控制系统
将手动创建的所有东西都放入版本控制系统中
4. 不要重复自己(或他人)
每一块数据必须在系统中有一个单一权威的表征
模块化代码,而不是复制和粘贴
重用代码,而不是重写代码
5. 对错误进行规划
在程序中添加断言,以检查其操作
使用现成的单元测试库
将bug转化成测试用例
使用一个符号调试器
6. 软件正常工作后再进行优化
使用分析器来确定程序的瓶颈
尽可能使用高级语言来编写代码
7. 记录项目的设计和目标,而不是记录技术细节
记录接口和用途,而不是实现
重构代码优先于解释它是如何工作的
将文档作为软件的一部分
8. 协作
对预合并的代码进行审查
在带新人和处理棘手的问题时使用结对编程
使用一个问题追踪工具