这听起来是一个很明显的问题,但是它真这么简单吗? 我听到过公司里的一些开发人员讨论这个问题。当时我的一位高级工程师正与两个初级工程师讨论一些其他的事情。当事情讨论完,其中一个初级工程师提出了这个问题,初级工程师还是高级工程师。 那个高级工程师,恰好是那些个我有幸一起工作中遇到的最好最聪明的工程师中的一员,从他的角度,花费了30分钟去努力阐述区别在哪里。 对话夹杂着通常的答案进行中,那个提出问题的初级工程师(是公司里有点小聪明的一个家伙)试着将问题拆分成两个子问题,在我看来是比较有趣、有探究性又有用的子问题: 1.客观来说,我作为一个初级工程师如何能确定什么时候我成了“高级工程师”? 2.作为高级工程师,你如何计量初级工程师的进展,怎么知道啥时候一个初级工程师已经跨越了那道成为高级工程师的门槛?
问题1我觉得第一个问题特别有趣。随着办公室讨论的继续进行,我尽力去回想从开始软件开发工作一直到成长为一名开发者,这些年我思考了什么问题。 毫无疑问,对每个开发者而言,成长为更高职级人员的过程中,时间是一个重要的因素。观察这些年的各种各样招聘信息(一些人认为“高级”意味着最少5-7年的经验,而另一些人认为它意味着至少10-15年),很显然就专业时间需要多久没有真正的“标准”。 仅仅过了几年,一些开发者就认为他们自己是高级工程师,而另外一些人过了7-10年还人认为自己仅仅是“中级水平”。?作为招聘方,我知道以上事实都属实。这些都毋庸置疑,是明了的常识。自负也是一件有趣的事情。针对“时间多久”会有不同意见,这种“阻抗不匹配”会引起争执。 那跟学到的技术或语言种类有关系吗?有一种学院派观点认为,掌握一两种语言也能成为高级工程师,只要他掌握了如何去处理在使用编程语言过程中遇到的问题的经验就好。然而,另一种职业更加注重使用不同相似技术去工作,并用不同技术解决更多通用问题的能力。 这是明摆着的,就是取决于工作要你去干嘛。从那个角度而言,内部讨论你是否已经进入了“高级工程师”领域是没用的。 经过了反复思量以及听了很久的讨论,我总结道,针对第一个问题的内部判断是相当各异性的。如果让我去提出一个标准—-不管是不是非正式的—-那将是:作为一个初级工程师,当一个公司或团队的高级技术人员让你做某件事的时候,你所拥有的舒适和自信水平。 问题2毫无疑问,存在无数量度能解答这个问题。坦白说,我还没看到任何一个方案能作为银弹或金标尺去测量所有的高级工程师。 是的,存在不少测验和考试用来评价一个开发人员的能力水平。毫无疑问,这些测验不能被忽略。 让事情变得更加有趣的是,有时候那些判定什么是“高级工程师”的人并不是对那些技术或语言很熟悉的人。例如,在一个小公司里,技术部的专家可能是一个具有相当多基于java商业程序部署经验的Java开发人员。然而,同样的专家又有可能负责招聘高级iOS开发人员的人。在缺乏高级iOS开发工程师时,有一些人就得顶上去,成为专家。 打住,我有点跑题了。这里真正的问题是评价初级工程师的进展。 有一些可能的标准,大部分看上去不太容易(并非不可能)合适地传达给初级工程师本人。再一次,如果被要求提供一个可能的标准,我觉得是这样的标准,开发者能够对任务或一系列任务(不管多巨大)给出一个估计的工作量,能够有信心在一个合理的时间范围(不要让我给出任务估计)内去完成它,并且只需最小的辅助。 换言之,如果你还一直在犯同样的错误,这个错误是你刚开始从事开发工作的时候就遇到的错误,那么确定无疑,你没有进入到高级工程师的领域。 结语这篇文章不打算回答我那个精明的初级工程师的问题。相反,它引出了一个关于什么标准能够合理的应用到每个问题的讨论,它是一个起点,如果你觉得不错的话。 你认为呢?有些什么标准两边都可适用?我们没有成熟的人力资源部门,但是可能有一些东西我们能去学习认识。 留下一些评论,让我们继续这个问题。 ; D9 O- d/ D" ~3 y
|