0.1为什么写这本书

十九年前夏日的一天,我正在宿舍里看一本关于禅宗的书。一位朋友走过来,他注意到了书的封面,然后好奇地问我禅宗是什么。当时我也说不清楚,只是觉得禅宗很像唯心主义者的一道逻辑题。禅宗的心髓是悟,在禅宗思想推广的历史上,有很多具体生动的故事阐释了这个概念。最有名的是六祖慧能的那首诗:“菩提本非树,明镜亦非台。本来无一物,何处染尘埃?”。“本来无一物”――说明了慧能在洞悉事物本质上的境界(后来这首诗的境界又被推翻了)。禅宗的历史就是种种境界被建立和被推翻的过程。为了达到无法推翻的最高境界,参禅者们发明了机锋公案、棒喝直指、扬眉瞬目、拳打脚踢、斩蛇杀猫这样一些辅助手段,这些手段可以让人快速通过量变到质变的一刹那(没有可以解释的过程),直达内心顿悟。进入顿悟状态后,所有语言、文字和思想都成了阻碍。唯一例外的词――想入非非――可以作为那种境界的缩影。想入非非的意思是说,那种至高无上的境界不是我们头脑中可以想到的,因为可以想到是一种阻碍。也不是我们头脑中无法想到的,因为无法想到是指除了可以想到之外的。非非,表示否定了否定,这里的双重否定不代表肯定。想入非非把没有边界的思想通过一种特殊的方式表达了出来。

在这些年的软件开发生涯中,禅宗那种积极反思、不断追求完美境界的精神一直影响着我。凭着这种精神,我把软件开发变成了乐趣。有两种原因使这种转变成为可能:第一,我把想象力和创造力结合了起来;第二,我的软件思想观比较成熟和完整了。这两点很重要。想象力和创造力的运用使人的精神得到了满足,而软件思想观则使任何事情在开始之前都有了一个合理的解释。满足和合理会带来乐趣。我写这本书的主要目的也有两个:第一,回顾自己的软件开发生涯;第二,与读者朋友们分享我自己的体验和感受。大家会从这本书中了解到我是如何从禅宗的心髓中领悟到软件开发的乐趣的,如何从千头万绪到线索明朗的,以及如何从复杂世界到简单世界的。


我还想在本书中表达以下几个观点。首先,思想是解决一切问题(包括软件开发中的问题)的根本。ROBERT C. MARTIN 在AGILE SOFTWARE DEVELOPMENT: PRINCIPLES, PATTERNS, AND PRACTICES的中文版序言中表达了一个思想——软件是美的(我喜欢阅读序言,那里通常是和作者心灵最接近的地方)。思想是一种坚定不移的信仰,并且是在经过了足够的实践检验后形成的。在软件开发过程中,稳定的思想会使所有的力量汇聚到一个有效的方向。其次,思想是一盏明灯,但有时也会成为一种桎梏。像参禅者一样不断追求完美的境界,使思想成为你自己的体验。最后,思想必须转换成习惯。我不是实用主义者,但是在实践中运用思想比停留在思想层面显然更有乐趣。所有的方法论都提供了丰富的实践方法,我这里提到的三个观点也不例外,这是为了让读者更容易理解我的观点。不是吗?


对于在软件开发过程中遇到各种问题的老手而言,经验是走出泥潭的安全绳。众所周知,软件开发者在软件开发的实践中经常处于一种混乱的状态。首先,没有可操作性强的方法论的指导。软件开发者的很多工作和努力都基于个人经验的积累。即便某些经验丰富的软件开发者掌握了一些必要的方法论知识,也不能在组织范围内有意识地推广,从而成为有实用价值的共享体验。其次,有经验的软件开发者们获取知识和使用知识的方法无法系统地传递给软件开发新手。这使新手们在软件开发领域的成长起点变得很低。软件开发的成功通常依赖于个人英雄主义或者是人海疲劳战加运气。如果你经常对软件开发中的混乱状态(无休止地加班、返工、资源紧张等)产生迷茫,就应该停下来思考。如果你思考后仍然没有明确的解决之道,不妨看看别人的想法。


本书不是一本关于方法论的理论性书籍(尽管我已经尝试在大量的思考上进行一些理论归纳),也不是一本关于具体技术的操作手册。本书为读者呈现的是我在软件开发实践中的思考和体验,目的在于探究实践中的问题的根源,并给出思想上的解决之道。本书以软件开发的基本顺序为主线,以简单、想象和文化的开发思想为线索,以为软件开发实践提供指导价值为目标。本书力图做到传递经过组织的、可操作的软件开发经验,使软件开发领域的新手减少知识(软件开发思想)积累中的弯路,也使软件开发领域的老手可以对照自己的经验把可能的困惑降到最低。本书会有一些例子为那些有趣的思考提供支持。
本书最开始会尝试对简单、想象和文化做哲学上的思考。这些思考会比较抽象,但却是全书的基础。