设计是一个险恶(wicked)的问题
险恶的问题就是那些只有通过解决或部分解决才能被明确的问题。
你必须首先把这个问题「解决」一遍才能明确的定义这个问题。
书中有一个大桥被风吹垮的例子。
因而你无法推算完成一个项目需要花费多少时间,除非你做过一遍。
管理复杂度
- 用简单且正确的方法解决简单的问题
- 用复杂且正确的方法解决复杂的问题
代码优化策略
- 一些错误的刻板印象:
代码行数越少,性能越高——错误
特定运算可能比其他的快,性能更好——错误!你应该测量
开发者应该不断的优化代码——错误
程序的运行速度同其正确性一样重要——错误 - 编译器的优化可能比你写得代码更好
代码优化技巧
逻辑
在知道答案后停止判断
按照出现频率来调整判断顺序
要做性能测试,不要盲目相信结论
用表代替复杂分支(表编程)
惰性求值循环
将不需要重复计算的逻辑外提
使用哨兵值加速循环
把最忙(循环次数多)的循环放在最内层- 其他
削弱运算强度:用移位运算代替乘2或除2
将一些值初始化:如一天是 86400 秒
对每一次改进进行量化
程序规模对构建的影响
- 程序员的交流路径与程序员数量的关系
- 采用文档交流
注释
- 复述代码——无聊,多此一举
- 解释代码——改进代码,使代码更易读
- 标记——可能用的到的地方进行标记
- 概述代码——有用
- 代码意图说明——指出要解决的问题
- 传达代码无法表述的信息——非常重要