软件设计的哲学 A Philosophy of Software Design - John Ousterhout
作者约翰·奥斯特豪特是美国斯坦福大学计算机科学博萨克·勒纳教授,他是 Tcl 脚本 语言的创始人。
这本书是作者在斯坦福授课基础上编写的的一本有关与软件设计的书。
书的前半部分讲解软件复杂度和modules should be deep的观点,基本是精华所在,作者提出的关于软件设计的观点大部分我还是比较认同的。但是这本书是从学术课堂上诞生出来的,难免会有一些理想化的情况,所以,建议带着实践的角度去阅读这本书。
下面拉出书中的一两个设计原则来聊聊
▌工作不仅仅是编写代码;
软件复杂度是慢慢累积的,初始的设计多少是有理有据的,但是真实开发的情况是不可预估的,每一次的迭代需要我们践行“零容忍”哲学,不断迭代维护整体设计,在完整的框架下来扩展功能。
▌模块设计应该深;
▌接口设计应当使得最常用的路径越简单越好;
这两条我感觉是本书的核心部分了,把接口interface设计的简单,就可以允许实现Implement比较复杂,同时还能确保常用的路径非常简单(这一设计方式让我想到了哈夫曼),这两点我认为能极大的降低系统复杂度的设计。
读到最后我觉得作者写这本书的目的并非提供给了大家一个降低系统复杂度的设计指南,而在于激发大家去讨论与思考降低软件复杂度的设计原则。
就像设计模式是解决某一特定问题的最常用的解决方案一样,作者提出的一些设计原则可能是某些场景下总结出来的原则,实际的开发工作中共总会遇到各种各样的问题不一定能用书中提供的一些原则进行处理,我们认为可以借鉴吸收用到实际工作当中去