Tubi 的机器学习团队很小,只有五六人,一半在旧金山,一半在北京。我们开放机器学习工程师的职位很多,作为面试官和 Hiring Manager,会面试两边的候选人。虽然题目是相似的,但是往往表现却不太一样。
资深的工程师写不写代码
因为团队小,我们对于招聘的工程师定位,都是至少是资深工程师,能够独立完成项目,五年以上最佳。因此,我们面试的环节中有两个小时是亲手在电脑上写机器学习有关的代码。这个要求在旧金山问题不大,在北京却有些问题。我非常吃惊的发现,很多人都已经不再在一线写代码了。
我们在旧金山团队的 John Trenkle,Principle ML Engineer,在 ML 领域有30年的工作经验。之前在 TubeMogul(Adobe) 做首席科学家。一九八几年就在帮 USPS (美国邮政署)用神经网络做字符识别。他做了这么久的机器学习,最爱的依然是在一线写代码,不断地用代码和模型解决实际的业务问题。我们的 VPE,CTO,一半的时间也都在写着线上的代码 (Production Code)。
非常遗憾地是,这样的候选人在北京就少很多。也许不少人觉得工作一段时间后,转成技术管理的角色更好。但对于热爱机器学习的人,或许也期待着能有更多的选择,来享受技术本身的成长。

基础知识与项目经验
机器学习本身是一门学科,它有着不少独有的领域知识。在我们的面试环节中,会考察一些非常基础的机器学习和概率论的概念。这些问题虽然基础,但是对于有所钻研的同学往往很容易答出,并引申到实际的工作当中。
在旧金山的面试中,往往简历的丰富程度和面试的结果的好坏成正比,但是在北京的面试中,却感觉相关性不大。换句话中,对于一些人,虽然项目做的多,但是基础知识却并不扎实。
有些候选人对于基础知识的重要性也不以为然,觉得项目上线了就是产出,容易忽略因为根基不牢固而带来的长期隐性风险。更何况对于很多知识,对的就是对的,错的就是错的。并不会因为项目上线的多了,就让错的变成对的。
或许每个人选择机器学习这个领域的初衷都不同。但是长久来看,只有真正热爱的人才能深入钻研,不断学习,在这个领域有所建树。
项目经验与个人成长
我所见到的同样工作年限的北京候选人,项目经验丰富程度一般是旧金山的两倍。做过的项目多,用过的模型多,上线的应用也多一些。
产出更多当然是好事。但是除了上线产品本身之外,开发流程的优化往往更重要。只有做好自动化和流程化,才能系统性地大规模化。而在流程中所总结的经验,和积累的技术,也往往是我们更在乎的。因此,对于上线的项目,我们往往会追问很多关于上线的细节,包括技术的选择、指标的确定、线下参数的优化、代码上线前的 Code Review、A/B测试的结果与分析、以及根据测试结果如何引导下一步的计划等等。而最重要的,不是是什么,而是为什么。
然而,面试中有一种答案我在国内听到特别多:“这个需求比较急,所以我们就实现了ABCD,然后通过测试就上线了。“而对于为什么做这些选择,却很难给出满意的答案。
这样的答案让人感觉遗憾。不断地极速上线新功能或许对于公司短期有益。但对于个人的成长,如果没有不断地总结反思,探索规范与流程,积累技术经验,恐怕百害而无一利。从长远来看,公司的发展应该帮助个人的成长,而个人的成长反过来也可以帮助公司的下一步扩张,互为双赢。
选择与成长
其实总结一下,最大的感受,就是我在湾区遇到的候选人往往都是真的对机器学习感兴趣的,因此更为专注。而在国内的候选人,选择机器学习这个领域的原因更多种多样,有的是真爱,有的是因为给钱多,也有的可能仅仅是跟风。导致面试的结果差异很大。
但是不管初心如何,既然选择了这个领域,就要更关注个人的成长。毕竟每个领域都有上上下下,大浪淘沙,有真本事的才能闪闪发亮。