维基百科对敏捷开发的定义是:一组基于迭代开发和增量开发,通过自组织、跨职能的团队间的相互合作来满足需求、实现解决方案的软件开发方法。起步于 2001 年的敏捷开发享有一段令人印象深刻的“历史”,现在有很多组织都采用敏捷开发模式。不过近些年来,也涌现出一系列相关问题:什么样的组织更适合敏捷开发?开发组织是不是不当地应用了敏捷开发?敏捷开发是否需要雇用特定技能的开发者来实现高效开发?有些敏捷开发失败了,失败的原因是什么?Venkat Subramaniam 博士是 Agile Developer 公司的创始人,他在接受“Java Magazine”的采访时解答了这些问题。
对于“人们为什么会开始讨论敏捷开发的消亡呢?”这个问题,Venkat 解释说,这有点像那个盲人摸象的预言。四个盲人去公园参观大象,他们看不到大象,只能摸到大象的一部分然后做出截然不同的结论。
我记得先前人们怀疑过面向对象的开发方法是否适用于企业开发。当世界迈入新的范式时,有些企业早早地成功了,但有些企业还在困境中挣扎。如今,面向对象编程方法的广泛采用已是定局。企业在敏捷开发上也将渡过一个类似的阶段——一个学习曲线,理解什么是敏捷开发,如何使用敏捷开发。
开发组织该如何应用敏捷开发呢?Venkat 表示,当今的组织主要在采用两种方式。有些组织中,管理团队推动敏捷开发,因此可以看到 Scrum 在这些组织中成为主导。还有一些组织是组织底部在推动敏捷开发,在这种组织中我们更多看到技术或者极限编程实践成为主导。
这两种情况都不是最理想的,因为在这两种情况中,组织中都有一部分是不参与、不支持变化,或者不响应要求变化的需求的。除非组织中的每个部分都参与、实施这项改变,否则大家付出的努力往往得不到好的结果。
要想实现敏捷开发,组织需要变得敏捷。组织需要尝试一组不同的实践,然后迅速调整,寻求最有效的方法。基于组织情况、团队情况、外部环境,组织谨慎地应用实践对于成功的敏捷开发是至关重要的。
公司文化在多大程度上会影响敏捷的实施?Venkat 认为:
文化不同会带来很大的不同,但一个大型组织往往不存在单个的、覆盖整个公司的文化。我在一家公司的的走廊里走一圈就能感受到多种不同的文化。一家公司的不同团队可能有不同的对变化的响应方式、不同的批评方式和不同的反馈方式。有些团队可能更容易适应敏捷开发,而有些不能。
是不是有些类型的开发者注定了不适合敏捷开发呢?Venkat 表示,如果一个团队更愿意在发射井里工作的话,那么敏捷开发是不适合他们的。
德雷福斯技能习得模型将人们从一到五进行打分,五分的是那些“在黑暗中也会发光的人”——他们不需要监督和干涉就能把事情做好。一分由新手组成——如果你让他们独自承担任务,他们很难有进展。在参与不同的活动时,我们的分数也会随之变化。因为没有一分的人或五分的人——在不同的活动中我们有不同的分数。研究表明任何组织的平均水平都是两分,而这对于达到优秀是远远不够的。我们可以通过积极合作和开放式沟通的方式来帮助组织提升这个分数。
有些开发者生性乐于沟通,乐于接受建设性意见。有些开发者并不如此,这是个问题。我们必须谨慎的平衡自信和团队精神。自尊就像胆固醇——有好的一面也有坏的一面。我们都想以我们的个体工作为荣,但同时,我们需要将团队的成功放在第一位。这需要保持开放心态,接受权衡。如果开发者可以提出自己的想法,同时认为这些想法需要整个团队来优化、改善,而不是一味维护自己的观点,那么敏捷方法可以取得更好的效果。
虽然敏捷开发的一个原则强调面对面对话是最好的沟通方式,但 Venkat 认为面对面对话并非是良好沟通的必要条件。
我曾经和许多未谋面的人建立了富有成效的工作关系,有些人我多年后才见到,因此面对面对话并非是良好沟通的必要条件。关键是互动双方的态度。不管多远的两个人,只要他们乐于共事、重视集体的劳动成果,他们就能获得更好的工作成果。相比面对面交流,我们更需要的是建立信任关系。
如果我爱向你抱怨别人,那么你一定会觉得我在别人面前也会说你的坏话。这就损害了我们的信任关系。面对面沟通并不能解决这类问题。因此首先我们要快速了解彼此的态度和信任水平。在一切条件相当的情况下,我坚信面对面可以带来更好的结果。但是很难找到条件相当的两件事。
在采访中,Venkat 提到了自己最近出版的一本书——《Java 中的函数式编程:借助 Java 8 中 Lambda 表达式的力量(Pragmatic Programmers 系列,2013)》描述了一种与众不同的 Java 编程方式,以及编程方式和敏捷开发之间有什么联系。
Java8 中的 Lambda 表达式让开发者在 Java 中进行函数式编程成为可能。如果我们能应用好这种编程方式的话,我们可以减少代码中的错误,获得更美、更严谨、更容易并行化的代码。函数式风格的代码减少了可变部件,这让编写自动测试变的简单,也让我们获得高表达度代码。这一切都让我们编写出可以更迅速的获得反馈的代码。敏捷开发实质上是反馈驱动的开发。在迭代开发、增量开发中通过协作地、巧妙地调整反馈流程是敏捷开发的本质。
Venkat Subramaniam 是 Agile Developer 公司的创始人,他培训了数以千计的软件开发人员,遍布美国、加拿大、欧洲、亚洲。Venkat Subramaniam 博士以他富有感染力的热情著称,他帮助开发者成功地把敏捷实践应用到软件项目中,他还常常在国际会议和各种用户组织会议中发言。同时,他也是多本书籍的著者,包括他最近的一本——《Java 中的函数式编程:借助 Java 8 中 Lambda 表达式的力量》。在创办自己的公司前,Subramaniam 有着丰富的工作经验,他在 Halliburton、Raytheon、Invensys 等公司工作,职位从程序分析员到系统架构师都有涉猎。他还拥有休斯顿大学的计算机科学系博士学位,也是该系的一名兼职教授,2013 年他被评为 Java Champion。
评论