1、征服复杂性

  • 在架构层面上讲习题划分为多个子系统,以便让思绪在某段时间内能专注于系统的一小部分
  • 仔细定义类接口,从而可以忽略类内部的工作机理
  • 保持类接口的抽象性,从而不必记住不必要的细节
  • 避免全局变量,因为他会大大增加总是需要兼顾的代码比例
  • 避免深层次的集成,因为这样会耗费很大精力
  • 避免深度嵌套的循环或条件判断,因为他们都能用简单的控制结构取代,后者占用更少的大脑资源
  • 别用goto,因为它们引入了非顺序执行,多数人都不容易弄懂
  • 小心定义错误处理的方法,不要滥用不同的错误处理技术
  • 以系统的观点对待内置的异常机制,后者会成为非线性的控制结构
  • 不要让类过度膨胀,以至于占据整个程序
  • 子程序应保持短小
  • 使用清楚、不言自明的变量名,从而大脑不必费力记住诸如“i代表账号下表,j代表顾客下标”之类的细节
  • 传递给子程序的参数数目应尽可能的少
  • 用规范和约定来使大脑从记忆不同代码段的随意性、偶然性差异中解脱出来
  • 只要可能,一般情况下应避免偶然性困难

2、精选开发过程

对于多个程序员参与的项目,组织性的重要程度超过了个人技能。人们一起工作的方式将决定其能力是珠联璧合还是相互抵消。某个成员对其他人的工作是支持还是拖后腿,取决于团队采取的开发过程。

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

计算机不关心你的代码是否好读,它更善于读二进制指令,而非高级语言的代码。编写可读性好的代码,是为了便于别人看懂。可读性对程序的以下方面都有正面影响:

  • 可理解性
  • 容易复查
  • 错误率
  • 调试
  • 可修改性
  • 开发时间
  • 外在质量

可读的代码写起来并不比含糊的代码多花时间,运行时至少不比后者慢。如果能轻松阅读自己写的代码,确保该代码能工作也会更容易。

4、深入一门语言去编程,不浮于表面

不要将编程思路局限到所用语言能自动支持的范围。杰出的程序员会考虑他们要干什么,然后才是怎样用手头的工具去实现他们的目标。

在一些极端情况下,特别是新技术环境中,工具也许会原始到你不得不对所期望的编程方法有重大改变,这时所用语言可能使你难以采用自己期望的方法,但是仍然能受益于编程规范,利用它帮助你理清环境中的危险特性。

5、借助规范集中注意力

规范是一套用于管理复杂度的智力工具。规范的好处有:

  • 使用规范能避免各程序员随意决定导致的理解困难
  • 规范能够精确地传达重要信息
  • 规范可以使你免除各种风险
  • 规范增加了对底层工作的可预见性
  • 规范能弥补语言的不足之处

6、基于问题域编程

  • 将程序划分为不同层次的抽象

    • 第0层 操作系统的操作和机器指令
    • 第1层 编程语言结构和工具
    • 第2层 底层实现结构
    • 第3层 底层问题域
    • 第4层 高层问题域
  • 问题域的底层技术

    • 在问题域使用类,来实现有实际意义的结构
    • 隐藏底层数据类型及其实现细节的信息
    • 使用具名常量来说明字符串和文字量的意义
    • 对中间计算结果使用中间变量
    • 用布尔函数是复杂逻辑判断更清晰

7、当心落石

编程既非完全的艺术也非完全的科学,通常实践中,他是介于二者之间的“工艺”。

注意警告信息,将其作为编程的疑点,因为编程几乎是纯粹的智力活动。

8、迭代,反反复复,一次又一次

在许多软件开发活动中,迭代是正常现象:开始规划系统时,要喝用户商讨若干需求方案,直到大家达成一致为止,这就是一个迭代过程。为了获取更好的灵活性,以基类方式逐步构建和交付系统,也是迭代过程,形成最终产品钱,以原型方法快速开发出集中替代解决方案,还是迭代过程。

开发时,迭代次数越多,产品的质量越好。

9、汝当分离软件与信仰

  • 不合适的“宗教信仰”在软件开发中的表现形式:

    • 非要坚持某种设计方法
    • 笃信特定的布局或注释风格
    • 机理避免全局数据
  • 软件先知

    一些专业优秀人员往往更容易偏执。不要盲目跟风,而应使用一种混合的方法,可用激动人心的最新方法做做试验,但仍扎根于传统的可靠方法

  • 折中主义

    要对编程问题找出最有效的解决方案时,盲目迷信某种方法只会缩小你的选择余地。明知几种方法中有的可能成功,有的可能失败,但只有通过实践才能知道哪些好使。必须采取折中的态度。

  • 试验

    试验应贯穿于整个开发过程,但固执会妨碍你这么做。要想有效地试验,应能基于试验结果改变思路,否则试验只会白白浪费时间。

更多有关《代码大全 2》的读书笔记,请关注 :
http://tabalt.net/blog/code-complete-2-reading-notes/

本文链接:http://tabalt.net/blog/cc2-themes-in-software-craftsmanship/,转载请注明。