Google 极客谈软件开发团队的不良行为

开发团队是一个整体,稳定的、沟通无碍的团队文化非常重要。好的文化氛围应该包括基于共识决策的开发模式、高质量的代码、代码审查,以及能让人放心尝试新事物或者快速失败的环境。Brian和Ben是Google的两位开发主管,他们在“极客与团队”中列举了软件开发团队的典型不良行为,提醒开发者时刻保持警惕,并提出了一些实际的解决办法。

Brian和Ben指出,团队的注意力和专注力是最容易受到威胁的。团队规模越大,编写软件和解决有趣问题的能力就越强—不过这种能力毕竟是有极限 的。要是你不去主动保护它们,很容易就会被害群之马引入歧途。团队最终会争论不休,变得心烦意乱、身心疲惫。所有人都会把注意力和专注力放到那些编写优秀 软件以外的事情上去。

根据我们的经验,很少会有人故意干坏事(也就是存心捣乱的那种)。我们管这种行为叫作“钓鱼”,通常无视这种人就可以了。而大多数人在行为出格的时候,要么是没有意识到自己过分了,要么就是根本不在乎别人的感受。无知和冷漠其实比蓄意更严重。

他们列举了一些典型的不良行为。第一条就是不尊重别人的时间 ,总会有一些人搞不清楚项目的状况,他们的危害通常是浪费团队的时间。他们宁可不断地拿那些很容易就能找到答案的问题去骚扰整个团队,也不愿意自己花点时间去读一读最基本的项目文档、任务宗旨、FAQ,或是最近的邮件讨论。 这里有一个现实当中的例子:

我们在Subversion项目里就曾经碰到过这样一个人,他把开发主论坛当成了自己每天报流水账的地方。查理实际上没有 贡献什么代码,但他每隔两三个小时就会发布自己最新的异想天开。这样就无可避免地产生了很多回复,去解释为什么他的想法是不正确的,不可能的,已经在开发 中了,之前已经讨论过了,或者是已经有文档记录了等。更糟糕的是,查理甚至开始回答那些临时用户的问题,而且都答错了。这样,我们的核心成员只好不断地去 更正他的回复。过了好久我们才反应过来,这位和蔼可亲的热心人其实是好心办坏事,大家被他牵扯了太多的精力。

第二条是自负,这里“自负”可能不是最恰当的词,Brian和Ben想要表达的是那种无法接受多数人决议,无法 倾听和尊重其他观点,以及不愿作出妥协的人。这种人常常会重新挑起些早就已经结束(并且保留在邮件存档里)的讨论,仅仅是因为当时她不在场。这种人不肯去 读存档,也压根不想去思考,她只会要求为了自己重启争论。她常常会就项目的前途作出极端的评价,声称除非按照她的思路走,否则失败就在眼前。

过分索求是另外一种不良行为。每当有陌生人跟你要求做什么的时候,一定要提高警惕。这样的人把所有的精力都用来抱怨软件功能不足,却不愿意自己动手作点贡献。有时候等天上掉馅饼的心态会演变成过激行为。在运营Google的项目托管服务时,Brian和Ben就遇到过这样的例子:

当时有一个项目作者要求我们封掉一个用户,因为他的所作所为实在是太讨厌了。这是一个开源的电视游戏模拟器项目,而这个用 户最喜欢的游戏却无法在上面正常运行,于是他在问题跟踪系统里提交了一个口气相当粗鲁的bug报告。开发人员礼貌地解释了那个游戏跑不起来的原因,还告诉 他相当一段时间里可能都没办法修复那个问题,结果那个人接受不了,每天都来骚扰开发人员。他不断地提交同样的bug报告,里面充斥着各种不满,还在其他 bug报告里评论说拒绝修复他的问题的程序员是个“蠢货”。尽管项目人员和Google管理员屡次警告,他的用词却反而越来越不堪。不管我们怎么努力去消除他的这种破坏性行为,他就是冥顽不灵,万般无奈之下,我们只好祭出最后一招—彻底把他封掉了。

