第7章 结束语

最让一名技师感到自豪的,是他熟练掌握的技能。这也是简单的模仿不能一直让人满意的原因;技能必须不断发展。

——Richard Sennett,《The Craftsman》(技师)

当我们开始写这本书的时候,我们只是想给有所追求、渴望技术的学徒们提供一些建议。然而,工艺式的方法中虽然存在着机遇,同时也有一些局限。

17至18世纪,Antonio Stradivari的工场制作出来的小提琴和大提琴被公认为全世界最精良的。他们常常卖到数百万美元;过去的300年里,人们多次尝试复制它们。然而,正如《The Craftsman》([技师],第75页)一书所说:“像Antonio Stradivari和Guarneri del Gesù这样的师傅,他们的秘密实际上已随他们死去了。金山银山,加上无数的实验,都不能换回这些师傅的秘密。这些工场一定有某些特质阻止了知识的传递。”Stradivari晚年的时候,随着自己越来越老,他已经不能积极参与到学徒们的日常生活中了,他的工场制造出来的乐器,质量也在下降。由于他的工场是“以个体的非凡才能为中心”的,而Stradivari不能将自己的才能传递给学徒们,他的工场就随他而去了(《The Craftsman》,第76页)。

Stradivari的学徒包括他的两个儿子,他没有任何动机对他们隐瞒什么。据我们所知,他把自己所知的一切都教给了他们。或者更确切地讲,他把所有他认为很重要、认为学徒们必须知晓的东西都教给了他们。他的失败,恰恰是因为那一点一滴的难以言传的知识,他甚至从没意识到那也是他技能的一部分。工场的衰落源于所有那些在那时显得并不重要,因而也没有记录下来的各种微妙联系,还有与学徒一起完成微不足道的任务时他所运用的难以言传的知识。

Stradivari没有在足够广泛的人群中分享自己的知识,他忘记把一些知识传授给客户,通过客户的要求让学生达到跟他的一样的标准。最终,他倾其一生所获得的经验也随之而去了。然而,我们应该历史地看待这样的失败。对Stradivari的学生们,音乐家们仍然说他们的工作“很棒,但只是很棒而已”(《The Craftsman》,第77页)。从技艺精湛的Stradivari身上,我们应该吸取的教训是:“大师们应该不厌其烦地表达自己,把存在于默然中的关键线索和动作整理出来”;我们还应该促使他们把那些难以言传的东西说明白。若没有那种热情到爱出风头,喜欢去促动别人的学徒,软件工艺仍将局限于一小撮才华横溢的开发者周围所形成的孤立品质中。

之所以说软件开发是一种工艺,正是因为我们现在对它理解得还不够深,不足以使之成为像科学或工程那样的系统化学科。虽然像软件工程学院(Software Engineering Institute)和敏捷联盟(Agile Alliance)这样的组织付出了大量的努力,我们所处的依然是一个个体技能对项目成功起最关键性决定作用的领域。我们使用“技能”一词,意思不只是你懂得多少计算机科学知识,你采用的开发过程多么高效,或者你有多少经验。我们指的是为交付可以工作的软件,你所需要的所有因素的总和。它包括但不限于你从本书的模式中学到的所有东西。

技能之所以如此重要,是因为我们对自己所做事情的了解还不足以将它写成一种可供别人直接运用并得到同样结果的格式。我们的客户希望软件项目能像科学实验一样可以重复。他们觉得最好能随便雇一支开发者团队就可以构建他们的系统,然后怡然自乐地以为只要团队具备最低的能力水平,他们就能得到自己想要的结果。事实情况是:客户不得不勉强组织起一支团队并期望他们能够胜任。他们希望,如果曾经有一支人数和经验水平都差不多的团队在过去能完成一件差不多的事情,那么今天的团队或许也能完成。不幸的是,软件开发中的技能水平范围很广,在我们当中,最优秀的那些人可以稀松平常地做出大多数人认为不可能的事情。

此外,多数程序员都认为自己的水平超出平均。悲惨的事实是:由于下图所示的不规则的技能水平分布,大多数程序员实际上是低于平均水平的。这听起来有点反直觉,但你可以设想这样一个比方:现在我们两个人,Dave和Ade坐在桌子边上,然后Bill Gates过来加入我们,突然之间坐在桌子旁的“大多数”人的薪水都低于平均水平了。也就是说,在编程技能曲线上处于极远端的那些人倾斜了整个分布。把这一事实跟我们在“建立馈路”模式中讨论过的达克效应(Dunning-Kruger effect,也叫“无意识的无能”效应)结合起来,你就会明白为什么许多软件项目都以失败而告终。一边是我们所具备的技能水平,一边是解决当前问题所需要的技能水平,这两者经常不匹配。我们所能做的就是尽量改善开发方法。但任何过程,不管它多么敏捷多么精益,都无法告诉你你正在做的事是个NP完全问题,或者违反了CAP猜想。这些对你来说可能是比较晦涩的概念,同样,也会有程序员对正则表达式、HTTP或者UNIX感到晦涩。如果一个项目需要这些知识和技能才能成功,那么你就别无选择,必须具备它们。

第7章 结束语 - 图1

当我们说一件事情是工艺,我们所要表达的一种意思是:它是一套高度重视技能的训练和传统。这包括学会、发扬并最终传承一种技能。我们相信,真正的精通闪耀在你传递自己的高超技能时对别人所形成的影响中。

