第1章 程序员为何难以管理
告别失控:软件开发团队管理必读
程序设计作为一种严肃的职业已经存在60多年了。在美国,从事程序设计工作的程序员数以百万计,而全球这个数字更大。这些数字还不包括人数众多的学生与编程爱好者,他们非常认真地编写程序,但并不以此为谋生之业。
尽管历史悠久,从业人数众多,但“软件工程师”却因难于管理而闻名。出现这种现象有以下几点原因。
第一,作为一种严肃的职业,程序设计不同于电气、土木工程等相关的工程职业。从 1968 年[1]开始,人们将程序设计这门艺术称作软件工程(software engineering)。但是,与新建土木、电子工程这样的实践相比,从零开始编写新程序更像写小说。新程序的起始往往类似于一张白纸,而传统工程项目则通常是对各种组件库,按照严格的合格性准则进行组装。本书将使用程序设计(programming)一词来称呼“软件工程”,因为相对于严格定义的工程实践来说,程序设计更多的是一门技艺。
从零开始编写新程序更像写小说。
第二,任何人都可以成为程序员。不需要接受正式教育,也没有必需的证书标准或考试[2]。只需要一份程序员的工作即可。[3]
第三,受前两个原因的部分影响,尽管人们做过多种尝试来规范软件工程的流程(如CMMI [4] 1~5级),但这些尝试的影响其实很小。多年来,由大量程序员继续开发的许多软件并不遵循这样的规范框架。而且即便遵循时,也只是对流程有所改进,却无法将程序设计转变为一个纯粹的工程实践。此外,规范化的框架只解决了编写软件的流程问题,但没有涉及程序员管理的问题。遵循流程对管理程序员的问题只能起到最低限度的帮助。程序设计经理们仍然只能依靠自己的方法工具来对下属程序员进行管理。
尽管有很多书籍、文章和网站涉及软件工程与软件开发流程管理,但关于如何有效管理程序员的例子却十分稀少。任何一个棒球队经理都会告诉你,棒球队技术细节的管理比球员个性的管理要容易得多,程序员的管理也是类似的情况。
从计算机出现的早期开始,程序员管理就是一个极具挑战的难题,如下面这段由第二次世界大战(WWII)期间成为世界上第一批程序员的Grace Hopper写于1961年的文字所述:
程序员是一个古怪的群体……他们崛起的速度很快,很快就形成了独立的职业,并且过早地感染了不愿做出改变的抗性。我曾经听说有些程序员因为客户不愿意修改自己的商业系统而斥责客户,而有时走进我的办公室说“但我一直是这么做的”的也正是这些人。出于这个原因,我在办公室悬挂了一个逆时针走动的时钟[5]。
管理程序员的第一步是更好地了解他们。是什么吸引着数以百万计的人投身于“计算机程序设计艺术”呢?答案有时非常简单:它是一份收入优渥而且可以整天待在办公室里上班的工作。然而很多程序员会告诉你,现实中的答案通常没有这么简单。给出那种简单回答的人,通常最终没有坚持程序员这个职业。
事实上,只有特定类型的人才能成为程序员,而只有非常特别的一类人才能成为杰出的程序员。要想知道怎么才能成为杰出的程序员,首先需要了解程序员都做什么。