解决方法
主动去完成简单无趣却又必须完成的任务。这是一种可以尽早为团队的成功付出努力的方法,因为它表明你能完成高质量的工作,即使这种工作看起来无关紧要。当然,结果可能证明项目中看似单调无趣的部分实际极其重要,所以在任何项目中敷衍这一部分的质量都会导致日后的麻烦。
Paul真的扫地去了
我曾经在一个正式的软件学徒环境中接受培训。在我17岁时Object Mentor就雇用了我,大学时每个暑假和寒假我都回到那里。学徒期开始时,我并不知道如何编写软件。我写了一些代码来创建简单的程序和脚本,纯粹为了好玩。正式做软件学徒时,我几乎找不出任何可以为公司的业务带来价值的地方。我不会写软件,当然也不会教其他人写软件。
那时,Object Mentor雇用了许多成功的极限编程(eXtreme Programming,XP)领域的领军人物来讲授XP课程。作为迷恋明星的年轻学徒,我被任命去编制他们所设计的完美的结对编程表格。此外,我还要把电脑集中在一起,为我们的练习安装所需的软件,并打扫房间。这些任务使我很自信地成为团队的一部分、公司的一部分。在竭尽全力学习编码的过程中,我还能通过一些具体的才干和任务为团队出力,而且并不需要很高的技能。
随着学徒期的进展,慢慢地我可以承担技术上更有挑战性的任务了,但常常还是那些分派给初级开发者做的事情。一些像搬动服务器,设置备份系统,还有更新网站内容这样的工作。这些任务能帮我获得一些小胜利,那时我还很难从编写代码中获得这种胜利。
充当传统的学徒角色也培养我了谦虚和尊重高级技师的习惯。我记得有一次Bob Martin大叔来到我们的房间,看到垃圾桶已经溢出了,于是换了垃圾袋。我的指导者批评了我,恰如其分指出:倒垃圾并不是师傅的工作。虔敬是我需要学习的重要一课。
——Paul Pagel,电子邮件
和Paul不一样,大多数学徒不需要真的去扫地。但是,你愿意主动承担的任务对团队的健康成长同样是很重要的。
这类任务包括维护构建系统,产品支持,响应维护需求,bug修正,代码复查,消除技术债务(technical debt),搭建项目wiki,更新文档,为其他人的想法充当传声筒,等等。通常,你会关注风险更低的系统边缘部分,而不是常常带有大量依赖性和极高复杂度的核心。Jean Lave和Etienne Wenger观察了不同行业中的学徒,发现“在工作流程中,新手的任务往往被置于分支的末尾,而不是一连串工作片段的中间”(《Situated Learning》(情景化学习),第110页)。这类边缘任务会使团队受益,对作为学徒的你也有好处,因为这些杂务在学校的课程中常常被略过了,做一做能填补知识中的漏洞。当你成为熟练工时,这种体验还是能带来帮助,因为很多带你的师傅都明白:有个人去做单调的工作是多么重要。毕竟,如果没人打扫地面,那么富有魅力的工作也无法做出来,因为团队已深陷脏乱之中。
当然,花费了大量时间和金钱去接受计算机科学教育之后,你可能难以接受“打扫地面”的工作。理论上,你已经为自己应得的东西付出过了,你曾频繁地通宵调试,也已经忍受过来自教授的无数奴仆任务。不幸的是,在工作岗位上,你受到的教育并不如你认为的那么有价值。诚然,很多组织招人时把计算机科学的学历作为高优先级来考虑,但被人雇用和加入团队是两码事。一旦你入了行,那些教育背景只能抬高人们对你的期望,期望你第一天就能交付更好的结果(但愿那些教育背景能为你的第一天多准备一些东西吧!)。如果你是自学成才,在之前的项目上已经付出过,情况也是一样。不论你来自哪里,在加入一个新项目时都是从头开始。你应该借此机会发出你想为团队效力的信息,即使那意味着承担一些不怎么诱人的工作。
运用这一模式会导致一些负面结果。其中之一是你最终成了团队中的地鼠,被要求永远去做其他人都不愿做的奴仆任务。而且,由于你选择的工作单调乏味,别人不太会认为你已经跨越了自己的边界,这样你就会面对另一种风险:无法将前期的成功转变成请求更有挑战性任务的理由。另一种负面结果是:你发现自己害怕去做除“打扫地面”之外的任何事情。还有一种风险,如果只做琐碎的任务而没有更高的前后一致性,你会无法理解更大的图景。如果你发现自己处在这样的情形中,那就努力去“培养激情”、“释放激情”,为自己打打广告,并寻找各种机会证明自己能做更高级的工作吧。