哲学

Kiss it simple, stupid(KISS 原则)

模块原则

用清晰的接口连接起多个简单的模块组合成复杂的软件

清晰原则

代码注释,在选择算法和实现时就考虑将来的可扩展性

组合原则

要让程序具有组合性,就要让程序之间彼此独立。

GUI 层中,交互逻辑与算法逻辑充分解耦

分离原则

策略同机制分离,接口同引擎分离。

放映到系统设计上,机制是目标功能,策略是实现方法,也可以认为是接口与实现
本质上就是要“隔离变化”,将易变部分和不易变化的部分分离。

透明性原则

设计要可见,以便审查和调试

  • 透明性:指你能一眼了解系统是做什么的以及怎么做的。
  • 显见性:指程序带有监控和显示内部状态的功能

程序要展示其正确性,应该使用足够简单的输入输出格式,这样能清晰的了解其关系是否正确。

表示原则

数据要比编程逻辑更容易驾驭,所以建议使用数据驱动编程。

对比:Unix 哲学同其他哲学的比较

统一性理念

“一切皆文件”模型及在此基础上建立的管道概念。

多任务能力

抢先式多任务(preemptive multitasking)能力,在 Unix 中,时间片由调度程序来分配,这个调度程序定期中断或抢断正在运行的进程而把控制权交给下一个进程。

协作进程

在 Unix 中,低价的进程生成和简便的进程间通讯(IPC,Inter-Process Communication)使众多小工具、管道和过滤器组成一个均衡系统成为可能。

内部边界

系统内部通过设置多层级,严格的内存划分、权限管理,来防止失控的进程或其他程序对于系统的破坏。

模块性:保持清晰,保持简洁

用定义清晰的接口把若干简单模块组合起来,这样多数问题只会出现在局部。

封装和最佳模块大小

封装良好的模块不会过多向外披露自身的细节,不会直接调用其他模块的实现码,也不会胡乱共享全局数据。模块之间通过应用程序编程接口(API)——- 一组严密、定义良好的程序调用和数据结构来通信。

SPOT 原则

真理的单点性(Single Point of Truth):任何一个知识点在系统内都应当有一个唯一、明确、权威的表述。

无论何时,重复代码都是危险信号。

  • 如果代码中含有重复数据是因为在两个不同的地方必须使用两个不同的表现形式,能否写个函数、工具或代码生成程序,让其中一个由另外一个生成,或两者都来自同一个来源?

    软件的多层性

    自顶向下和自底向上

  • 自底向上:从具体到抽象,从问题域中你确定要进行的具体操作开始,向上进行

  • 自顶向下:从抽象到具体,从最高层面描述整个项目的规格说明或应用逻辑开始,向下进行,直到各个具体操作

    参考资料

  1. 这本书
  2. 深入理解编程艺术之策略与机制相分离
  3. 机制与策略
  4. 数据驱动编程 #14
  5. 什么是数据驱动编程?