失衡的中国软件职业结构(转载)[精华]


IT168发布的《中国IT应用技术蓝皮书2006-2007》,其中关于软件人才的部分,以独特的视角,从职业结构方面进行了统计分析。笔者尝试按照传统软件工程理论的思想去解读这些数据,结果发现中国软件行业的职业结构是严重失衡的。

  1. 独特的视角:职业结构

  近日IT168发布了《中国IT应用技术蓝皮书2006-2007》(以下简称蓝皮书),全书凡二十多万字,计两百六十余页,论及人才、应用以及过程等软件开发行业的方方面面,又囊括了Java、.net、数据库、企业应用和中间件等主流软件开发技术,更兼附录了十几篇优秀论文,内容不可谓不详实。热心的编辑给我发来文档链接,赶紧下载,拜读之后,获益匪浅,感慨良多。不敢藏拙,试与读者分享之。

  蓝皮书的第二章《中国IT技术开发人才现状分析》是关于软件人才的,其中第3节《职业结构》中,将接受调查的开发人员按职责进行了分类,并给出了各个职业类型所占的比例。鉴于统计数据来自近万份样本,而且接受调查的都是真正的软件从业人员,因此,可信度颇高。说实话,笔者在IT行业滥竽充数十多年,虽然时时关注中国软件行业的发展,却未尝留意过开发人员的职业分类,蓝皮书的这一章另辟蹊径,不落俗套,读来颇有新意,给了关心中国软件行业的人们,一个不同于官样文章的视角。

  中国软件行业风风雨雨二十年,笔者有幸经历了这二十年中的大部分时光,目睹了软件行业的几番起落兴衰,其中酸甜苦辣,不能尽言。那些人,那些事,有如过眼云烟,业已随风飘去,唯有存诸于中国软件行业的种种弊端,始终耿耿于心,无法释怀。从后面的分析可以看出,蓝皮书给出的这个独特视角,将中国软件行业的某些弊端暴露无遗。

  开发人员职责的划分,随着软件应用范围的扩大,越来越呈现多样化,体现了分工朝着精细化方向发展的趋势。例如,网页设计人员,在传统的软件工程理论中,并不存在这样一个角色,不过,由于互联网的普及和互联网应用的大量涌现,网页设计人员已经成为软件项目中不可或缺的角色。

  角色的增加,给开发人员职业结构的分类带来了一定的困难,不同的软件工程理论,其分类标准也不尽相同。虽然现在是软件工程理论百花齐放的年代,不过,上个世纪60年代由IBM公司倡导的传统软件工程理论,依然根深蒂固,不管软件开发的生命周期如何突发变异,经典的瀑布模型还是不可动摇的基础。因此,我们不妨按照传统的软件开发过程理论,将开发人员的职责范围划分为四种,即项目经理、系统分析员、高级程序员和程序员。结合技术蓝皮书的统计数据,按照上述职责分类方法,可以对开发人员职业结构的统计数据进行归类合并。

  2. 项目经理和系统分析员

  先从项目经理开始。也许项目经理这个角色,是软件工程理论中争议最少的,关于项目经理的职责,各种理论惊人地一致,那就是想方设法在规定的工期和成本预算内,以可接受的质量完成项目的任务,具体到软件项目,那就是实现软件的功能。在项目管理理论中,项目经理一方面有着极大的权力,可以决定项目开发人员的升降去留。

  另一方面,项目经理又是各种矛盾的焦点,被称为项目的“受气包”,老板的压力、客户的刁难、开发人员的抵触以及来自同级的掣肘,项目经理都必须无条件地承担、接受、适应和化解,在错综复杂的项目环境中,心惊胆颤,如履薄冰,不断寻找最佳的平衡点,谁也不敢得罪,和公公婆婆眼皮子底下逆来顺受的小媳妇,很有一比。

  项目经理这个职业,在调查中所占比例为11.7%。

  接着是系统分析员。系统分析员是客户和程序员之间的一座桥梁,起着沟通双方的作用。系统分析员必须具有两方面的知识,一是业务方面的,二是计算机方面的。客户不懂计算机,不知道如何用计算机术语表达自己的业务需求;程序员不懂业务,不知道代码和业务需求之间有什么联系;只有系统分析员,既明白客户的业务需求,也理解程序员的计算机术语,因此,他通过需求调研获取用户需求,然后编写需求规格说明书,告诉程序员做什么。

