算法工程师的三重境界

/ 0评 / 0

目前国内从事算法研究的工程师不少,但是高级算法工程师却很少,是一个非常紧缺的专业工程师。算法工程师是利用算法处理事物的人。那么,算法工程师要达到境界?

比如一些有工程背景但对投资开发没有信心的初级候选人,看着这个略显陌生的工程岗位,觉得可以碰碰运气(类似于之前的一个笑话:不知道自己该做什么的人去找产品经理)。

已经啃过一两本相关书籍,上过两门课,做过两个玩具项目的高材生,通常可以振振有词地谈论一个问题,但如果你让他用正式语言表达刚才提到的问题和解决方案,他只能一脸茫然。你把纸和笔都推到他面前描述和演绎,才发现你得到的是语音识别版的口语内容。

【/h/】我一般会要求考生具备形式思维能力,这也是我认为具备基本的数学能力很重要的原因。因为算法工程师不同于传统的开发工程师,没有现成的、定义明确的问题等着你。你通常需要先把需求方的自然语言翻译成形式语言,再翻译成机器码(这部分要讲的很多,以后再写详细的文章)。当然也有对这个岗位充满热情的同学,但显然还没准备好。我通常会试图说服这样的候选人,只要他们靠近自己的眼睛。无论是重新思考自己的职业发展方向,还是做出合理的能力储备,都比这个好。这一阶段的学生习惯于用生活语言来描述和分析问题,却不知道如何把握抽象背后的共性,用形式语言来表达问题和自己的想法。

【/h/】合格的考生通常在一些学术或项目练习后会不自觉地经历第一阶段,真正进入这个门槛,知道算法和抽象的乐趣,并且乐在其中。“衣服越来越宽,但他们永远不会后悔,他们会为伊拉克而憔悴。”。这些人通常都有形式逻辑思维的习惯。对于他们面临的实际问题,第一反应是“如何量化”、“如何建模”、“已知变量是什么”、“目标函数是什么”。最坏的情况是,他们会用自己的项目作为模型来设置新的问题。

他们有不同程度的成熟程度的知识体系,一切都可以嵌入到自己的体系中去表达和演绎,在抽象层面上回答问题。但这也是全世界用锤子找钉子的阶段。大家都觉得自己的锤子是万能的,所有的问题都要代入自己熟悉的模型中去解决,所以经常能看到一些走不到弯的面试官。比如一个不难的统计问题想多了,有时会被面试官放到假设检验中,有时是分类问题,有时就变成贝叶斯推断。现阶段,看山不是山,看水不是水,有点疯狂,有点自信,有点执着,有点失落。

总有那么一些人能摆脱自己知识的束缚,跳出自己的模式,回到问题本身,达到看山还是看山,看水(原创版权www.isoyu.com)还是看水的境界。在专业素质好的前提下,不受自己专业的束缚。他们首先关注问题的出发点和目标,通过自己已有的甚至是前所未有的知识描述中间路径,从而为问题定义合理的边界和求解路径。很少能达到这种程度。

即使在实际工作中,也有大量的二级解。面对问题,架构因为不断添加模型而变得复杂。只有回到问题本身,从出发点去分析,才能走出自己的困境,才能享受到“蓦然回首,男人在昏黄的光线里”的惊喜。

【/h/】相对于传统的对能力划分有明确标准的开发工程师,算法工程师是一个相对较新的岗位,学校也没有定义明确的培训课程(比如c/java、数据库、数据结构),可以用来衡量考生的能力,所以对其能力的定义还是比较模糊的。在这里,我从面试官的角度描述一下我对这个问题的思考——除了基本的工程能力,还需要具备哪些素质?这是一个很值得讨论的话题。只是开始,表达模糊,不够具体,不够系统,属于随意念叨。以后我会进一步阐述自己的实践经验,欢迎大家在这里发表意见。