2020年程序员/工程师必看的三本编程书籍( 四 )

第二本书是 《The Art of Unix Programming》 , 也有在线版本:http://www.catb.org/~esr/writings/taoup/html/ 。 Unix 有很多设计的智慧 。 其中我印象最深刻松耦合(loss coupling)—— 是 SICP 中强调的抽象(abstraction)和构造(composition)的具体做法 —— (de)compose 时 components 之间的耦合要送 , abstraction是要保证界面(interface)窄(简洁) 。

Windows 用户用 Word 的时候 , 可以在文档里嵌入 Excel 点子表格 , 用的 OLE、COM 这类插件技术 。 如果 Excel 的 COM 组件有 bug , 运行的时候出错 , 那么 Word 也会 crash 。 这是一个紧耦合导致系统稳定性下降的例子 。 人非圣贤 , 总会写bug , 系统设计要限制 bug 导致的糟糕结果的扩散 。

在 Unix 的世界里 , 每个程序都只专注做一件很小很具体的事情 , 比如 ls、sed、awk;同时提供很多机制(shell、shell script、pipes、environment variables) , 把这些程序组织起来 —— 组织方式灵活又宽松 。 用这些简单的基础单元 , 大家很容易组合(compose)出很复杂的系统 。

我在做 code review 的时候 , 经常看到的一个问题是一大段程序同时解决好几件事情 。 或者发一个修改了很多文件的修改(pull request) , 修复好几个问题 。 其实都是属于没有认真解构(decompose)得到基本单元 , 然后以松耦合的方式组合(compose)的例子 。

推荐阅读