最近在看简历,根据简历和自己的经验总结一些东西出来。管窥蠡测一家之言,权给新手做个参考吧。

1.行业分类

从统计上看,web开发是人数最多的行业,占大约56%。其次是嵌入式市场,大约占18%。erp市场也差不多,18%。剩余的不足8%。

2.性别分布

众所周知,程序员是男性的职业,但是出乎大家意料的,程序员中有14%是女性(纯程序员,不包括美工)。不过根据贝壳的人工观察,其中只有一人的工作时间超过5年,多数都是3年不到的新人。看来女性程序员怀孕后转业的情况非常严重啊。

3.年龄分布

以大学毕业为基准水准计算,当前程序员的最低出生日期应当是1987。贝壳按照这个进行了统计,得出结果如下。

1983年17%,1984年8%,1985年14%,1986年16%,是人数最多的4年。低于1987年的占11%,1980到1982年间的人数占20%,高于1979年的占14%。

4.水准分类

水准是一个很难界定的指标,贝壳采用五级分类法,简单对其分类。大多数情况下,级和级之间没有明确的定界。

0.是完全没有任何技术背景和资历的人士,说白了就根本不是IT人。大约占8%。

1.初步具备IT行业人员的背景知识,能够做一些简单的软件产品,有跟随1-2个项目的经验。但是无法承担独立的项目,无法解决比较复杂的问题。在这个层次上,程序员大多数时候根本不知道怎么做,以及该做什么,始终处于知识缺乏的状态。业界俗称,小白。大约占50%。

2.具有标准职业从业人员所需要的知识(当然,具体是什么知识视行业和语言而定),跟随过多个项目,其中有2-3个大型项目。可能领导过1-2个项目,但是不清楚项目管理的概念和专业知识。这个级别的人在总体人数中最多,大多数人在工作1-3年后都可以达到这个水准。可以独立的解决问题,和客户交流,完成软件生产的整个流程。在这个层次上,程序员大多数时候都知道怎么做。主要的问题在于多数人还不知道如何将这个过程简约成自己的标准过程。一般来说,这就是标准程序员的典范。大约占32%。

3.精通C++,熟悉windows和linux系统管理和系统底层,掌握至少一门高级语言。熟悉项目流程和项目管理的概念和专业知识,能够带领团队协作完成大型项目。能够独立建模,抽象问题,并通过算法解决问题。具备独立和客户沟通,协调解决问题的能力。一般有多个项目经验,曾经领导团队完成2-3个大型项目。如果你天分不错,运气不错,又够勤奋,大概在工作3-5年后会达到这个水准。在这个层面上,算法和标准化过程这些书本上的东西首次超过了如何做,做什么,成为程序员的首要问题。这个层级的人数也比较多,能够胜任项目经理的职位。大约占8%。

4.精通专属领域的多项核心技术,有广泛的业界联系,专属领域有一定的知名度。研发过一项或几项领域中的关键技术,对领域的发展做出过一定贡献。要到到这个层次无法依靠时间的积累,很大程度是天分,运气。在这个层次上,解决问题已经不是一个问题。由于基本能解决领域内的多数问题,因此发现需要解决什么,和创造性的解决这些问题成为这个层次最主要的问题。这个层次的人基本很少,一个子领域中全国不会超过百人。大约占2%。

5.曾经研发过改变世界的技术。这种人多数你听过,运气好这辈子能见到一个。大约占1%不到。贝壳当前的水准在3上下浮动,估计奋斗一下,这辈子能够达到4的层次。至于5,这辈子不指望了。

5.工资分布 大多数情况下,工资和工龄都是挂钩的。根据贝壳的统计,工资和年龄线性拟合后得到的一阶近似方程为:y=-1.089*(x-1990.50)。带入贝壳的年龄,y=8.16。恩,贝壳当前的工资还是不错的,比平均值高。

6.语言分类

由于简历是python的职位,因此python的比例异乎寻常的高,无法作为可用结果。贝壳按照经验比例适当缩小了python所占比重,得到一个估计值。作为统计数据的修正,并列于下。根据贝壳的统计,使用java的人人数最多,占了38%,修正大约是40%。使用微软系列开发语言/工具的人其次,28%上下,修正大约是30%。使用php的人再次之,12%,修正大约15%。最后是使用C++的,8%,修正10%。真正使用python和其他动态语言的人,修正后大约是5%。由于职位不涉及前台,因此前台语言/技能不计入统计。

最后谈几个感想。

1.队伍水准不成比例

根据贝壳的经验,在多数的项目团队中,推荐的岗位配比是:1位项目经理,2位程序员,1位前台工程师,1位DBA,2位测试。如果可以,最好还有一个专门的文档和行政。这个人数配置适用于6-12人的团队管理,如果人数不足,可以减少文档和程序员。如果人数有多,可以增加2位程序员,1位前台工程师,1位测试。其中程序员、前台工程师的配比要基本保持2:1不变,程序员、前台加DBA对测试的比例要基本保持2:1不变。这可以说是项目团队的黄金比例,比例失调往往容易造成窝工或工作不完整,质量有瑕疵。

