解决方法
让周围多些水平比你更高的开发者。找一个更强大的团队,在那里让自己成为最弱的成员并拥有成长的空间。
“只求最差”是这一模式语言中的种子模式。它是从Pat Metheny提供给年轻音乐家们的一些建议中提出的。Pat Metheny说:“在任何一支乐队中,都要做最差的。”[1]Pat的建议触动了Dave的一根心弦,成为他开始撰写本书的原因之一。
Dave找到一个更好的团队
我的第一份编程工作是在一家.com的创业公司中度过的。工作五个月之后,就迎来了互联网炸弹(dotbomb)泡沫破裂。烟消云散之后,我降落在一家非营利组织的IT部门。那是一个极好的避风港湾,我在那里平安度过了几年的行业低迷期,但它与我前一家雇主比起来,开发的节奏实在太慢了。两年后我已经学到了很多东西,但工作没有任何挑战,也看不到组织的状况有任何改善的希望。充当团队的技术架构师起初为我提供了极好的学习体验,但我觉得自己充当架构师的角色是荒唐的,这促使我开始到别处寻找工作。我找工作的唯一目的就是提高自己的学习速度,就我所知,能达到这一目标的最好方法就是让自己周围有一群杰出的开发者。非常幸运,一年后我加入了一支团队,里面有多名世界一流的开发者。那是一次不可思议的挑战,但也是一次宝贵的机会。
——Dave Hoover
处在一个强大的团队中能使你“感觉”自己工作得更好。团队的其他成员经常阻止你犯错误,并帮你平稳地从错误中恢复正确的结果,以至于虽然学到的东西没有自己想象的那么多,你却意识不到这一点。只有在独自工作的时候,你才会发现团队在多大程度上提高了你的生产率,并意识到自己学到的东西有多丰富。对团队中那些水平最低的人来说,这也使得“且行且思”和构造“质脆玩具”特别重要。这两种模式都提供了一些机会,让你可以在团队环境中后退一步,与更有经验的队友“密切交往”,在此过程中看看自己养成了哪些习惯、学习了哪些技术和知识。
前面的图说明:作为团队中最弱的一员,你应该比其他人更用功。这是因为你的目标不是保持“最弱”,而是从最后面开始一路赶上去。要做到这点,你需要不断找到改善的方法,不断模仿更强的开发者,直到你跟团队其他成员处在同一个水平上。没有这种集中精力向团队学习的意识,你会面临多种风险。
首先,你面临拖累团队速度的风险。其次,由于好的团队不会(长期)容忍某个成员只是来做一回过客,如果你远远落后,以至无法赶上,或者看起来无法足够快地赶上,那你还面临炒鱿鱼的风险。加入强大团队还有另一种副作用:最终你会对你自己以及你的技能水平产生不好的感觉,除非你积极地磨炼技能。最好的情况下,这会促使你进步。但跟所有“要么游起来,要么沉下去”的策略一样,当失败时你会发现自己已经沉溺。这也解释了为什么“建立馈路”从而遇到麻烦时让自己知道非常重要。这种反馈能告诉你团队是否已超出你太远,或者团队是否对努力一路追赶的人们并不友好。
跟“坚守阵地”一样,“只求最差”与鼓励人们尽快获取更高级职位的常规文化相悖。但作为学徒,你应更重视学习技能的机会,而不是扩大并维持自己的权威。有时,这意味着虽然你正领导着一个团队(参见“深水区域”),但作为学徒,你通常更应期望被别人领导。
故意作为最差的一员加入一支团队,这有自私的一面。为抵消这一缺点,可以用“打扫地面”和“具体技能”模式来补充“只求最差”。“打扫地面”意味着:为直接给项目增添价值,你特意去做些打下手的任务。开发“具体技能”会增加你对软件开发过程的贡献,而且这是学徒这一角色的根本。没有这类贡献,该模式会导致强大团队被严重削弱——正如Jamie Zawinski在写给Mozilla项目的那封不怎么光彩的公开辞职信[2]中所指出的。最终,你对团队快速增长的贡献会成为这些强大团队愿意冒险拉你入伙的理由。
Jake Scruggs在谈及他在Object Mentor的夏令实习期时说得很好:
毫无疑问,在Object Mentor工作,最酷的事情就是只需探一下身子就可以去请教David、Micah、Paul、James或者……看,坐在我旁边的每个人对编程都持有高见,跟他们的卓越才华一样酷的是:与优秀的程序员一起工作是一种更好的学习方法。[3]
除了在“找人指导”方面给你提供帮助,与优秀的开发者合作还能帮你维持更加准确的自我评估。然而,对那些准备成为熟练工的更有经验的开发者来说,这一模式并不适当。在那一阶段,你应尝试去指导新手,把别人曾经给你的机会再给予别人。
Brian的选择
加入Obtiva把我放回了食物链的最底端。现在,我是个绿色的“软件学徒”,在我领导一个团队之前,这会持续相当长的一段时间。我将从事学习,而不是带队。我被降级了。
为什么会有人选择这种事情?
首先,到一个杰出开发者的团队中做一名最弱的队员,这种机会是环境、设备和金钱所无法取代的。过来之人知道如何避免前路上的陷阱,在这些人身边学习的机会是无可比拟的。跟优秀的开发者结对,这种机会更是非常宝贵的。如果你对编程还很陌生,还不曾有过结对的机会,那你需要去寻求这样的体验机会。[4]
[1]Chris Morris的博客,"Be The Worst"(只求最差),参见:http://clabs.org/blogki/index.cgi?page=/TheArts/BeTheWorst。
[2]Resignation and postmortem(辞职信和事后检讨):http://www.jwz.org/gruntle/nomo.html。
[3]Jake Scruggs,"My Apprenticeship at Object Mentor"(我在Object Mentor的实习期),参见:http://www.jikity.com/Blah/apprentice.htm。
[4]Brian Tatnall,"New beginnings with Obtiva"(在Obtiva的新开端),参见:http://syntatic.wordpress.com/2007/05/18/new-beginnings-with-obtiva/。