在很多行业,高级职位大多取决于一个人的资历即从事该工作的年限或者一两次标准测试。但是如何准确的定义一个“高级开发人员”?这是几周来我一直在思考的问题。
经历的招聘次数越多(我是在帮助招聘人才,而不是自己找工作),我问自己这个问题的次数也越来越多。
我知道一些基本的素质,但是更详细的细节很难让人把握。而且,这些细节是十分重要的,因为职位不仅决定薪水还决定了一个人未来的职业机会。一些人可能在做着“高级开发人员的工作”,但是如果他们想成为一名软件架构师,没有这个职位就会使他们受到伤害。
另一个方面,如果我被告知需要寻找一位“高级开发人员”,结果我认为适合该工作的人却不能胜任该工作,我就没有做出正确的决定。
下面是一个“高级开发人员”应该具备的基本素质:10年软件编程领域的工作经验(虽然根据他们所从事的开发工作,7年或8年也以),坚实的理论基础和良好的调试技巧。同时,他们还应该能够做到:紧密地配合软件架构师从整体上对项目提出改进意见;在软件架构的级别上而不是较低的实现级上提出一些问题;对缺乏经验的开发人员提供指导。
另外,你还可以放心的让他或她将一组类图转换成几乎不存在问题的高质量代码。一位“高级开发人员”不应该要求帮助。
但是拥有这样一位高级开发人员比如有4年的仅用VB.NET的开发经验和在此之前8年仅用VB的开发经验是否会更好呢?我能够想象12年从事VB开发的经验一定能使他成为一名VB/VB.NET专家。
另一方面,有人12年来在Java、 C++、 Perl、 VB.Net和C#间跳来跳去,他可能拥有更广泛的可利用经验。就我个人而言,我更喜欢后者。原因很简单这更像自己的经历,但是我认为前者的路线同样有很多优点。
同样,对传统的客户/服务器应用和基于Web的应用花费同样时间的人和只从事基于Web的应用开发的人一样吗?客户/服务器应用开发人员关注尾随Web应用的很多问题的解决方案,但是仅从事Web开发的人员可能对Web开发(HTTP协议)的怪癖更具独特的洞察。同时,对于在业界工作了同样长时间的专才和通才之间有一个折衷。
我喜欢忽略自学和以前受到的教育,我也通常这样做。我能够很简单的验证应聘者是否拥有合适的理论知识(我发现理论知识在学校学习要比个人自学容易),这样就能够淘汰学习了很多坏习惯的自学者和那些有学历无学识的应聘者。
最后一个主要的障碍是这样一些人,他们在被认为是高级的劳动中工作了足够长的时间,但是从未从事过比简单的CRUD应用更复杂的工作。对我来说这是一个很棘手的问题。
据我所知,他们是如此的深入简单CRUD应用以至于他们清楚所有的内部和外部事物,即使他们的项目并没有表达这些事物。
另一方面,还有一些人他们的经验与编程间接相关而且十分有用。例如,我发现我在从事系统管理员和构建网络方面所花的时间对于调试很多应用是非常重要的,尤其是最后一些事情的实施。一个不具备开发经验的人怎么适合“高级开发员”的职位呢?
不考虑所有其它方面的因素,还有一个品格的问题。我愿意接受一个品格不能令人满意但拥有惊人的技术能力的人吗?或者一个“高级开发人员”的领导责任允许是一个品格优秀但技术不足的人吗?
对于“高级开发人员”应该具备什么素质,我确实有自己的想法。为了保证招聘过程的公正性,现在我不想公开表达我的观点,以防有人做些准备试图欺骗面试官。但是我想知道你对“高级开发员”应该具备的素质的想法。