IT人士级别划分
随着高科技的快速发展,编程悄然贯穿了我们的生活。我们现代化的工作和生活已然离不开程序和编程语言。很多人都在谈论着如何编程,以及编程为我们带来的便利,从而促使着从事编程工作的程序员越来越多。
什么是程序员?是设计自己的 Apache Web 服务器的家伙?制作一个复杂的 Excel 电子表格的高手?能自己开发 RPG 的技术大牛?Minecraft 的玩家?程序员的官方定义为(英文Programmer)从事程序开发、维护的专业人员。
在中国,程序员作为IT的代表,往往被赋予了许多悲催的色彩,被调侃地称为“程序猿”、“码农”、“IT民工”。特别是提到IT男,不少女生都表示很“恐怖”,木讷、不善言谈、邋里邋遢等字眼成为了IT男的象征。
然而,也有很多“奇葩”人物神一般地存在着。
马云,一个看起来并不帅的男人,一手缔造了电商帝国——阿里巴巴,成了IT界大佬;
李彦宏,曾在硅谷当工程师,后来成功地打造了中国第一大搜索引擎——百度,被称为“帅才”;
马化腾,曾在润迅公司做软件工程师,后来成为腾讯的主要创办人之一,被称为“QQ之父”。
这些IT界的领袖与深夜还在街上走、一脸苦逼相的程序员形成了鲜明的对比。
2014年,CSDN携手《程序员》杂志发起了“2013年中国软件开发者薪资大调查”活动。参与本次调查的开发者遍布软件开发领域各条战线,其中来自软件工程师岗位的参与者占63.21%,高级软件工程师的参与者占15.42%,技术支持/维护工程师与高级软件架构师的参与者比例同为1.95%。在已经走上管理岗位的开发者中,CTO/CIO/技术总监占1.29%,经理/主管级别的开发者占10.35%。
《2013年中国软件开发者薪资调查报告》数据显示:2013年中国软件开发者中,月薪5000元以上的人数占比同比增长3.89%(2012年增长率为10.8%);
在参调开发者中,薪资在万元以上的高收入人群占比为20.66%,月薪在5000~10000元的中高收入者占比最多,约为45.23%。
现实中软件开发团队中的角色
“软件蓝领”是当今社会上流行的一个概念,其指的是软件生产线上的工人,也指依照软件的详细设计进行编码的程序员。他们是纯粹的软件工人,不参与软件的设计,也许根本就不知道自己写的这段代码是用在哪个项目的哪个模块里,他们只知道按照接口和功能规范编写代码。
“软件蓝领概念”认为,一个软件企业的标准体型应该是上尖下宽的金字塔型,软件企业保持70%到80%的软件蓝领是比较合理的。然而,在大多数软件团队的组成结构中,并不是以“金字塔”型来呈现,更像是一个“阶梯型”。大致表现为:实习程序员、程序员、软件工程师人数所占的比例最多,其次是开发项目经理,而开发部门项目主管经理人数最少。
角色1: 实习程序员(实习生或临时员工)
职责:按软件工程师的要求进行编码和单元测试。
要求:良好的编程技能和测试技术。
这个层次的程序员往往是刚刚毕业或者是还没有毕业的学生,以实践学习作为最主要目的。
由于这个层次的程序员并没有和公司签订正式的劳动合同,仅仅是实习合同,因此,我们往往称这个类型的程序员为“实习生”或者“临时员工”。
这部分员工虽然是临时性质但是对其工作上的要求并不放松,而且工作量和正式员工相同,因此,这部分员工往往会成为正式员工的后备军。
角色2: 程序员(或兼任测试)
职责:按软件工程师的要求进行编码和单元测试。
要求:较强的编码整合能力以及良好的编程技能和测试技术。
如果一个公司没有实习程序员,那么程序员往往是刚刚参加工作的初级程序员。他们属于正式员工,与公司签订了正式的劳动合同,并且他们可以独立地完成程序开发任务,基本上不需要高阶程序员的指导即可完成日常开发工作,他们有时候会被称作“程序员”。这个层次的程序员有时需要兼任单元测试或者整体测试的工作。
成为程序员的门槛相对较低,基本上只需懂计算机的基本操作,了解计算机专业的一些基础知识,掌握一门基本的编程语言,如C/C++、或者Java、JavaScript……均可踏入程序员的行列。在中国,除了计算机科班出身的程序员,还有大量通信、自动化、数学等相关专业人士进入这一行,此外还有众多的其他专业转行的人士,目前在这一层次的程序员数量相对较多。
角色3: 软件工程师
职责:
● 按项目经理的要求满足项目开发进度和质量要求;
● 指导程序员或实习工程师进行开发;
● 对项目或产品的某个模块负责。
要求:
● 较丰富的软件开发经验;
● 方案的整合能力;
● 指导初级程序员开发的能力。
软件工程师指的是程序员中资格较老,技术掌握较全面的那些员工,正因为他们的经验在某些领域比程序员级别的员工丰富,因此,他们被称作“软件工程师”。
软件工程师的工作更侧重于设计和规划,因此成为软件工程师是绝大多数程序员发展的必经之路。因为,程序员在编程序的时候,一方面会实现设计的功能,另一方面也会对设计有一个理解、认识、熟知的过程,进而慢慢地从学习别人的设计,转向到自己参与或独立设计。而从程序员到软件工程师的转变很大程度上是程序员意识的转变,也就是说要把编程的时间,逐步分摊到软件设计上,要把重点从编程实现转变到项目的功能设计上。
软件工程师这个层次的员工往往独立负责大型软件项目的某个模块,带领几个实习生或者程序员一起开发。他们具备一定的设计能力,可以将系统设计方案转换为软件模块,并执行项目经理的项目开发进度要求。
角色4: 开发项目经理(高级软件工程师)
职责:
● 制定产品或项目的开发目标;
● 制定各个工作的详细任务表,跟踪这些任务的执行情况,进行控制;
● 组织会议对程序进行评审;
● 综合具体情况,对各种不同方案进行取舍并做出决定;
● 协调各项目参与人员之间的关系。
要求:
● 对产品有激情,具有领导才能;
● 对问题能正确而迅速地做出判断;
● 能充分利用各种渠道和方法来解决问题;
● 能跟踪任务,有很好的日程观念;
● 能在高压下工作。
开发项目经理负责整个产品或者项目的开发质量和进展,往往兼具系统分析和系统设计的工作。开发项目经理有时候就是高级软件工程师,因具有多年的开发和管理经验才使其能够顺利胜任该职位。
项目经理和程序员的作用不相同,项目经理的重点已经从编程转移到对人、对技术、对进度、对项目的管理。由于软件的项目经理与软件项目的相关性太大,因此,其必须要了解软件开发的各个环节、了解开发的各种技术和运用、了解开发队伍人员的水平和特点,从很大程度上讲,他依旧和程序员脱不了干系。从程序员到项目经理可以使得项目经理更好地理解程序员在项目中的地位和作用,了解软件开发的规律性,从而保证项目的正常完成。而且,项目经理的收入在公司中比较高。转向项目经理是程序员的另一个发展空间,不过,程序员在担任项目经理之前最好要把软件设计的工作做好,这样在做项目经理时,就会有扎实的基础。
角色5: 开发部门主管经理
职责:
● 对部门所属各个产品的开发质量和进度负责;
● 负责各个产品和项目的总体开发目标;
● 负责技术团队内部的技术培训和交流;
● 负责部门日常工作安排、指导、协调、监督与管理;
● 负责部门人员管理、团队建设、绩效考核管理。
要求:
● 具有项目管理、项目策划的经验;
● 具有统筹规划能力及领导能力;
● 具备良好的沟通能力、团队协作能力;
● 能承受巨大压力。
开发部门主管经理负责部门所属各个产品的开发质量和进度,以及各个产品和项目的总体开发目标,协调公司各个方面的资源以满足该部门的业务进展要求,统筹安排人员需求计划,人员晋升计划,以及负责对该部门所属人员的工作绩效进行考评。
很多程序员希望自己能成为公司中的一名主管、经理、老总、老板,因为无论从收入还是公司的地位上比程序员的职位相对都会高一些。不过,走向管理者要求程序员比一般人做更多的准备,提前做更多的转型工作,而不是说想当管理者就能成为管理者。但是,如果程序员有这个志向或爱好,又积累了这方面的工作经验,自己也感觉在这个方面能够进一步发展,只是需要有这样的机会,那么走向管理者也是有可能的。由于软件公司的管理者不同于一般公司的管理者,要求极强的专业能力,因为专业能力越强,管理起来就越得心应手,没有专业的管理能力,遇到的问题会很多,也很难得到解决。因此,程序员最好要把编程、项目设计、项目管理等基础打好,这样转型到管理者的成功率就会高一些。