《代码之道》

下载本书

添加书签

代码之道- 第8部分


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
是相似的。但更主要还是因为跟人相比,电脑是可预测的、死板的。哈,当然,电脑能够给你带来惊喜和快乐,但那个程度还达不到人给你带来的。我仍然热爱编程,不过我发现跟人打交道要更加有益得多。
  ——Eric
  

小心你希望得到的东西
2003年2月1日:“不只是数字——生产力”
  只有我是这样吗,还是外星人接管了我们所有管理者的大脑,让他们深信,数字能够精确地代表一个产品的质量或者一个开发者的价值?我们到底还要忍受多少令人作呕的数据收集、分析和预测,才能让那些被误导的管理者得到足够的满足,以使他们不再来打扰我们、让我们能够做自己的工作?如果我们能够集中精力在编码上面的话,我们其实能够完成比现在多得多的工作,难道只有我一个人内心深处有这种感觉吗?
  不过,目前的趋势是,对我们创作的东西及其创作方式做越来越多的“度量”,并且使用这些度量去判断我们产品的优点——还有人的优点。似乎解放我们的大脑是有益的。你是否意识到,有多少自作聪明的管理者靠“编码成功度量”给团队成员评分,然后很轻易地就对他们判断最正确的人放马后炮?
  作者注:《Interface》的编辑要求我写一篇关于度量的文章。我不认为这就是当初他们脑子里想要的东西,但最后期限摆在那里,我也交出了他们规定字数内的文字。
  《Interface》上的文章是“度量开发者的生产力”,它很好地在用于衡量开发者的各种度量,与极度使用度量的弊病之间做出了平衡。这些弊病中最主要的是,度量很容易被当作“游戏”。管理者基本上总会得到他们所要求的东西。如果写更多行的代码能够让度量结果更好,那他们得到的代码行会比较多。如果更少的代码签入能够让度量结果更好,那他们看到的代码签入会比较少。并不是因为代码变好了或者开发者变好了,而只是因为那样做可以使度量的结果更好看。
  只要人们相信他们被用数字来判断,他们就会采取任何必要的措施去确保他们的数字很好看,而不会去管那个度量系统的初衷。毕竟,如果抛开你的方式去做正确的事,结果却得不到你的肯定,他们又何必呢?
  那是不是所有的度量都没用呢?不是,只要度量用于跟踪团队和产品的进度,以便达到明确而公认的目标(比如绩效、回归率、发现和修复率、解决客户问题所用的天数等),那它们就很有价值。度量有助于推动团队前进,并且赋予成就客观的内涵。然而,它们绝对不可以代替出色的判断。
  作者注:我后来对建设性的度量有了更多的认识。你应该用它们度量令人想要的结果——在理想情况下,应该是基于团队的结果。结果关注在“什么”,而不是“如何”,这样就给大家的改进留出了空间。团队度量驱动的是共享的目标,而不是带有竞争性的病态。“代码行数”不大可能是令人想要的结果,而“从开始到结束,使用更少的时间开发出高质量的功能”才是令人想要的结果,而且这个结果取决于整个团队,而不是个人。
  不要试图只在个体开发者的生产力上给一个数字,管理者更应该回答这样的问题,“一个优秀的开发者是由什么组成的呢?”如果答案跟指定一个数字那么简单,可能很久以前我们就都被定理证明的机器取代了。
  

扮演一个角色
度量开发者的价值的关键是,多想一想开发团队,而不是个人。不同的人给团队带来不同的力量。在判定各个开发者的贡献时,要考虑到他们在团队里扮演的角色。最好的开发者往往不是那些代码写得最好或最快的人。
  你不希望整个团队都是主管或都是代码工人,也不希望整个团队都是架构师。每个团队都需要有一个才能上的平衡,这样才会有最好的效力和生产力。
  

