从 Kuhn 到科学哲学再到SOLID
2011-03-25
Disclaimer: 我和作者是好友,和这本书的出版社有合作,我关于这本书的有些讨论也收入了这本书的一开始。
这是一本我极力推荐的书。
当年博文视点的编辑让我做这本书的技术审校的时候,我这样回复:
单从目录来看就知道, 这是一份质量上乘的书稿,我很愿意审阅书稿。The Structure of Scientific Revolution (TSSR) 就说, Paradigm (范式) 的改变就是思维模式的革命。 我读过的很多编程书, 如 Programming Language: Concepts and Constructs 以及 Programming Language:
Principle and Practice 都是以 Paradigm 讲解的。在中文书的世界,以范式展开讲编程的书少之又少,因为这种书籍需要对各种编程语言了然于心,对 TSSR 的思想熟稔于胸。希望郑晖先生的这本书能够在这个方向上有斐然的突破。
现在回头看看豆瓣的书评,有很多人还是不理解这本书的含义,而仅仅是看到表面的技术,或者体会到了“哲学”或者“思辩”色彩,但没有深究为什么有哲学和思辩色彩。
首先,作为一本技术书,可以说作者技术非常扎实。编程技术多如繁星,Paradigm 虽说不多,想要了解到能写书,的确需要扎实的功底。在这个问题上,读者只需要翻翻全书,就知道这里的积淀了。因此在这个问题上我不累述。
编程作为一种实践,联系着现实问题和我们的大脑。必然的,如果深究这种领域,就会有两个绕不过的问题:
1. 我们怎样去抽象现实的问题 (哲学上的认识论 [epistemology])
2. 我们怎样解决这些问题,用什么方法(工程上的最佳实践 [best practice])
无数的编程书教人编程,教人怎么面向对象,怎么用设计模式。这些都可以让人很快上手编程。如果我们不想深究这些最佳实践后面的道理,对付小程序是绰绰有余的。如果我们想要知道,一个最佳实践什么时候用,就需要超越这些最佳实践,了解他们背后的道理。这就绕不开认识论了。
以 Kuhn 为代表的一些科学哲学家,在 20 世纪对“科学”这个学科本身的哲学研究中,提出了“范式"这样一个概念。也就是说,不管科学看上去多么庞大,其实背后有一种指导性的思想。这种指导性的思想,横贯渗透到科学家的每一篇论文,每一项研究。范式的概念一经提出,就迅速被人们运用到各种场合。编程范式,就是 Kuhn 的科学哲学的一个应用。
我们都在用不同的范式编程,面向对象和面向过程只是冰山两角。作者在这本书的前半部分从不同的角度解读了这些范式。读者首先需要有恰当的知识结构,和一种“科学哲学”的思维方式。 才能完全了解编程范式的意义。不理解的会说作者在故弄玄虚装逼,这也没办法。我想阅读一点科学哲学,多学几种语言,然后回过来看这本书或许收获会更大。编程范式和后面的面向对象的抽象原则,都是一些技术层面上的论述,本身可能只会让读者觉得“恩,很有道理”。然后就忘了。真心想要和作者产生共鸣,理解这本书的脉络,理解作者他为什么就这么想,这么写的,除了需要一些技术方面的准备外,还需要理解,作者是想通过对编程中的各种最佳实践的讲解,最终授人以渔,让读者完成这种从最佳实践到思维方式的转换(包含范式等看问题的角度,抽象等看问题的原则等等)。 当然这种东西也只是说给有心人看了。
对于精通技术的读者,我可以再技术上多展开一些。书前半部分的范式是大家从所周知的,书后半部分的面向对象的原则,实际上也是围绕 SOLID 原则展开的。所以说,从最佳实践的角度看,这本书相当于是把众多编程书籍融合了一下。单纯从技术上来说,挑剔的读者会觉得给 4星也就差不多了,这无可非议。然而,诸位可以拿出 Robert Martin 的那本书,和这本书放在一起比对一下,看看 Bob 大叔的那些原则,是否讲透,将明白。 Bob 大叔做咨询的,概念抛出来就可以赚钱了,无须和你讲清楚这概念是他天外飞仙悟道的,还是高人传授的,也无需和你说明白除了设计 ATM 机以外接口分离原则还有什么用。现在有本书,讲同样的技术,只是额外又告诉你这些概念的来龙去脉,你还觉得这书只是技术上的重复么?
鉴于以上理由,本人极力推荐这本书。