除此之外,还有两种行为需要警惕:

  • 幼稚或是莫名其妙的交流——这样的人不会用真名。他们常常会用一些幼稚的昵称,比如 “SuperCamel”、“jubjub89”,或是“SirHacksalot”之类。更糟糕的是,这样的人往往会在不同的地方用不同的昵称—E- mail一个,即时消息里又是另外一个,可能提交代码的时候还有一个。更有甚者,你会看到他们用火星文、黑客语、全部大写,甚至含有大量标点符号的沟通方
    式!
  • 偏执妄想——在上面的例子里我们看到,有时候不切实际要求会直接转变成对项目的恶意。我们无数次看到它彻底演 变成偏执。当团队和访客的意见不一时,这种心怀恶意的人就会抛出某种阴谋论。要是太把他当真,去花精力和时间反驳的话就实在是太滑稽了。而且如果你已经建 立起一条开放透明的沟通渠道的话,这种指控只会显得更加可笑,因为所有的谈话内容都是有公开记录的。我们的建议是根本就不用去理会这种指控。当这种人真的
    做到这一步的时候,你说什么都是没用的,既然这样干嘛还费这劲呢?还不如把时间用来写代码。

最后一条是完美主义。乍看之下,完美主义者根本就是无害的。尽管时不时地会有一些奇怪的强迫症类型的行为出现,但是总体上这样的人都是谦虚有礼貌的,而且愿意倾听别人的意见,看起来满是良好的本意。那么问题出在哪里呢?答案就是太追求完美会变得瞻前顾后、犹豫不决。现实当中的例子:

帕特里克是一名非常出色的工程师。他做的设计非常出色,代码和测试的质量也很高,人也非常容易相处。但是每当要设计新软件 的时候,他就会无休止地调整、改进自己的设计。他从不满足,好像永远也不会开始写代码一样。尽管他对我们所面临的问题有非常好的见解和洞察力,但是团队里 的其他成员最后都被折腾到不行。这样下去就没法工作了,我们几个考虑了很久要怎么办。一方面,对团队来说帕特里克是巨大的财富;另一方面,他也妨碍了团队 前进的步伐。每次我们打算开始编写代码的时候,他就会很有礼貌地否定我们的方案,指出其中只在理论上成立的潜在问题,而且都是一时半会不会产生什么影响的
问题,不知不觉中他让我们整个陷于瘫痪状态。

Brian和Ben提出了一些实际的解决办法:

  • 写一份明明白白的任务宗旨。这样可以随时保持专注,知道哪些是目标,哪些不是。
  • E-mail讨论要有礼仪。保留归档,要求新人研读,防范那些“嘈杂的少数人”。
  • 所有历史都要有记录。这不单指代码历史,还有设计决策、重要的bug修复,以及过去犯下的错误。
  • 有效地进行协作。利用版本控制,代码改动要尽可能的小,方便进行审查,扩大“公车因子”,避免出现领地感。
  • 修复bug,测试,发布软件要有清晰的政策和流程。
  • 降低新人加入时的壁垒。
  • 依赖基于共识决策,在无法达成共识的时候也要准备好化解矛盾的方法。
时间: 2024-12-08 06:15:27

Google 极客谈软件开发团队的不良行为的相关文章

浅谈PHP开发团队的管理之道

说明:本文节选自<浅谈PHP开发团队管理及程序员做人问题>.全文请点击这里访问. 看了标题,也许很多程序员会反感的说:"程序员的做人问题先不用谈,你想出来这个标题,那你做人是不是有问题吧!" 笔者本人并不反驳这样的说法,每个人都有自己的做人原则.法国人的那句俗话说的好:"我不苟同你的思想,但是我绝对捍卫你思想的自由". 是,这是站在个人的立场上可以那么说.但是如果站在一个团队的立场上呢?一切不尽然了! 无论马拉车的原理也好,还是木桶原理也好,西方人整出来

MBTI在软件开发团队中的应用

人绝不是一种资源.一方面我们不可能因人设岗,另一方面也不能忽略人性的差异.面对问题时,不要总是单纯地从人的态度或品德上查找问题,而是要反思人事安排和流程建设上的不足.奢望一个人改掉他的缺点,还不足充分发挥他的优点. 前言 MBTI将人区分为16类人格特质,我无法断言是否真得能表达出人的真实一面,毕竟只是统计性的结果.我的思考并不在于它归类的结果,而在于它的归类方法.   在团队合作中,各种各样的情绪.喜好.偏见一直在影响着我们对于人和事的判断.我们强调第一印象的重要性,正是因为一旦被贴上标签,就

《告别失控:软件开发团队管理必读》一一1.1 程序员都做什么

