程序设计实践

 风格


全局变量用具有描述意义的名字,局部变量用短名字。
保持一致性。
函数采用动作性的名字。
要准确。
以缩行形式显示程序结构。
使用表达式的自然形式。
利用括号排除歧义。
分解复杂的表达式。
要清晰。
当心副作用。
使用一致的缩行和加括号风格。
为了一致性,使用习惯用法。
用else-if 处理多路选择。
避免使用函数宏。
给宏的体和参数都加上括号。
给神秘的数起个名字。
把数定义为常量,不要定义为宏。
使用字符形式的常量,不要用整数。
利用语言去计算对象的大小。
不要大谈明显的东西。
给函数和全局数据加注释。
不要注释不好的代码,应该重写。
不要与代码矛盾。
澄清情况,不要添乱。


界面


隐蔽实现的细节。
选择一小组正交的基本操作。
不要在用户背后搞小动作。
在各处都用同样方式做同样的事。
释放资源与分配资源应该在同一层次进行。
在低层检查错误,在高层处理。
只把异常用在异常的情况。


排错


寻找熟悉的模式。
检查最近的改动。
不要两次犯同样错误。
现在排除,而不是以后。
取得堆栈轨迹。
键入前仔细读一读。
把你的代码解释给别人。
把错误弄成可以重现的。
分而治之。
研究错误的计数特性。
显示输出,使搜索局部化。
写自检测代码。
写记录文件。
画一个图。
使用工具。
保留记录。


测试


测试代码的边界情况。
测试前条件和后条件。
使用断言。
做防御性程序设计。
检查错误的返回值。
以递增方式做测试。
首先测试最简单的部分。
弄清所期望的输出。
检验那些应当保持的特征。
比较相互独立的实现。
度量测试的覆盖面。
自动回归测试。
建立自包容测试。


性能


自动计时测量。
使用轮廓程序。
集中注意热点。
画一个图。
使用更好的算法或数据结构。
让编译程序做优化。
调整代码。
不要优化无关紧要的东西。
收集公共表达式。
用低代价操作代替高代价操作。
铺开或者删除代码。
缓存频繁使用的值。
写专用的存储分配程序。
对输入输出做缓冲。
特殊情况特殊处理。
预先算出某些值。
使用近似值。
在某个低级语言里重写代码。
使用尽可能小的数据类型以节约存储。
不存储容易重算的东西。


可移植性


盯紧标准。
在主流中做程序设计。
警惕语言的麻烦特性。
用多个编译系统试验。
使用标准库。
只使用到处都能用的特征。
避免条件编译。
把系统依赖性局限到独立文件里。
把系统依赖性隐藏在界面后面。
用正文做数据交换。
数据交换时用固定的字节序。
如果改变规范就应该改变名字。
维护现存程序与数据的相容性。
不要假定是A S C I I。
不要假定是英语。

目 录 译者序 前言 第1章 风格 1 1.1 名字 2 1.2 表达式和语句 4 1.3 一致性和习惯用法 8 1.4 函数宏 14 1.5 神秘的数 15 1.6 注释 18 1.7 为何对此费心 22 第2章 算法数据结构 23 2.1 检索 23 2.2 排序 25 2.3 库 27 2.4 一个Java快速排序 29 2.5 大O记法 31 2.6 可增长数组 33 2.7 表 35 2.8 树 39 2.9 散列表 43 2.10 小结 46 第3章 设计与实现 48 3.1 马尔可夫链算法 48 3.2 数据结构的选择 50 3.3 在C中构造数据结构 51 3.4 生成输出 54 3.5 Java 56 3.6 C++ 59 3.7 Awk和Perl 61 3.8 性能 63 3.9 经验教训 64 第4章 界面 67 4.1 逗号分隔的值 67 4.2 一个原型库 69 4.3 为别人用的库 72 4.4 C++实现 79 4.5 界面原则 82 4.6 资源管理 84 4.7 终止、重试或失败 86 4.8 用户界面 90 第5章 排错 93 5.1 排错系统 94 5.2 好线索,简单错误 95 5.3 无线索,难办的错误 98 5.4 最后的手段 101 5.5 不可重现的错误 103 5.6 排错工具 105 5.7 其他人的程序错误 107 5.8 小结 108 第6章 测试 110 6.1 在编码过程中测试 110 6.2 系统化测试 114 6.3 测试自动化 118 6.4 测试台 120 6.5 应力测试 123 6.6 测试秘诀 125 6.7 谁来测试 126 6.8 测试马尔可夫程序 127 6.9 小结 129 第7章 性能 130 7.1 瓶颈 130 7.2 计时和轮廓 135 7.3 加速策略 138 7.4 代码调整 140 7.5 空间效率 144 7.6 估计 145 7.7 小结 147 第8章 可移植性 149 8.1 语言 149 8.2 头文件和库 154 8.3 程序组织 156 8.4 隔离 159 8.5 数据交换 160 8.6 字节序 161 8.7 可移植性和升级 164 8.8 国际化 165 8.9 小结 167 第9章 记法 169 9.1 数据格式 169 9.2 正则表达式 174 9.3 可编程工具 180 9.4 解释器、编译器和虚拟机 182 9.5 写程序的程序 186 9.6 用宏生成代码 189 9.7 运行中编译 190 后记 195 附录:规则汇编 197 索引 200
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值