卓越开发者的素质
不过,在“度量开发者”方面还有很多的边缘问题。下面,我将列出我认为的、卓越开发者具备的一些明显特征:
  ? 他们知道他们正在做什么。当你问卓越开发者,为什么那里有特定的某行代码或某个变量,他们都能说出理由。有时候他们给的理由不那么美妙(“那行代码是我从其他地方抄过来的,它使用了那个结构”),但他们的理由永远不会是,“哈,我不知道,它看起来能够工作。”
  ? 他们不相信魔法。这是上一条的必然结果,既然他们知道自己正在做什么。对于黑盒的应用程序编程接口、组件或算法,卓越开发者会感觉不舒服。他们想要知道那些代码是怎样工作的,以免被错误的假设或“有漏洞的”抽象伤害到(比如一个字符串类,它在实现简单的字符串连接时,隐藏了内存分配故障或所需的O(n2)运行时间)。
  作者注:赏你一个我最喜欢的“Joel on Software”栏目:“The Law of Leaky Abstractions”。请访问。
  译者注:有一种衡量算法复杂度的方法叫大O表示法,它把一个算法的运行时间用输入量n的函数来表示,典型如O(1)、O(log(n))、O(n)、O(n*log(n))、O(n2)等。O(n2)表示某个算法的运行时间随着元素个数的增加呈平方增长,显然其效率比较差。
  ? 他们了解客户和业务。我在第7章“职业生涯历险”的“生活是不公平的”栏目中详细讨论了这一点。卓越开发者知道事情的实质,他们能够分出轻重缓急并且做出恰当的权衡。
  ? 他们把客户和团队放在优先于自己的位置。卓越开发者不会亵渎任何任务,他们认为没有哪个客户是不重要的。
  ? 他们有不妥协的精神和道德规范。尽管个人喜好可能会改变,卓越开发者会一如既往地关注他们如何完成工作,以及怎样去跟其他人互动。不管是他们选择的算法还是他们写的e…mail,他们都会对自己高标准、严要求,始终不会动摇他们的核心价值观。
  ? 他们有杰出的人际沟通技能。尽管没有很多的开发者能够主持好游戏或演出,卓越开发者能够很好地跟别人相处,尊重别人,并且跟人进行清晰、有效、恰当的沟通。他们不选择欺凌或胁迫(尽管他们可以那么做),而选择合作。(关于这一点,请同时参考第8章“自我完善”的“要么听我的,要么走人”栏目。)
  ? 他们有一个宽广的支持网络。卓越开发者能够认识到别人身上的卓越之处,并且他们相互欣赏。他们能快速发展起一个相互支持的联系网络,使得他们比单一个体要有效力得多。
  关于卓越开发者的概括性特征,我还能列出其他更多的方面:关注质量、指导别人、表现出非凡的设计技能等等。
  这些形容卓越工程师的特征中,没有哪个是可以被很容易地度量的。
  

你要做法官
在迫不得已的时候,作为管理者的你必须评判你的团队,你要尽可能地做到公平,并且考虑到他们每一个人所扮演的角色。从其他团队拿些例子过来参考,会有助于你观察你自己团队的开发者;这也是为什么说标度会议如此有价值、有启发性、并且承受它的痛苦也值得的原因了。
  但是请记住,没有哪个标度或等级可以代表一个人。人实在是太复杂了,即使是最客观的度量也会被所用的透视法所扭曲。作为高等动物的人类,我们要去了解和尊重,这是完全释放人类潜能的关键!
  2004年9月1日:“面试流程之外”
  招聘像一个巨大的吸尘器,它把我所有的时间都吸到了校园。但在快速聘用到一位高质量的候选人之后,我就会觉得曾经花费的每一分钟都是值得的。所幸的是,在招聘过程的大部分时间内,我不依赖于任何人。这让大量候选人向我“滚滚涌来”。不过到了面试流程,情况就不一样了。
  嘿,如果我能够跳过面试流程的话,我真想那么做!再没有时间安排的麻烦,没有为了一个时间空档而延误几个星期,没有可怕的面试问题,没有失踪的反馈,没有“两可”的聘用,没有含糊杜撰的垃圾标准,没有重复思想的负担,没有最后时刻的放弃。
  但是,你不能跳过面试流程——绝对不允许。如果比尔?盖茨想要到我的团队来任职,我也将让他经历面试流程。我不是想冒犯他!只是想让他走过这个流程,确信他是否能够成功地融入到团队中去——如果他得不到聘用,那我也会振奋起精神来。
  

抱怨得不到帮助
我说过,在面试流程之前我不依赖于任何人。有一些急着招人的管理者对此提出了质疑。他们可能会说,“那我的招聘专员呢?招聘专员没给我留时间。他已经几个月没有给我发送任何简历了。招聘专员是我的瓶颈。”嘿,如果我跟你一起竞争招聘的话,我会非常高兴的。你这个懒惰、脑子不健全的傻瓜,我会悄悄地抢走你所有优秀的候选人。
  招聘专员是你的合作伙伴、朋友和资源——不是你的佣人。招聘专员要去补给的职位太多太多了。除非你的副总裁认为你空缺的职位很危急,招聘专员是不可能做下所有你托付过来的工作的。因此,你自己要克服一下,主动到招聘专员的办公室去,然后翻看他们手上所有的简历。要不然,你就等我把我所有的空缺职位都补上之后再说吧。
  作者注:如今,所有的简历当然都是在线的了。(那时真的是相当地落后!)不过,有一点还是对的,那就是如果你不去找到你自己的候选人,那你的候选人就会找到其他的工作。
   。 想看书来

90%是准备
接下去,我们回到面试流程这个话题上。(关于招聘的总体看法,我打算在未来的某个栏目中再讨论。)有如此多的、想要招人的管理者误解了面试流程。不过,我马上就会为你拨乱反正。一个成功的面试流程其中90%是准备,剩下的取决于你的AA面试官。准备工作分成
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架