《代码大全2(Code Complete)》读后感

终于啃完这本近900页的大块头,一本讲述软件构建的最佳实践方面的书。
本书除了内容详实、通俗易懂之外,最大的一个优点就是翻译得特别好。
像作者说的,人的智力是有限的,而软件需要构建的世界是凌乱的,所以降低复杂度是软件开发的核心。
所以,如何降低复杂度是本书的核心,包括分层抽象、分解、复查、规范等等技术。
例如:

  • 将系统 “分解”,是为了使其更易于理解
  • 进行复查、测试,减少人为的失误
  • 将子程序编写得短小,以减少大脑的负荷
  • 基于问题而不是实现细节来编程,从而减少工作量

文章摘录

  • 首先为人写程序,其次才是为机器。
  • 子程序最佳的长度是50-150行。IBM曾经把子程序的长度限制在50行之内。
  • 犯错不是罪过,从中学不到什么才是罪过。
  • 在调试过程,设定时间,如果超过这个时间,就暂停或者放弃调错过程。知道何时放弃很难,但这是必须面对的问题。
  • 与其它行业相比,软件开发行业的经验比书本知识的价值要小。
  • 编程工作本质上是项无法监督的工作,因为没人清楚你正在干什么。
  • 承认自己智力有限并通过学习来弥补,你会成为更好的程序员。
  • 程序员都是大忙人,常常没有时间去考虑怎样改进自己的工作。
  • 木匠谚语“瞄两次,切一次(Measure twice, cut once)”(三思而后行)
  • 需求的关键是识别出用户的问题。
  • 开发过程能够帮助客户更好地理解自己的需求,这是需求变更的主要来源。
  • 如果你不能向一个六岁小孩解释某件事,那么你自己就没有真正理解它。 Albert Einstein。
  • 如果你熟悉数据库术语的话,类与对象的关系就如同“模式(Schema)”与“实例(instance)”一样。
  • 抽象可以让你用一种简化的观点来考虑复杂的概念。
  • 用错误狐狸代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况。
  • 伪代码编程过程(Pseudocode Programming Process,PPP),这种编程过程有助于减少设计和编写文档所需的工作量,同时提高这两项工作的质量。
  • 不合理地初始化数据是产生编程错误的常见根源之一。
  • 变量名的平均长度在10-16个字符之间。
  • 做一项全局决策而不是做许多局部决策。
  • 一条很好的经验就是,程序主体中仅能出现的文字量就是0和1,任何其他文字量应该换成有描述性的标示。
  • 平均5小时写出220行的代码。
  • 测试先行的编程是过去十年中所形成的最有用的软件开发实践之一。
  • 将单元测试纳入测试框架。
  • 如果一个错误无法重现,这通常是一个初始化的错误,或者是一个同时间有关的问题,或者是悬空指针的问题。
  • 重视Pareto法则。
  • 可以在程序执行开始的时候算出一张查询表,在之后每次需要的时候使用这一表格。
  • high-touch环境 :人性、人情、人味
  • 有效编程中最重要的工作是思考,而人思考时通常不会看上去很忙。
  • 以新习惯来代替老习惯,要比干脆戒掉老习惯容易。