无论大小项目,大型团队还是我个人,陈腐的联邦机构还是牛逼的硅谷公司,我都工作过。我学习并使用过至少20种编程语言。我还经历过瀑布模型/预先设计模型(BDUF:big design up front),结构化编程,自顶向下,自下向顶,模块化设计,组件,敏捷,Scrum,极限,TDD,OOP,快速原型,RAD,还有我可能想不起来的其它方法。我不敢肯定它们都管用。
【EDIT:让我解释一下本文的目的。我认为它们本身不能提供一个可预期的或可复制的软件开发过程。我不认为使用一种方法论会使项目失败。大多数软件开发方法论试图使编程成为类似工程的过程,在那方面它们是不足的。】
你该如何识别方法论管用?
一种方法论是否管用取决于条件:团队生产力,快乐,保持,遵从,可预言,有责任,沟通,每天代码行数,人月,代码质量,工件等。如果你用对了地方,每个方法论都管用。但是依照唯一的衡量方法就会出现问题,那就是按时、不超过预算地满足需求,我还没有看到任何方法论能够取得一致的结果。
我自己的经历有些轶事,但是它们也被我认识的每个程序员分享。这表明轶事是每个人都有的:软件开发方法论的严格学习并不管用,因为控制所有变数是不可能的。
做个思想上的实验:假定两组程序员小组,相同的需求、日程规划和预算,同样的环境,相同的语言和开发工具。一个小组使用瀑布模型/BDUF,另一个使用敏捷技巧。很明显这不是一个好的实验:个人技能和团队成员性格,彼此如何沟通,都将对方法论产生非常大的影响。
Alistair Cockburn 2003年的论文《软件开发中的人和方法论》指出,“人们的状态,因人不同,一个时刻与另一个时刻也不同,形成了团队行为和结果的第一位的驱动力。他们彼此相处如何,性格与工作分工是否匹配等因素,都对方法论产生着巨大的、与项目相关的约束。结果表明了通常人们的性格特点对方法论有一定影响。”
我们自己最大的敌人
当我在1970年开始编程时,软件开发稍稍通过项目经理、业务分析员和高级程序员等层级管理。我们没有选择语言和工具。我在公司里的一些大型的、复杂的项目就是这样做的。一些成功了,一些没有成功。现在让程序员选择方法论和工作方式,还有语言和工具比较普遍了。分析员不再出现在大多数程序员的经历里,项目经理已经被演变成“team lead”和“Scrum master”,没有管理授权,除了团队一直通过的仪式,并不真正控制什么。
严格的管理,像甘特图、日程规划和文档,被精简为“利益相关者”和“用户”,再被抽象为“用户故事(user stories,也有叫用例的。译者注)”。对于我来说,参与没有成熟监督机制的项目变得普遍了。令人惊奇的是,留下程序员自己,他们不会回归到冒失鬼的编程方式——他们采用或创造更为严格的方法论,被 比我在1980年经历的要多得多的仪式 所包围。事实上,今天的程序员对他们的方法论比他们认为的70年代COBOL shop更为教条和宗教徒式。现在我常常老一套地陷入1-2个开发人员的项目中,背负着太多的过程和“最佳实践”,而它们并没有产生多大价值。
一旦编程小组采用了一套方法论,不可避免地一些小组成员,或许只有一个人专横,就会要求严格地遵守,并转化成宗教徒。被动侵害的后果扼杀了比任何方法论或技术决定更快的效率。
有管用的吗?
我的个人经验,被Cockburn的论文和Frederick Brooks的《没有银弹》验证过,当团队关键人物分享共同愿景,Brooks称之为“概念完整性(conceptual integrity)”。这不会催生任何特定的方法论,就算缺乏类似于一个过程也会出现。团队每个人情投意合,事情就搞定了,我懂这种感受。我不理解的是,为什么 我在过去有BDUF和业务分析员的日子里 比 现在 感觉更强烈。
我认为程序员应该在倾听和协同工作上 比 仪式和工具上 投入更多的关心,我们应当对 过多的、号称能够使每个人神奇地提高效率的过程或方法论 保持怀疑。与其他人相比,或许社交技能对程序员太难了(我不确定这是真的),但是培养这些技能一定比尝试另一种开发方法论取得更多的回报。
文章转载自 开源中国社区 [http://www.oschina.net]