第八章主要是用大量数据来阐述了工作量与时间的关系,得出一个基本的结论如下 $$ 工作量 = (常数)×(指令的数量)^ {1.5} $$ 所以没有单独做笔记;

第九章主讲项目成本

同任何开销一样,规模本身不是坏事,但不必要的规模是不可取的。
聪明的项目经理还会给自己预留一些空间,在工作推行时分配。
仅对核心程序设定规模目标是不够的,必须把所有的方面都编入预算。

规模控制

在书中的案例中,他总结出了三个道理

  1. 和制订驻留空间预算一样,应该制订总体规模的预算;和制订规模预算一样,应该制订后台存储访问的预算。
  2. 在指明模块有多大的同时,确切定义模块的功能。
  3. 在整个实现的过程期间,系统结构师必须保持持续的警觉,确保连贯的系统完整性。在这种监督机制之外,是实现人员自身的态度问题。培养开发人员从系统整体出发、面向用户的态度是软件编程管理人员最重要的职能。

空间技能

书中给出了两种技巧

微服

提出了早期的“组合模式”,有点类似于“微服”的概念,但也提出了一个问题

当可以提供 20 倍临时性空间的大型系统使用这些模块时,节省的也仅仅是访问次数,仍然会因为模块的规模引起空间和速度上的损失。这样后果其实是——很难用小型系统的模块构造出非常高效的系统。

时间空间互换

考虑空间-时间的折衷。对于给定的功能,空间越多,速度越快。这一点在很大的范围内都适用。也正是这一点使空间预算成为可能。

并给出了两个方案

  1. 好的培训

一是确保他们在编程技能上得到培训,而不仅仅是依赖他们自己掌握的知识和先前的经验。特别是使用新语言或者新机器时,培训显得尤其重要。熟练使用往往需要快速的学习和经验的广泛共享,也许它应该伴随特别的新技术奖励或者表扬

  1. 维护好公共库

另外一种方法是认识到编程需要技术积累,需要开发很多公共单元构件。每个项目要有能用于队列、搜索和排序的例程或者宏库。对于每项功能,库至少应该有两个程序实现:运行速度较快和短小精炼的。上述的公共库开发是一件重要的实现工作,它可以与系统设计工作并行进行。

数据的表现形式是编程的根本

战略升级

创造出自精湛的技艺,精炼、充分和快速的程序也是如此。技艺改进的结果往往是战略上的突破,而不仅仅是技巧上的提高。
这种战略上突破有时是一种新的算法,如快速傅立叶变换,或者是将比较算法的复杂度从 n^2 降低到 n log n。

数据或表是程序的核心

更普遍的是,战略上突破常来自数据或表的重新表达——这是程序的核心所在。如果提供了程序流程图,而没有表数据,我仍然会很迷惑。而给我看表数据,往往就不再需要流程图,程序结构是非常清晰的。

数据的表现形式是编程的根本

由于缺乏空间而绞尽脑汁的编程人员,常常能通过从自己的代码中挣脱出来,回顾、分析实际情况,仔细思考程序的数据,最终获得非常好的结果。实际上,数据的表现形式是编程的根本。