但是需要看到,这样的话要求2位达到3这个层级的程序员(PM和DBA),但是最高只能带4名2这个层级的程序员。这个和当前的2,3层次的程序员的比例4:1严重不匹配。因此造成一个现象,3这个级别的程序员不足,1这个级别的程序员太多。

根据孟岩的blog,07-08年的IT从业人员大约是500-600万人,其中程序员大约100-130万。每年的IT行业毕业生大约是70-100万,其中能进入程序员领域工作的大约20万人。当然,他的blog是一年多前的,而且说的是毕业生就业问题。但是根据全球IT形势,我估计这几年里面程序员队伍规模即使增长也有限,不会超过150万人。也就是说,大约一年之内就要淘汰10%-20%的从业人员。根据上面的分布,贝壳猜想多数人都是倒在了2到3的路上。

2.小白丛生,项目倒霉

上面一个问题带来的麻烦是,由于小白的人数太高,因此价格太低。其中不免一些人有非常好的测试表现。这要一分为二的看,部分人是真有这个水准的,以小白的价格雇用到这些人是非常合算的(当然最多一年,不会太久)。但是多数人仅仅是表现不错而已,这些人工资低测试表现高,很容易进入项目。而进入项目后,一旦担任关键职务,后患无穷。实际上,整个团队中,水准1的小白可以担任的职位只有测试(而且必须至少要有一个是真的专业测试)和文档。但是仅这两个职位而言,远远达不到培养新人的目地。这也是很多小白倒在了达到普通程序员水准路上的原因。

更麻烦的是,如果突然招聘,很容易发生招到的程序员价格都偏高,而且很多都没定下来就先和其他公司签约了。这时候往往只有小白可以用,项目情况可想而知。

理论上可以开放一些职位旁观项目,实际上也有人这么做的。但是旁观项目是一个非常麻烦的事情。首先项目的旁观者不但对项目没有正面贡献,反而会拖慢进度(因为要占用其他人时间进行沟通),因此旁观职位的工资应当是负数。而且多数公司项目第一,赶都来不及的时候谁会开放旁观职位。更不说光在项目中旁观是很难确实体会到那个职位上要面对的问题的。

3.项目经理的条件就是要做过项目

项目经理是一个非常专业的角色,这个职位和技术总监(或者叫核心程序员,高级程序员)、DBA并称是一个团队的三大核心。核心程序员和DBA可以慢慢学,但是项目经理是学不出来的。实际上,合格项目经理的必要条件就是带过一两个大型项目。问题是,如果想成为项目经理,你找谁让你带项目呢?

一种方法是跟随一两个项目,带一两个小项目,学整套的项目管理方法论,最后由一个成熟的项目经理指导你完成首个项目。但是实话说,这种方法只有对大公司有效,而且还的看你的运气。小公司里面哪里弄那么多人开两个团队?(原本的项目经理一个,你一个,这要35人以上的公司规模呢)大公司则是牛人太多,轮也不一定轮到你头上。

另一种方法是赶鸭子上架,等你毁过一两个项目后,也就学的差不多了。

实际上,国内由于PM(真正的PM,而不是挂这个名头的程序员或者其他捣浆糊人士)不足,而公司规模又不足,足了也没有培养人才的兴趣。因此大部分PM都是通过后一个途径培养出来的——

4.语言生态扎堆

我们开放的职位叫做python程序员,可我的邮箱里面有一半上下的人都是java和C#的资历(我不看他会的语言,而是看他资历的),其中真正有python资历的人十不足一。实际上国内大部分的人都在学java和C#,做web和erp程序开发,大部分的小白其实扎堆在这里。真正成为3,4这个层级人才的,java/C#/C++/python的比例其实差不多,很接近。

实际上这和当前的语言生态有关。到也不是说这个生态有问题,而是这是当前现状市场化配置的必然结果。大量的小白(6成以上)集中到6成上下的低端web、erp和嵌入市场。这些市场的目标需求不复杂,没有重大的技术问题,服务器压力不大,因此小白足以应付。既然是小白,那就需要选择一种使用人数最多的语言(因为最好找人)。于是两大语言集团,java和ms系列的asp,asp.net就成为必然选择。

web行业和erp行业的几乎全是ms系列和java系列的语言,而嵌入式里面则大多数是C++(当然,也有j2me,不过那不完全输入嵌入式开发的领域,很多应当属于游戏领域),这个是受限于嵌入式本身的技术特点。C++本身也有写的好和写的差之分,但是由于程序员要控制更多的东西,因此差的程序员很容易被识别出来,也更难在行业中生存。因此嵌入式行业的总体开发成本比web行业要高。

在我的行业中,缺少游戏行业的分析。这主要是因为我的简历里面几乎没有游戏行业的从业人员。我无法解释这个现象的成因,也许游戏正在从软件行业中独立出去,成为一门独立的体系。