有些程式开发者,即使他对程式语言和技术不那麽全面深入了解、撰写程式也不那麽的快,但是因为他能够适当的让别人知道他遭遇到的问题、请求别人的协助,也懂得确认自己所接收的资讯是否正确、避免因为资讯传达错误而衍生出种种的问题。所以这样子的开发者,反而能够在团队中扮演称职的角色,让开发的工作进展顺利。
相反的,有些技术高强的开发者,如果被赋予一个需要大量沟通的工作,但他本身却不擅长沟通时,就有可能没有办法圆满的把工作完成。由此可见沟通对软体开发的重要性。
需要流通的资讯类型
事实上,沟通这件事除了倚赖团队中每个成员自己的能力及自觉之外,其实为团队设计良好的机制及流程,也可以诱发团队成员间的沟通,做为一个导引和辅助的力量。
即使不同类型的开发专案,在资讯的权限控管上会有不同的考量。不过我觉得对于资讯控管上没有特殊需求的团队而言,「尽可能的让资讯在团队中流通」是很重要的一件事。
这包括了和开发有关的种种资讯,和专案工作排程有关的,像是现在总共有那些工作、每个人分别负责什麽工作、下一个开发的里程碑时限订在何时、这个里程碑抵达时需要完成那些工作等等。
而和程式有关的则像是系统的架构为何、总共有那些主要的类别、每个类别的作用、它们是如何和其他类别进行互动……等等。
也有一些和团队成员有关的,像是某成员可能在几天後要请假,或是某人最近身体或心理状态不好,可能没有办法全力投入在开发之类的。
各种和专案本身、和需求规格、和设计、和程式码、和每个成员有关的资讯,都应该尽可能的在团队中流通,因为让团队中的成员知道愈多的资讯,他们便更有机会做出更好的决策、得到更好的工作结果。
从极限编程看资讯流通的意义
在极限编程(XP)里主张「集体程式码共有(Collective Code Ownership)」的概念。在这个概念下,专案中的每个人都有权力及能力,基于增加功能、修正错误,以及重构的原因,更动系统中的每一行程式码。
而当我们谈到了「能力」,不禁会问到,要怎麽才能够让每个人都有能力来更动系统中的每一行程式码?除了本身技能之外,也得让和每一行程式码对应相关的资讯(像是领域知识或是演算法,甚至是设计细节或特殊考量),都让每个成员知晓,才能够让他真正具备更动程式码的能力。
极限编程里怎麽达到这件事呢?
它是透过搭档编程及系统隐喻等准则,来达到程式码的共有。透过持续更换搭档编程的对象,让不同的成员间得以都有合作的机会,每个人都有机会碰触到每一段程式码。
而在搭档编程的过程中,透过这种特有的合作模式,领域知识、演算方法、设计思维,都可以在成员间流动、传递。我们可以说, 极限编程透过开发方法及流程本身的设计,促进了这些资讯在团队中流动。只要这些资讯能够在团队中流动,这些资讯就容易被更多的人所持有。