刚刚看到一篇文章,文章里谈到,在未来,我们可能不属于任何一家公司,而是以自由职业或者联盟等方式来完成工作。我认为,理论上讲,这个趋势是存在的,跟软件工艺的要求是一致的,而且软件工程师的发展方向越来越接近于软件工匠。但在实际工作中,要完全做到职业自由或者联盟,还是面临很多问题,首要问题,就是如何有效评估一名软件工程师的工艺水平。
如果一名软件工程师,已经有很多优秀作品,并获得同行和用户的认可,其工艺水平是很容易评估的。但绝大多数软件工程师,特别是年轻工程师,在短时间内是很难得到有效的技能评估,主要原因有:
- 绝大多数程序员,因为工作时间或精力问题,不可能确保在每一次求职时都做好充分的准备,而在平时工作中就做好充分准备的软件工程师,其本身的工作就非常有价值,也在行业中有稳定的位置。
- 在探索技能评估的过程中,可能我们还是应该遵循软件架构设计“够用就行”的标准,达到潜力和发展的最佳平衡。
说白了,作为一项智力活动,软件开发的一个重要原则始终是多动脑子少花钱。
当我们抛开熟人介绍和优秀到不能被忽视的人之外,招聘作为一切的开端,在实践过程中,我们始终面临在不同的阶段,做出决策选择合适的人的问题。那么在特定的场景和需求情况下,只要还存在稀缺,如何评估软件工程师的能力是一个重要而且困难的问题。如哈佛商业评论说的,如何发现高潜力人才。
面试能做什么
问答环节是面试中一个比较重要的环节,个人的经验是,能不能通过事先准备和临场发挥,用一系列问题来建立有效的沟通,是非常关键的。怎么做好,只能说沟通和管理一样,既是技术,也是艺术。开放的思维是关键。
这里有一个经典的困局,我们设置的问题,应该是考验开发人员的常识,还是逻辑思考能力,哪一项更有意义;是记得Java的某种内置排序算法重要,还是能够用php写一个优雅的排序更重要。在面试这个不长的时间内,需要表达出哪些东西。
记得当然比记不得好,过目不忘比过目就忘更好;看时间、精力和沟通的默契程度,看缺不缺人,看候选人多不多。常识和逻辑思考能力,应该是同时需要考察的,这个环节是一个需要双方都开启智力思考模式的地方。
也如《罗辑思维》所说,科举、应试,在某种程度上,也是比较公平合理的方案。看人这种事情,从来就不是简单的事情。
怎么做的更好
软件开发始终是一种工程实践,一种手艺。如果条件允许,尝试一下是最好的选择。《重来》里的理想是非常好的,通过实践来检验软件工程师的开发能力。
不过现实中,个人感觉是,与其说是考验被测试者,更大的考验应该是对于考察的人;公司有足够知名度的时候往往不缺一两个人,更多精力可以用于直接挑选最优秀的工程师;没有足够知名度的时候,没有时间,也没有足够的空间去挑人。还要在不长的时间内,花额外的尽力去设计好的考试大纲。
所以,最后对于个人来说,还是只有在平时的工作学习中,不断学习知识,不断的刻意练习,让自己随时准备好,建立自己的知识体系和技能树,对于最核心的部分应该做到随时随地都像肌肉反映一样快速自然,最好的的状态是以意驭剑,才能变化无穷。
例如,先定个小目标:写50篇各种类型的文章;构思并在Github上实现10-20个有创意的项目;每个月至少进行一次编程操练。