不依赖直觉,科学地编程
2014-05-30
虽然这本书的名声并不响亮,但是在我看来他对我的帮助如算法导论一样大,刷新了我的“编程观”。在看算法导论之前,我以为编程就是API调来调去,一堆Lib堆起来一个程序。而在看这本书之前,我正如本书作者所描述的很多程序员那样,依赖直觉去编程,这么说也许有些含糊,但是如果你也是个程序员的话,你应该能理解我说的话:你在写很多程序的时候,譬如要编写循环,要处理边界条件时,是不是都如我一样“凭大脑中的逻辑推理想当然”地以为应该这么写或者那么写,有时候甚至你自己也不是那么地确定你写对了,这时候你也许会输入几个test case,如果测试通过了,你的信心就会增强,加上程序员普遍都自我感觉比较良好,这个程序在你看来肯定写对了。而实际上这么做有两个问题:
1.只要是人,直觉都可能会犯错,你“想象着” “应该”这么写的时候,就存在了潜在错误的可能
2.你没法用测试案例覆盖所有可能的输入,简单地举例,你能输入所有的整数吗?
这本书教会了读者一种科学的编程方法,利用严格的数学推理去“证明”你写的是对的,至少是你理解的那种“对”(因为如果你本身理解错了,那就没法指望你写的程序是对的了),这么说起来有些玄乎,但是说真的,这本书就是这么神奇。
稍微说一下书的内容以及如何读,免得有人觉得我只会吹牛逼打嘴炮不给干货。这本书主要包含三个部分:第一部分是一些跟逻辑推理相关的基础,这部分是后面主要内容的先验知识,重点是记住那些记号和理解那些公理;第二部分是解释了一种编程语言中必备的一些操作,譬如循环,分支,调用等。因为本书是原理性内容,所以避开了使用现成的一些编程语言,我个人觉得对于讲解一些核心内容确实有帮助,不过使得书的篇幅增长了不少。第三部分是重点,前面讲的都是理论,这一部分开始讲解具体的技巧和操作:如何用正确的方法去写出正确、高效的程序。这些技巧可应用性都很强,值得深入学习。
总的来说,我觉得本书是程序员进阶难得的好读本,而且对于读者来说是“能力之外的读本“,而不是单纯的知识性读物,提高的是读者的编程能力和方法论,相比那些具体的"XX技术实战”来说,对个人的提高影响更深远。