软件公司

前一段时间,程序员问答网站 Stackoverflow 上有人提问:“我们都知道编程比做甘特图(项目进度管理图表)要更难,而且程序员加班也更多,那为什么 IT 公司里 PM 和 BA 的工资比程序员要高?” 英国的 Vlad Gudim 给出了一个很有意思的答复。

这个问题的答案取决于你工作在一个什么样的软件公司和环境。

简单回答,原因是我们生活在一个按照职位在公司的层次和等级发工资的社会。但是这个答案并不完整,因为我们没有回答为什么 PM 和 BA 职位的等级在很多软件公司里比程序员要高,也没有回答为什么很多软件公司要选择这种等级制度的管理方式;这两个问题其实才是最值得探讨的。

概括地来讲,这个世界上有两种做软件的公司:一种类似于工厂,而另一种类似电影摄制组。

工厂型的软件公司起源于 MIT Sloan 管理学家 Douglas McGregor 提出的激励理论 Theory X :普通员工是懒惰的,而且需要不断的监督和管理;员工来工作只是为了拿工资;经理的能力永远要比手下的员工强。在这种管理理念的影响下,我们会认为团队的领头可以代表,甚至于替代他的整个团队,而团队成员只是完全可以互换的人力资源,他们的唯一价值就是帮助领队完成任务。因此,这类公司都采用等级制度的管理方式,工作的分配也很单一。

软件工厂的管理层认为软件是可以通过一个很明确的流程生产出来的,而这个流程需要 PM 的监督和 BA 写出来的软件 specs。生产过程本身只要有足够合格的但是可以随时替换的程序员和 QA 就搞定了。当然项目的预算和最后发布的产品也都是 PM 和 BA 说了算。

软件工厂的经理人是很容易识别出来的,因为他们在形容软件制作时会经常提到“资源”(指的是他们团队的成员)、“流程”、“运营效率”、“质量监控”等工厂生产业的术语。

而另一种软件公司类似于电影摄制组,他们的管理理念来源于 McGregor 提出的 Theory Y :他们认为员工是自觉而聪明的,也很喜欢自己的工作,对待工作像小孩子对待玩耍一样。这类公司认识到个体工作者(individual contributor)的能力有可能远远大于管理人员。当经理不可以代表和替代所有手下人的时候,等级制度的管理方式就不太好使了。人们需要在一种更扁平化的团队结构下互相合作,工作的分配也更加多样化,每个人都需要具备多种能力。

摄制组类软件公司的“导演”会意识到如果想做出一个很好的产品,他需要很牛的人加入他的团队,而他需要给这些人一个可以尽情发挥与合作的环境。导演这个角色给予他人灵感,而且掌控大方向,而不是单纯的管理者。团队里的每一个人都很重要,因为最后的产品是团队上所有人性格和思维的体现,而不是某某 BA 写出来的软件 specs。

在工资方面,软件工厂会认为在等级化组织顶端的 PM 和 BA 是最有价值的,所以自然会给他们最多钱。团队的其它成员只要差不多,会把 specs 变成代码就可以了。PM 和 BA 会勾心斗角全力维护他们在顶端的位置,不与团队成员分享很多有关项目的信息。没有这些信息,团队成员无法自己做很多设计上的决定,所以只能听从命令,按照 specs 来写代码。这种情况会构成一种恶性循环,软件工厂的程序员会真的变成像工厂里的流水线工人一样,只会做技术上复杂,但是实际上重复性很强的工作。

相比之下,摄制组类软件公司会更加平等;所有的团队成员都可以参考有关项目的所有信息,并且做出自己的判断和设计决定。谁有能力谁就可以来领头项目的某一部分,而工资的分配是依据这个人给团队和产品带来了多少价值。在这种公司里面,PM 往往不负责产品设计和创意,而仅负责一些行政和与外界打交道的事情。BA 的职位可能根本就没有,而是所有团队成员都承担一些软件 spec 的编写。

当然,你应该知道很多大公司的内部 IT 部门和外包类软件公司都是像我所形容的软件工厂。在这些公司里,PM 和 BA 的工资比程序员要高,而且程序员很难改变管理层做出的设计决策。

成功的软件公司往往倾向于电影摄制组型,因为只有这样,他们才可以吸引最优秀的人才来做出最优秀的软件。

在软件公司工作的读者们,那你的公司是属于哪一类呢?

VIA: programmers.stackexchange.com