1.1 程序员都做什么 首先,程序员的工作很有趣!Fred Brooks在软件工程的经典名著之一<人月神话>[6]中很好地总结了程序设计充满乐趣的原因. "第一,是纯粹的创造的愉悦--""第二,是做出对其他人有用的东西而带来的快乐--""第三,是设计组装谜题一样环环相扣的复杂部件,并观看着它们巧妙地运转而产生的吸引力--""第四,是持续学习的乐趣,这来源于任务的无重复特性--""第五,工作的对象是可以自由

存储极客谈“SPC-1负载分析与AFA寿命评估”

存储极客   这是一群存储偏执狂   为存储而生,跟存储死磕   各具独家秘笈   有观点,有碰撞,有干货   从2015年8月18起   做客存储极客栏目   与你分享存储里的那点事儿   企业存储界公认的SPC-1 Benchmark读写比例是多少.I/O大小如何.都是随机访问吗?以该测试成绩来估算闪存阵列的SSD寿命是否合理?有没有更好的办法?且听我们细细道来--   在<存储极客谈"如何绕开一堆复杂技术参数评估SSD寿命">一文中,一方面我们讨论了最直观的闪存写寿命

《告别失控:软件开发团队管理必读》导读

前言 告别失控:软件开发团队管理必读 软件开发常常被认为是难以管理的.进度安排和费用预算完全不靠谱的软件项目比比皆是.规范化的软件开发实践对这一状况有所改善,但也未能真正解决问题.我们软件开发行业已经积累了超过60年的技术经验,并已经投入了大量的时间,以及美元/日元/卢比/欧元来尝试把管理规范化,但为什么软件开发至今仍然如此难以管理呢? 本书用一个简单的观察结果来回答这个长期存在的问题:管理者首先必须学会管理程序员和软件团队的技巧.也就是说,必须学会了解员工-如何聘用他们,激励他们,进而领导他们

博客群发软件开发思路

问题描述 博客群发软件开发思路是怎么样的,大侠指点 解决方案 解决方案二:模拟提交,转到发布页面,自动找到文本框,填充解决方案三:详细点?解决方案四:用HttpWebRequest和HttpWebResponse来模拟人工操作,主要是需要写好post和get的相关操作.查找文本框可以用用正则表达式来查找服务器返回的页面的特定标签,然后把你自己要写的文本post回去,一切ok.如果有验证码之类的话,需要保存服务器返回的cookies.解决方案五:我前段时间写过一个19楼顶贴机解决方案六:1.模拟提

建立软件开发团队时要避免的7个问题

建立和维护一个高性能的软件开发团队是一个持续努力的过程.挑战范围包括从竞争激烈的市场中吸引优秀人才到提供有趣和富有挑战性的工作,以及组建团队结构和促进人员成长. 我们很幸运地工作在一些致力于提升交付质量和频率的软件开发团队,并且我们发现了一些非常的常见阻碍团队快速地推出优质软件的结构和做法: 1:"DevOps"孤岛 特别是随着一个团队的成长,或者可能是为了填补当前团队技能集中存在的差距,我们会被诱惑着在团队中或团队周围建立单独的功能以执行特定的工作岗位. 我们看到的最常见的表现是操作

《告别失控:软件开发团队管理必读》一一第2章 理解程序员

第2章 理解程序员 告别失控:软件开发团队管理必读从许多方面看,程序员之间的差异都非常大,只有很了解程序设计的人才能完全理解这一点.大多数公司的高层管理者对所有的程序员一视同仁,这是一个可怕的错误.微软公司的Bill Gates和Adobe Systems公司的John Warnock都没有犯这样的错误,因为他们俩本质上也都是程序员. 这种差异为什么很重要?也许不应该很重要,但事实上,这种差异真的很重要.历经多年的程序员管理工作之后,我们仍然惊叹于程序员之间的巨大差异,需要有区别地进行问题处理和

《R的极客理想——高级开发篇 A》一一1.1 R语言知识体系概览

1.1 R语言知识体系概览 问题 如何高效地学习R语言? 引言 最近遇到很多想转行做数据分析的程序员,他们刚开始学习R语言.很多人以为有了其他语言的编程背景,学习R语言就是一件很简单的事情,因而一味地追求速度,但不求甚解.有人说2周就能掌握R语言,但其实掌握的仅仅是R语言的语法,只能算是入门. R语言的知识体系并非语法这么简单,如果都不了解R的全貌,何谈学好R语言呢?本节将介绍R语言的知识体系结构,并告诉读者如何才能高效地学习R语言.1.1.1 R语言的知识体系结构 R语言是一门统计语言,主要用