- Unix系统拥有抢先试多任务能力。在Unix中,时间片有调度程序来分配,这个调度程序定期中断或抢断正在运行的进程而把控制权交给下一个进程。几乎所有的现代操作系统都支持抢占式调度。
- 模块化代码的首要特质就是封装。封装良好的模块不会过多向外部披露自身的细节,不会直接调用其他模块的实现码,也不会胡乱共享全局数据。模块之间通过应用程序编程接口(API)——一组严密。定义良好的程序调用和数据结构来通信。这就是模块化原则的内容。
- 正交性是有助于使复杂设计也能紧凑的最重要特性之一。在纯粹的正交设计中,任何操作均无副作用;每一个动作(无论是API调用、宏调用还是语言运算)只改变一件事,不会影响其他。无论你控制的是什么系统,改变每一个属性的方法有且只有一个。(如果一个程序做好一件事之外,顺带还做其他事情的时候既不增加系统的复杂度也不会使系统更易产生bug,就没什么问题。)如保存日志功能:在返回结果中加入日志信息,再去调用保存的日志的方法,如果保存日志的方法报错不会影响原函数的运行。
- 重复会导致前后矛盾、产生隐微问题的代码,原因是当你修改重复点时,往往只改变一部分而并非全部。通常,这也意味着你对代码的组织没有想清楚。
- 通常,可以通过重构去除重复代码;也就是说,更改代码的组织而不更改核心算法。有时重复数据好像无法避免,但碰到这种情况时,下面问题值得你思考:
-
- 如果代码中含有重复数据是因为在两个不同的地方必须使用两个不同的表现形式,能否写个函数、工具或代码生成程序,让其中一个由另一个生成,或两者都来自同一个源?
-
- 如果稳定重复了代码中的知识点,能否从部分代码中生成部分文档,或者反之,或者两者都来自同一个更高级的表现形式?
-
- 如果头文件和接口声明重复了实现代码中的知识点,是否可以找到一种方法,从代码中生成头文件和接口声明?
- 实际代码往往是自顶向下和自底向上的综合产物。同一个项目中经常同时兼有自顶向下和自底向上的代码。这就导致了”胶合层“的出现。(讨厌的东西)
- 完美之道,不在无可增加,而在无可删减。