企业普遍会将程序员分为:初级、中级、高级、架构师等。级别当然是区分薪资的一个标准,不同级别的薪资差距是非常大的,同时也代表了其所具备的素质和能力。
一、初级程序员(5k - 10k)
初级程序员一般是大学刚毕业或毕业没多久,他们最大的优势是年轻。年轻代表着学习能力、动手能力、潜力。没有一家企业在招聘初级程序员时要求做高级的事情,所以在面试时,遇到答不出来的问题是很正常的,不必太过在意,你所要表现的是你的积极主动、以及无限的潜能,因为这才是企业所重点关注的。
- 一般是具有计算机专业教育背景,但没有实际工作经验或经验较少的职场新人; 专业教育背景代表着基础理论知识水平和能力,相比非计算机专业的同学来说,其未来的成长速度和空间都会大很多(不绝对)。
- 共同特点是无论是技术、规范、流程、制度、团队配合等都还处于学习阶段; 初入职场一切都是新鲜的,在对企业规范、流程、制度等不了解的情况下,工作起来是束手束脚且没有默契的。即使有一定的技术能力,也需要学习企业的开发流程、编码规范、配合方式、项目及业务逻辑等,都是需要花时间学习的。
- 了解开发编程的基础知识,能够动手做一些简单的工作。即便是简单的工作,仍需要支持和帮助。 一点开发能力没有企业是不会招进来的(除非老板是你亲戚)。不过是否能够胜任工作就得打个问号了。从我的经验来看,大多数新人是无法独立完成工作的,哪怕是简单的工作。比如一个简单的登陆功能,在企业中开发和自己开发完全是两回事。自己开发时你就是项目,可以按自己的想法设计,使用擅长的技术和习惯的编码风格等。而在企业里,你只是项目当中很小的一个环节,任何一个环节的不稳定可能会影响到其它环节。也不是你擅长什么就可以用的,因为总有人需要跟你配合协作,你的不规范将导致无法融合进项目。一些大的企业都有长期沉淀了适合自身架构和框架,与市面上的开源框架总有不同之处,是需要学习后才能进行工作的。即使使用开源框架,也或多或少在其基础上改造扩展,在编码上也有着自身的规范(比如不允许关联查询等),流程上也有着自身和风格特点,这些都是需要学习和了解的。
即然各方面都要学习后才能工作,那么就需要有人来支持和帮助,无形中增加了企业和同事的压力,此时新人创造的价值与企业给其的薪资并不能成正比,也就是企业在为其成长买单。建议新人进入企业后,多工作几年再想着跳槽,因为在你不能为任何企业创造价值时,你的公司给了你学习的时间和机会。
二、中级程序员(10k-30k)
中级程序员一般都有过一家以上公司工作的经历,对工作中常用的技术达到熟练或精通状态。工作效率、状态都处于较高的水平,正是程序员的黄金时期。对于这类程序员,企业不仅关注其从业背景、做过项目的复杂程度、技术能力、人品性格等,还会关注未来的成长性、可塑性。也就是说,不仅要当下,还要未来。
- 能够独立且高效地完成本职工作; 独立完成本职工作不必多说,大家都能理解,不过“高效完成”就需要解释一下。什么代表高效。比如相同的功能,同样中级级别的程序员需要一天,而你仅需半天就可完成,这就是高效。之所以高效是因为在开发过程中一马平川,没有遇到坑坑槛槛。这说明在前期技术设计比较到位,算法逻辑比较合理从而避免一些不必要的问题出现,从而大幅提高了效率,这是能力的表现。
- 能够指导和帮助团队其他成员解决技术问题; 在保证本职工作的前题下,可以帮助团队解决技术问题,是对中级程序员的要求之一。这不仅仅是企业希望你多付出,更是通过帮助他们提高自我沟通交流能力,技术能力以及影响力。在中大型企业中一个人的技术能力再强,如果只是完成本职工作是没有未来的。因为没有影响力或影响范围太小,没有人知道你以及你的能力,在有提拔名额或重点项目时很可能因为不认识你或不了解你而失去机会。所以只有不断地帮助他人,主动挑战高难度工作,扩大人际圈,提高影响力,才能有好的未来。
- 能够独立负责小团队或小项目; 中级程序员虽然有技术上的要求,但也应该具备一定的管理能力。可以独立负责一个三到五人的小组,或带一个小项目。复合能力这一点互联网公司尤其看重,单一能力的人的机会远比复合能力的人少的多,成长空间也小的多。从技术复合能力来讲,如果只是对某一领域的技术研究非常深入,而对其它领域的技术不了解,那么就业范围就会变得很小(我之前写的《想成为程序员不知道如何入门,如何选择方向?本文给你答案》一文中有举过一个从事了15年浏览器开发的朋友的例子,大家可以参考)。从领域复合能力来讲,一个只懂技术的人很难成长为架构师,因为架构师除了技术以外还需要沟通、交流、管理、培训等各方面能力。
- 能够部门内合作。 同一个部门不同团队,虽然工作或项目不同,但目标基本是一致的。因为各团队的目标是部门负责人目标的拆解,换句话说部门内各团队目标的总合就是部门目标或部门负责人的目标。部门内事务依赖比较紧密,因此彼此都很熟悉,作为带项目或团队的人,必须要具备此能力,才能保证项目进展顺利,团队发展良好。
中级程序员的薪资范围是比较大的,也就意味着这个阶段程序员相对来说比较多,能力也是参差不齐。同时工作中也出现了非技术类的内容,这就要求程序员不能一味地低头写代码,还要抬起头来看看身边的人。
三、高级程序员(20k-50k)
无论技术能力还是管理能力抑或是成熟度都处于较高的水平。工作上具备独档一面的能力。对于这类人,企业并不会仅用来写程序,还可能会带项目,写文档,做管理、架构设计等。如果说初级程序员是企业的预备军,中级程序员是企业的中坚力量,那么高级程序员就是企业的核心骨干。在招聘时企业会非常慎重,不仅是因为工资高,还因为错误的选择可能导致项目甚至团队的失败。
- 能够解决工作中出现的技术难题; 高级程序员之所以称之为高级,一定是以其技术能力为基础的。项目组中高级程序员相当于技术的最后一道防线,遇到技术难题无法解决时,高级程序员一定得出面摆平(假如摆不平,那么只能请其它团队的高程或架构师、技术总监帮忙)。
- 对技术有一定的理解和见解; 高程已经从使用技术过渡到对技术理论、原理有一定的研究和理解,合结其丰富的实战经验,可以对现有技术进行优化和改造。
- 能够独立负责团队或大项目; 这一点是要求,但并非必须。有些人在高程阶段一必扑的技术上,对其它事情可能并不太上心。而大部分高程不仅技术上持续深入,也开始独立负责团队或带规模较大的项目。有很多人会说,技术研究本身是很耗费精力的,团队管理的事情又杂而多,时间肯定不够。的确,时间对所有人都是公平的,一个人同一时间不可能干两件事,所以技术和管理一定会有冲突。不过,如果你的能力足够的强,就可以弥补时间上的不足,不是么?
- 能够推动跨部门合作; 中级程序员的要求是推动部门内合作,相对比较容易。对高程的要求则是要能够推动跨部门合作,看似差不多实际上难度大很多。
部门不同,目标则不同。你有你的目标,别人也有别人的目标,除非你目标的完成与否直接影响到对方目标是否能完成,否则对方怎肯放着自己的活不干帮你干活呢?
部门不同,负责人不同。部门内部的事都是负责人的事,他能够主动帮助协调,而跨部门的事就是不部门负责人能协调的了。你也不能什么事都向上推,时间长了会给负责人留下能力不行的印像。
部门不同,人与人之间可能并不熟悉。因为不熟悉或不认识,因此一切都是公事公办的状态。
今天我们把程序员的三个级别所需要具备的素质和能力做了简单的分析,写到的仅是最为关键的内容,还有很多要求并没有一一写到。不过能够把关键的部分做好就是非常合格的了,希望通过本文能够对你有所启发。后面的文章中我们将会针对架构师、技术总监、CTO等高阶职位进行分析,敬请期待。