软件开发流派

2008年4月12日

我记不清这是第几次了,我又一次陷入了关于定义实践、将其中一些标记为“最佳”以及可能出现的“认证”等话题的讨论中。这是一个熟悉的话题,尽管我们才刚刚开始讨论,但我已经可以预测到它的大致走向。它是由一种完全合理的愿望驱动的,即希望确定谁是更优秀的软件开发人员,以及现有的开发人员如何提高他们的能力。

当人们进行这类讨论时,他们通常会陷入困境。要么小组陷入激烈的讨论并最终破裂,要么小组没有进行激烈的讨论,却得出了被其他人嘲笑的结论。之所以会发生这种情况,以及为什么我认为短期内不会出现任何单一、广泛认可的软件开发认证计划,其核心原因在于,没有一种单一、公认的有效开发软件的方法。

相反,我们看到的情况是,存在着几种软件开发流派,每一种流派都有自己对良好实践的定义和表述。作为一个行业,我们需要认识到存在着多种流派,而且它们对待软件开发的方法也截然不同。不同之处在于,一个流派认为是典范的东西,在其他流派看来可能是无能的表现。此外,我们不知道哪个流派是正确的(部分原因是我们无法衡量生产力),尽管每个流派都认为自己是正确的,并且对其他流派的容忍度各不相同。

我在这里使用“流派”一词,其含义如下:

4 a:一群持有共同教义或追随同一老师的人(如哲学、神学或医学)<亚里士多德学派>;也指:此类群体的教义或实践 b:受共同影响的一群艺术家 c:一群观点或行为相似的人;也指:此类群体的共同观点或行为 <其他思想流派>

-- 韦氏词典

我是在接触语境驱动软件测试学派时明确地了解到这一概念的(参见James BachBrett Pettichord)。我喜欢他们看待这个问题的方式,因为它解释了为什么聪明的软件开发人员会有如此不同的方法。

语境驱动学派的人对测试领域的不同流派进行了一些研究,但我不知道在更广泛的软件开发领域中,是否有人尝试对这些流派进行分类。我感觉自己属于一个流派,这个流派源于我在 90 年代通过 OOPSLA 认识的人。面向对象是这个流派的一个关键实践,敏捷方法也是如此。你可以理所当然地认为这就是敏捷学派,但我认为敏捷方法是这个流派思想的核心组成部分,但并不是全部。这个流派的领导者包括 Ward Cunningham、Ralph Johnson、Kent Beck 和 Robert Martin 等人。总的来说,Thoughtworks 是一个遵循这个流派的组织(这就是为什么我在 Thoughtworks 感到自在的原因)。

但是,尽管我感觉这个流派在某种程度上是 cohérent 的,但仍然存在许多悬而未决的问题。将敏捷世界视为一个流派还是多个流派更好(Scrum 和 XP 是不同的流派还是同一个流派的一部分)?主要的流派有哪些?究竟是什么定义了一个思想流派?

我对这些问题没有太多答案,但要记住的关键点是,关于如何有效地开发软件,存在着多种思想流派。我们可能并不认同我们所属流派以外的其他流派,但如果我们不承认其他流派的存在,那就太愚蠢了。