《代码大全2》读书笔记      
allen2660 +
    

《代码大全2》读书笔记

《代码大全》是有关编程分割和软件构建的绝好指导书。

第一部分 打好基础

chp01 欢迎进入软件构建的世界

chp02 软件隐喻

chp03 前期准备

程序员是软件食物链的最后一环。架构师吃掉需求,设计师吃掉架构,程序员消化设计

chp04 关键的构建决策

选择代码,定好编程规范

第二部分 高质量代码

chp05 软件构建中的设计

设计不是在谁的头脑中直接跳出来的,它是在不断的设计评估、非正式讨论、写实验代码以及修改试验代码中演化和完善的。

软件本质 复杂,管理复杂度

理想的设计特征

设计的层次

对状态变量的使用

  1. 不要使用布尔,使用枚举
  2. 使用access routine来取代对状态变量的直接检查。

设计模式:关于设计启发的总结 P108

Refs:《设计模式》《重构》《怎样解题》(波利亚)

设计实践: + 迭代 + Bottom Up + Top Down

chp06 Working Classes

抽象数据类型:深入挖掘能在问题领域工作的能量吧!

好的抽象:

良好的封装:

包含:

继承:

成员函数和数据成员:

构造函数

为什么使用类:

应该避免的类:

chp07 高质量的子程序

创建程序的正当理由:

内聚:

好的子程序命名

子程序的行数:

如何使用子程序参数:

返回值:

宏的替代方案:

内链

chp08 防御式编程

在开车的时候,你要承担起保护自己的责任,哪怕别的司机犯错。

Gabage In

断言,断言主要用于开发和维护阶段。

下面是C++语言的支持message的断言宏。

#define ASSERT (condition, message) {                       \
    if (condition) {                                        \
        LogError("Assertion Failed .", condition, message); \
    }                                                       \
    exit(EXIT_FAILURE);                                     \
}                                                           \

错误处理技术

健壮性 vs 正确性

高层设计对错误处理的影响。确定一种通用的错误处理策略,是架构层次的设计决策。

请在每一个系统调用后检查错误码。

异常

把异常当做正常处理逻辑的一部分,这样的程序都会遭遇可读性和可维护性的问题(意大利面)。

辅助调试的代码

有多少防御式代码保留在产品中

chp09 伪代码编程过程

创建一个类的步骤:

创建子程序的步骤:

使用伪代码方法开发子程序,自然变成了注释

检查代码:

其他方法

第三部分 变量

chp10 使用变量的一般事项

变量使用原则:

减少作用域的原则

变质的变量:

为变量指定单一用途:

chp11 变量名的力量

一个好名字通常表达的是“What”,而不是“How”

20个字符以下,足够描述清楚

变量名中的计算值限定词放在最后:

Min,Max,Total,Average

循环下标:

状态变量:

枚举类型:

全局变量:

非正式命名规则

C++ 命名规范示例 P277

chp12 基本数据类型

数值概论

整数

浮点数

字符和字符串

C-String

布尔

枚举类型

chp13 不常见的数据类型

使用指针的一般技巧

C++ 指针

C 指针

只有万不得已才使用全局数据

第四部分 语句

chp14 组织直线型代码

对于必须有明确顺序的语句:

对于没有明确顺序的语句:

chp15 条件语句

利用布尔函数调用简化负责的检测 把最常见的情况放在前面

case语句:

chp16 控制循环

chp17 不常见的控制结构

chp18 表驱动法

表驱动法是一种编程模式,从表里面查找信息而不使用逻辑语句(if/else)

直接访问表

int day_of_month (int month){
    int days_array[] = {31,30....};
    return days_array[month-1];
}

chp19 一般控制问题

布尔表达式:

与0比较的知道原则:

空语句:

深层嵌套

结构化编程的中心论点:任何一种控制流都可以由顺序、选择和迭代这三种结构生成。

McCabe子程序复杂度:

第五部分 代码改进

chp20 软件质量概述

Review 是比Test 更有效率的方法。Review一般能直接发现问题以及原因。而Test一般只能发现现象。

软件质量的普遍原理:改善质量以降低开发成本

chp21 协同构建

协同构建的方式:

chp22 开发者测试

单测框架

覆盖率统计

持续集成

chp23 调试

调试本身并不是改进代码质量的方法,而是诊断代码缺陷的一种方法。

经验丰富的程序员找bug的效率是缺乏经验的20倍。

通过调试让自己进步:

chp24 重构

chp25 代码调整策略

TODO

chp26 代码调整技术

TODO

第六部分 系统考虑

chp27 程序规模对构建的影响

chp28 管理构建

chp29 集成

chp30 编程工具

第七部分 软件工艺

chp31 布局与风格

chp32 自说明代码

chp33 个人性格

很多软件开发者花时间去准备应付上一次战争,却不花时间去准备下一次战争。

chp34 软件工艺的话题

测试仅仅说明软件所用的特定方法有缺陷,并不能让软件更有用、更快、更可读或更有扩展性。

首先为人写程序,其次才是机器。

习惯成自然,专业的程序员总是写可读性好的代码。

借助规范的力量来节省个人的注意力与精力。

基于问题域编程。顶层代码不应该充斥文件、栈、队列、数组、字节等计算机科学的解决方案。分层来解决这个问题。

一天写了一大堆代码,然后花两个星期去调试绝不是巧妙的干活方法。

工具箱:

chp35 More Info

程序员的书单,每一本都要读!

点击查看评论