- 关注你的技艺
- 思考!思考你的工作
- 你有权选择
- 提供选择,别找借口
- 不要放任破窗
- 做推动变革的催化剂
- 牢记全景
- 将质量要求视为需求问题
- 对知识组合做定期投资
- 批判性地分析你读到的东西和听到的东西
- 英语就是另一门编程语言
- 说什么和怎么说同样重要
- 把文档嵌进去,而不要栓在表面
- 优秀的设计比糟糕的设计更容易变更
- 不要重复自己
- 让复用变得容易
- 消除不相关事物之间的影响
- 不设最终决定
- 放弃追逐时尚
- 使用曳光弹找到目标
- 用原型学习
- 靠近问题域编程
- 通过估算来避免意外
- 根据代码不断迭代进度表
- 将知识用纯文本保存
- 发挥Shell命令的威力
- 游刃有余地使用编辑器
- 永远适用版本控制
- 去解决问题,而不是责备
- 不要恐慌
- 修代码前先让代码在测试中失败
- 读一下那些该死的出错信息
- “select”没出问题
- 不要假设,要证明
- 学习一门文本处理语言
- 你无法写出完美的软件
- 通过契约进行设计
- 尽早崩溃
- 使用断言去预防不可能的事情
- 有始有终
- 在局部行动
- 小步前进——由始至终
- 避免占卜
- 解耦代码让改变更容易
- 只管命令不要询问
- 不要链式调用方法
- 避免全局数据
- 如果全局唯一非常重要,那么将它包装到API中
- 编程讲的是代码,而程序谈的是数据
- 不要囤积状态,传递下去
- 不要付继承税
- 尽量用接口来表达多态
- 用委托提供服务:“有一个”胜过“是一个”
- 利用mixin共享功能
- 使用外部配置参数化应用程序
- 通过分析工作流来提高并发性
- 共享状态是不正确的状态
- 随机故障通常是并发问题
- 用角色实现并发行时不必共享状态
- 使用黑板来协调工作流
- 倾听你内心的蜥蜴
- 不要依靠巧合编程
- 评估算法的级别
- 对估算做测试
- 尽早重构,经常重构
- 测试与找Bug无关
- 测试是代码的第一个用户
- 既非自上而下,也不自下而上,基于端对端构建
- 为测试做设计
- 要对软件做测试,否则只能留给用户去做
- 使用基于特性的测试来校验假设
- 保持代码简洁,让供给面最小
- 尽早打上安全补丁
- 好好取名;需要时更名
- 无人确切知道自己想要什么
- 程序员帮助人们理解他们想要什么
- 需求是从反馈循环中学到的
- 和用户一起工作以便从用户角度思考
- 策略即元数据
- 使用项目术语表
- 不要跳出框框思考——找到框框
- 不要一个人埋头钻进代码中
- 敏捷不是一个名次;敏捷有关你如何做事
- 维持小而稳定的团队
- 排上日程以待其成
- 组织全功能的团队
- 做能起作用的事,别赶时髦
- 在用户需要时交付
- 使用版本控制来驱动构建、测试和发布
- 测试状态覆盖率,而非代码覆盖率
- 每个Bug只找一次
- 不要使用手动程序
- 取悦用户,而不要只是交付代码
- 在作品上签名
- 先勿伤害
- 不要助纣为虐