Atul Gawande博士在他的《Better:A Surgeon's Notes on Performance》(更好:一位外科医师的性能外科笔记)一书中讲述了内科医师Ignac Semmelweis的故事(《Better》,第15页)。1847年,Semmelweis大夫研究发现:“由于没有坚持洗手,或者洗得不够干净,在许多问题上该承担责任的是医生自己。”他把这归结为医院里导致产妇死亡的首要原因。他提出了一些简单的做法,比如要求医生在为不同的病人看病之间使用氯溶液洗手,就把死亡率从20%降到1%。然而,在获得这一显著结果的过程中,他疏远或得罪了所有的同事。最后情形恶化到同事们仅仅为了反对他而故意不洗手的地步。Semmelweis未能恰当地解释自己的观点或者说服别人,最终使他丢失自己的工作,更夺走了许多人的生命,直到20年后Joseph Lister发现了同样的结论。Gawande说得没错:“Semmelweis是个天才,同时也是个疯子,而这使他成为一个失败的天才。”(《Better》,第17页)

同样,本书中的许多模式和思想都会招致抵触和反对。有一部分原因是总是有人可以从现状的维持中获得好处,这些人担心,如果现状得以改善,他们会失去一些东西。然而,我们需要从Semmelweis的失败中吸取教训。我们可以去清晰地解释自己的想法,说服人们试用我们的方法。我们还可以致力于营造一种欢迎积极变革的社区或组织,并寻找渴望精通技术的人们。

在软件开发中,我们并不确定哪些东西构成了精通的技艺,但我们知道哪些东西不属于其中的一部分。天赋、运气、财富、名声,这些并不能使你成为师傅。这些不是工艺的要素。涵盖软件开发方方面面的技能,以及传承这种技能并将技能训练推向前进的能力才是工艺的核心。

有一点可用于鉴别师傅,就是他们的学生最终都会在志气和成就方面超越他们。师傅们明白:绝对顺从其权威是危险的,因为“对卓越的追求会引起组织寿命方面的问题,就像在Stradivari的工场里那样。完成高质量工作的经验包含在师傅自己难以言传的知识中,这意味着他的卓越品质不能传给下一代”(《The Craftsman》,第243页)。作为学徒,你应该力争比老师更好。而如果他们是好的老师,也应努力帮你达成这一目标。

师傅不是一种自己称呼自己的身份,因为人类的虚荣会限制人们自我评估的准确性。如果有人声称自己是师傅,那就让她证明一下。她指的是自己的工作吗?对一个技能水平比你高的人,评价其工作非常困难。你不能明白,她做的那些看来很容易的事情为什么实际那么困难。顶多,你可以说这个人技能水平比你高。但这并不足以证明她技艺精通。一个人走在了你的前面并不能证明她是个师傅。

她指的是自己的资质吗?但并没有一种“软件技师师傅”的资质证书。在达到技艺精通的道路上,一位候选者所能宣称的,顶多是她的同伴和那些她相信已经是师傅的人们都认为她迈过了这一步。这显然是个递归定义。只有那些已经是师傅的人可以说你是师傅,而在自己成为师傅之前,你又无法判断那些说你是师傅的人是否已经优秀到足以授予这种荣誉。不幸的是,没有其他方法能让一种新的工艺不断发展。所有的工艺都是从模糊的定义和混沌的标准开始,磕磕碰碰地来到这个世界上的。我们必须忍受这些,直到我们建立起可以清楚地证明从业者技能水平的社区和知识体系。

在那一天到来之前,发现精通技艺的最好方法只能是考察一个人和她的学徒们的工作质量。工作和学徒们的生活强调了技能方面,而不是师傅的天赋和运气。仅仅是天才并不能成就精通,但如果一个人可以培训他人,使之达到或超越自己的才华,那就是一种证据,证明此人有师傅的潜力。

本书的两位作者都不是师傅。顶多,我们都是熟练工,来分享前进道路上学到的东西。如果要给自己打个分,如果满分是10分,我们都想给自己打9分,但有时我们会遇到一些人,使我们一下子觉得满分应该扩充到100分。有许多从业者都是我们非常尊重的,然而软件开发工艺领域仍然缺少师傅。这不是问题。软件是一门新的工艺——人们编写软件顶多有70年历史。所以,我们不应期望已经有了师傅级的软件工匠。

我们怎么能如此确定真正的师傅不存在呢?我们不能。即使我们还没发现师傅,他们也可能已经存在。缺少证据不能成为证明。[1]然而,我们期望软件工艺师傅的存在可以使整个软件产业引起一些波动。这不仅因为他们的产品和工具更加精良,也因为他们的学生会更加优秀。从某个源头开始,将会涌现出一大批优秀的学徒和熟练工。这些学生将继续向外延伸;他们“比其他人更加快速地传道、学习和改变”的能力将拉开他们与我们这些人的距离。根据Gawande的“正向偏差”理论,这些师傅的工场会让人奇怪,但其成果将是无可否认的优越。仅仅复制他们的实践方法,你可以获得显著的提高,但要想跟上他们持续不断的进步,唯一的方法就是做这些师傅的学徒。

如果我们在本书一开始就告诉你大师并不存在,那样你就灰心了。现在你已经看到我们在短短几年中搜集出来的模式,也看到我们的技艺中有多少是你可以学习的,我们希望你把它们看作是一次机会,甚至一次挑战。我们希望自己的工作可以启发一些学徒去争论:现在……还没有大师。

[1]Absence of Evidence Is Evidence of Absence(缺少证据就是不在场的证明):http://www.overcomingbias.com/2007/08/absence-of-evid.html.