当你在那里绞尽脑汁地思考一个难题,并试着解决它时,你的同事却在旁边一边嚼着口香糖,一边打游戏,还时不时地发出一些怪声,动不动地问你一些愚蠢的问题。这时,你首先考虑的就是:我到公司这么些年了,该给我配一个私人办公室了。你找到老板。向他诉说你需要更多的私人空间,以避免被他人打扰,这样你才能更好地发挥自己的才能。你甚至说出了房间的格局,至少应该有10平方米的活动空间和2.8平方米的办公桌椅,房间最好有窗户。在丹麦已经制定了相关法律,只要雇员正式向自己的老板提出了带窗户的请求,那么老板就必须为雇员安排这样的办公室。
在软件开发界,大家都认为:更大的办公室空间、更安静的工作场所、更少的骚扰就意味着更好的软件。于是,10平方米的空间和2.8平方米的工作平台就成了每个程序员所向往的办公室环境。在经典书籍《Peopleware》(1987)中,Tom DeMarco和Tim Lister首次提出了这个观点。他们引用了多种资料,但资料来源主要还是以他们自己创办的年刊《Coding War Games》,他们总结出:更安静、更宽松的工作空间会带来更好、更高的编程效率。
办公室、家里、教室,不同的物理空间形状适合做不同的事情。你和一堆人坐在长长的宴会桌旁,你能够和两边的人方便地交谈,但是如果你从这头传话到另一头,要保证原话不走样就很困难了,因此亚瑟王(King Arthur)首创了圆桌会议,现在这个词已经成为平等的代名词。亚瑟王当初的本意也就是为了各位骑士能够方便地自由交谈。
建筑或办公室的设计和装修情况极大地影响着人与人之间的交流和协作。我曾经在一栋公寓楼中住过两年,但是很少能碰到我的邻居。那栋公寓楼的入口非常小,夸张点说,如果你背着一个大包裹就进不了门,公寓楼的大厅又窄、又黑、又小,邻里之间难得碰面,即使碰面也没有地方进行交谈。
办公楼一般都有着宽大的入口和走廊,但是现代化的高科技办公室在结构设计上也有着非人道的一面。“柔性分割”、“开放办公”的设计思想主导着现代办公室的布局,尽管听上去很好,但实际上,这种布局既不柔性也不开放。
一家典型的计算机公司布局是,由长长的走廊把一大堆小房间十字交叉地连接起来,房间内部分成多个隔断,把人员分隔开。如果你想看看别人在做什么,就必须伸长脖子从隔断上方看过去;如果你想和别人交谈,谈话效果也非常差。这种布局不但没有满足个人隐私要求,也没有满足开放性的要求。如果在一间办公室里,两个人相隔6米以上,那么他们之间可能几年也不会交流一次。来公司参观的人必须有人陪同,但这并不是出于安全性的考虑,而是怕他们找不到地方。邮件上必须标明类似KK14-HDQ;117N\BB.R3字样的内容,这行看似神秘的字符实际上指的就是诸如楼层、单元、第几排等信息。柔性办公室的柔性是根本靠不住的。如果要换个地方,就需要把所有的东西都搬走,甚至包括更换邮件标识,因为隔断可以拆除,人可以挪地方,但邮局的人可不会自动识别这些。
合理的办公空间可以促进软件开发效率,如果从这个观点来看,这种所谓的“柔性设计”空间是最差劲的。既不能满足单独工作的要求,也不能满足协同工作的需要;既不方便大家迅速撤离,也不方便大家闲时小聚。
但是,那种认为为开发者提供更安静、更宽松的办公空间就可以提高软件开发效率的观点也是不正确的,办公室布局与开发效率之间的关系远远要比这句话复杂得多。首先,从社会科学研究的角度来看,“原因-结果”之间的关系是很复杂的,很难说清哪个是因,哪个是果。高效的程序员有可能是在安静、宽松的办公环境下办公,但也可以说,正是由于他们的高效开发使得办公环境显得安静、宽松。
更重要的是,这个观点是DeMarco和Lister基于他们的软件编程测评结果所提出的,他们的软件测评只关注了编码环节,而忽略了完整的软件开发流程中的其他环节。另外,在他们的软件测评中,所有参与测评的程序员都被要求独立工作,而不是协同开发。因此,我们只能说安静和宽松的办公环境对提高独守编程效率有作用,那么,对于团队协作开发是否同样起作用呢?
为了有效地协同工作,项目组确实需要足够的工作空间,他们需要一个能容纳整个小组的空间,一个让整个小组更像一个团队的空间。事实证明,一个开放与封闭相结合的空间有利于充分的交流。办公室内应该有适合2~3人短期或长期协同工作的地方,也至少应该有一个类似于会议室的地方,可以让全体项目组的成员一起讨论问题。如果没有一个合适的地方让全组的成员方便地交流,那么要想将全组人员团结到一起就是一件很困难的事情了。
有一个软件经理很热衷于团队建设,但是,他对团队的协作质量却十分失望。他们工作的楼层布局很有意思,有很多办公室,办公室之间由矮玻璃墙隔开。只有很少的几间办公室能容纳两人同时办公,而那些比较大的办公室里却坐满了不同项目组的人。我观察过其中一个项目组的开会情况,他们在那个楼层中的最大的会议室里开会。11个开发人员挤在那个会议室中,而会议室里只能摆放1张会议桌和6把椅子,在桌子与白板之间只留有狭窄的空间,项目负责人在白板上写字时连转身都很费劲。可想而知,会议很快结束了。
对一个需要协同工作的团队来说,在整个软件开发期间,拥有一个团队自己的类似于会议室的地方是很有必要的。团队需要一个可以当做“指挥部”的地方,整个团队可以在那里方便地开会、讨论问题,借以躲避外面的喧嚣嘈杂。如果没有足够多的会议室,那么在迫不得已的情况下,与其他团队共用一间会议室也是一种较好的选择。
对使用“系统情节图”(system storyboarding,参见文献Zahniser 1990,1993)和其他协同分析和设计方法的团队来说,拥有一间充足空间的“指挥部”就显得特别重要。房间内的墙壁和白板可以成为团队工作的战场,可以用于记录团队的工作内容和工作过程。记录的内容可能包括团队标志、团队状态、重要的设计文档等各方面的信息。房间及其内部装饰是团队文化的一部分,它为团队提供一种共享的气氛,帮助团队成员高效、和谐地协同工作。
如果一个团队在地理上就是分开的,比如分布在不同办公楼、不同区域,甚至分布在世界各地,那么协作交流就变得更加困难,开销也更昂贵。同理,一个项目分布在多个区域(即使只是在不同办公楼、不同的楼层),项目的开销也要上升50%~100%。因为比起相对集中的团队,空间分散的项目团队需要额外的机制来进行交流与协作,因此前者的效率肯定高于后者。虽然现在有E-mail和远程电话会议可以帮助团队之间进行协作交流,但效果远不如在一起面对面交流,后者至少可以增进感情。
当我在麻省理工学院时,正处于软件工程的黑暗年代后期,那时,软件界已经逐步意识到应该为研发团队提供一个便于交流的工作环境,而这种工作环境可以提高软件的研发效率。合理的环境应该是一种集中式的开放空间,这样可以促进和推动团队成员协同工作。虽然固定的工作空间和封闭式的管理会让团队成员感到不便,但是如果能够创造性地利用空间,一样能够起到积极的作用。Risa Hyman(参见文献Hyman 1993)曾经描述过这样一个场景,一个团队最大限度地利用了传统的办公室布局,他们在长长的走廊墙上挂满了白板,并将走廊当做他们的主会议室。
拥有布局良好的办公室当然会对团队工作有利,但是,对高效率工作真正起决定性作用的还是这个团队的管理者和团队成员。是把墙当做交流的障碍,还是当做沟通的桥梁,这完全取决于人!
摘自《软件开发》,第1卷,#12,1993年12月