作者 | 章烨明

杏仁医生CTO。中老年程序员,关注各种技术和团队管理。
Tcl 和 Raft 发明人的软件设计哲学
John Ousterhout(斯坦福大学教授,Tcl 语言、Raft 协议的发明人...真的是超级牛人,Title 好多好多,这里就列几个大家熟悉的),在 Google 做了一次演讲,题目就叫 「A Philosophy of Software Design」。看看完后很有感触,做了一些记录。
软件设计的秘密
首先,John 问了大家一个问题,什么是计算机科学里最重要的事情?下面有回答 Abstration 的,有回答 Complexities 的,有回答 Testing 的。他还问了 Donald Knuth(高德纳,程序员应该都认识吧),Kunth 说是 Layer of Abstration,而 John 的答案是 Problem Decomposition。
John 认为,很不可思议的是,在计算机科学的教育里面,没有任何课程是真正教学生软件设计的。所以他在斯坦福开设了一门课程,在这门课里,John 会教学生一些设计方法和原则,同时让学生做一个比较大的项目。然后 John 会 Review 学生的代码,上课讨论,从而让学生掌握软件设计的方法和原则。
John 列出了他的软件设计的原则,不过这个演讲里面,他主要只讲了三点:Classes should be deep、Define Errors Out of Existence 以及 Tactical vs. Strategic Programming。Classes should be deep
Deep class 就是指接口非常简单,把复杂度都隐藏在实现里面的类;而相应的 Shallow class 则相反。这个原则其实不仅仅针对类,对于系统、模块、方法等其实都一样,提供简单的接口,把复杂性封装起来。