自1998 年起,关于“传统瀑布模型和敏捷编程孰优孰劣”的争论就从来没有停息过。如果这种争论只是停留在理论层面(更可怕的是,停留在感情层面),则它对软件开发 人员毫无意义。争吵、论战、板砖横飞、激扬文字,在中国开发社群中是每日的功课;冲动、纯经验论、蛮横无理、人身攻击,一切不利于讨论的元素充盈于整个社 群。
如果我们承认软件开发方法是一门科学,那么,就该用理性的态度去研究和讨论它。
《超越传统的软件开发——极限编程的幻想与真实》正是一本用理性态度研究和讨论极限编程的著作。该书的第一和第二作者均来自被诬指为“文化沙漠”的香港,这已说明诬指的无聊;著作本身展现出来的客观性、严谨性,更加告诉读者,什么是正确的讨论态度。
如果读者认为这是一本推崇极限编程、贬低瀑布模型的书,那么你将在阅读后感到失望。该书的客观性正体现于此——全面介绍极限编程理论、分析极限编程与瀑布模型的不同之处、以成功和失败案例说明极限编程可能导致的问题、给出实际项目中应用极限编程的策略和方法。
在 阅读这本书时,我受到相当大的震撼。这震撼既来自于图书本身,也来自于它背后的研究方法和研究态度,以及作者超越编程方法论的胆识和眼界。对于愿意思考的 读者,本书最大的价值在于后半部分提出的“太极软件开发”概念。慢!批评者且别着急。所谓“太极软件开发”,确乎不是一种玄学,而是实实在在可以体会到 的。按作者的观点,“环境”与“实践/软件模型”,如同太极图中的两仪,它们互为因果、互相作用。采用与环境不相适应的软件模型,结果必然是失败。
作 者又进一步提出,“人”也是软件开发中需要特别注意的影响因素。事实上,“人”也是开发过程中最为重要、也是最为脆弱的一环。同样戴着耳机工作,听硬金属 的程序员A和听轻音乐的程序员B,写出来的代码恐怕就是大不一样。曾经有朋友断言,B型血的人不适合担任PM,我自然一笑置之;然而,人的个性,的确是客 观存在的。项目组中人与人之间的沟通成本,也不能单纯归结为写接口文档的成本。正如本书作者所提到的那样,“假设你想要在软件开发项目中采用极限编程,但 开发小组的其他成员均对此表示反对,那么你在该项目中取得成功的希望微乎其微。”追求实践与环境的和谐,不拘泥于某种特定的开发模型和开发方法,这恐怕是 一个项目经理应该努力的目标吧?
那么,极限编程到底“有没有用”?这个问题就像小朋友看电影时总会提出的“他是好人还是坏人”一样,没有考 虑事物本身的两面性和与环境的互动关系。还是作者说得好,“一种方法在可以帮助我们成功管理一个软件项目——无论是直接采用该方法还是仅仅采纳其中的一些 观点——的时候,它才可以被认为是有用的。”如果极限编程能让你更加了解软件项目本身,它就是有用的。
所谓“不是风动,不是幡动,仁者心 动”,在软件开发项目中保持相当的灵活性、依据环境和人的不同,博采各种软件开发模型、开发方法中有利于项目的因素,加以恰当的组合,要比武断地排斥任何 一种软件开发模型、开发方法来得安全和有效。从这个意义上说,极限编程的价值到底是幻想还是真实,其决定因素还是在于它是怎么被理解和使用的。