很显然,系统分析员的职责决定了他不能脱离业务,不懂业务,或者不能通过需求调研建立业务模型,哪怕软件技术水平再高,也不能成为合格的系统分析员。蓝皮书中,“业务分析师”和“咨询师”显然归属系统分析员之列,毫无疑问;“SA/SD(系统分析/设计师)”恐怕只有“SA(系统分析师)”属于系统分析员,而“SD(设计师)”归到高级程序员更合理,因此,我们只取一半的数据;“高级顾问”的情形类同,有些高级顾问是从事业务建模工作的,属系统分析员,另一些高级顾问则是负责系统架构的,属高级程序员,我们也只取一半的数据。这样,经过简单的计算,系统分析员所占的比例是7.8%。

  3. 高级程序员和程序员

  第三类职业是高级程序员。高级程序员和程序员的区别,在“高级”二字。那么,所谓“高级”,体现在什么地方?体现在软件技术的广度和深度上。软件技术发展到今天,任何一种功能需求,都不太可能只有一种技术可以实现,必定有着为数不少的技术可供选择,几乎任何一项技术,都声称可以如何如何,而实际上也确实如此,只不过各有侧重而已。比如一个网站,.net可以,java可以,php可以,ruby又何尝不行呢?甚至同一项技术,也有多种方案可以实现,比如用java建网站,jsp、jsf、struts、spring等等,候选的方案令人眼花缭乱。如果你面对这么多选择时手足无措、迷失方向,你就是程序员;如果你对此了如指掌,方案堆于前而色不变,你才称得上高级程序员。

  高级程序员的另一个称谓是“软件架构师”,或者“系统设计师”,当然,也有以“高级顾问”称呼的,因此,我们把技术蓝皮书中“高级程序员”的全部、“软件架构师”的全部、“SA/SD(系统分析/设计师)”的一半和“高级顾问”的一半,通通归类到传统理论的“高级程序员”角色中,则“高级程序员”所占比例为15.1%。

  最后我们看看程序员。程序员的角色是所有角色中变化最大的,因为他们工作在第一线,和具体技术的接触最为直接,而软件技术在过去的十年中,发生了天翻地覆的变化,新技术层出不穷,因此也派生出了很多新的程序员职业。例如“文档工程师”,在传统的软件工程理论中,每个角色负责编写自己的文档,并没有独立的“文档工程师”,只是随着人类面对面交往功能的退化,“秉烛夜谈”固然不复存在,“促膝谈心”也比过年还希罕,一个个躲在电脑屏幕后面的“人类”,越来越依赖所谓的文档来交流思想,因此,文档的工作量也随之加大,以致于需要额外的“文档工程师”。当然,文档的作用远不止此,这是题外话了。

  技术蓝皮书中,“程序员”、“文档工程师”和“测试工程师”可归类于传统软件工程理论的程序员角色,这样,程序员所占比例为17.3%。

  4. 数据告诉我们:职业结构失衡

  现在,我们已经从蓝皮书的统计数据中,分拆合并出了传统软件工程理论中四类角色所占比例,为清楚起见,让我们来总结一下,结果如表一所示。

  角色名称  所占比例 
  项目经理  11.7% 
  系统分析员  7.8% 
  高级程序员  15.1% 
  程序员  17.3% 

  表一:蓝皮书中各职业归属到传统软件工程理论四大角色后所占比例
数据有了,它能告诉我们什么呢?这是一个以数据说话的年代,口若悬河的辩解也好,信誓旦旦的保证也好,都不如寥寥几个数字来得有说服力。当然,中国人讲究一分为二,凡事不肯轻易结论,同一件事物,不同的人有不同的阐释,有时候甚至结论大相径庭,也并不希奇。曾有一笑话,说某阔少行善积德,每日施舍乞丐两文钱,突一日乞丐只收到一文钱,遂问其故,阔少解释说因娶妻生子,开销加大,乃减去一文,乞丐闻言怒道:“你怎么能拿我的钱去娶妻生子!”,可见,即便是一文钱这么小的事情,尚且仁者见仁,智者见智,何况关乎国计民生的统计数据呢。因此,以下分析,仅是笔者个人的一家之言,相信聪明的读者自有独到的见解。

  细心的读者一定发现,表一中的统计数据,并没有包括蓝皮书中的所有职业。比如“CIT/CTO”、“配置管理人员”、“DBA数据库管理员”、“网络管理员”和“技术支持工程师”,就未纳入计算。这里需要说明一下,笔者在本文中的分析,是以项目为单位的,而未纳入计算的这些职业,都是跨项目的,理论上并不完全从属某个项目组,因此,我们将其排除在外。

  按照传统软件工程理论,一个项目组由项目经理、系统分析员、高级程序员和程序员组成。从这四种角色的职责不难理解,他们在项目组中的数量是呈金字塔形状的,其比例大致从1:2:4:8到1:5:25:125。这个比例是这样得来的,在传统软件工程理论中,金字塔的上一级对下一级负有管理责任,而通常的管理理论认为,在工业社会,个人能直接管理的人数,在7到13人之间,而软件是智力密集型产业,因此,直接管理人数在2到5之间比较合理。

  如果按照这样的比例,对照表一中的数据,我们不难发现,在平均意义上,中国的软件项目组的职业结构是严重失衡的。具体表现是,项目经理数量太多,而程序员数量太少,本应呈现金字塔形状,实际上却成了几乎一个直桶。是什么原因导致职业结构的严重失衡?这个问题,值得我们深思。

原文地址:https://www.cnblogs.com/nianshi/p/697299.html