这样一个好问题居然只有一个抖机灵的回答,我来快速抛砖引玉一下。这个问题我觉得可以从三个层面上来说:一位合格的AI算法工程师,首先要是一位合格的职场人,其次要是一位合格的工程师,最后才到AI算法工程师。很多新迈入职场的同学问题并不出在最后一环,而是在于前两部分。所以下面从这个三个方面展开聊聊。
合格的职场人
这点看上去显然,但恰恰是很多初入职场的同学最为欠缺的。从学生思维转变成工作思维,这是很多新入职的同学迈不过去的一个坎。具体来说,合作能力,沟通能力,展示能力,这些软性素质是在职场顺利工作的根基。
合作能力
很多同学在学校的研究工作基本上是和导师单线联系的模式,虽和实验室同学有沟通合作,但一般不会超过三五个人的范畴,鲜有同学能真正接触并参与到大规模的产品,并了解到最终deliver一个产品背后不同职位的分工合作。工程师在这过程中是重要的一环,但不是唯一的一环。甚至在复杂的系统中,工程师负责工作内部也是有诸多的上下游合作。能够站在上下游的立场和需求上思考问题,能理解不同角色的苦衷,这合作就已经成功了一大半了。
沟通能力
接上一点,为了实现高效的合作,在公司中每一位同学必须保持高效的沟通。大家有一个常见的误解便是沟通能力强弱更多是由每个人的性格决定,而我认为有效的沟通是可以通过后天的刻意训练来习得。沟通的本质是在正确的时间点以正确的方式传达正确的信息。这其中的每一点都不是玄学,而是可以通过具体示例和训练来说明的,这里就不展开了。
展示能力
这一点如果是博士或者科研做的比较多的同学应该深有体会。在工作中,对展示能力的要求其实并不比科研要弱。良好的展示能力是前两点的基础,这既包括讲也包括写。工程师需要良好的展示能力来讲清你的想法和工作。小到组内的工作汇报,大到参加大型公开会议做报告其实本质都是一样的。展示能力并不是堆砌复杂的辞藻,华丽的图表,而是清晰的逻辑与准确的措辞。其实严格来说展示能力的培养不一定要到工作之后才可以开始,抓住每一次做presentation的机会,甚至每一次组会的机会,不要害羞不要害怕,相信在入职的时候你就已经比同期的同学强一截了。
合格的工程师
工程师在一个团队中的角色是problem solver,也就是为了达到产品或者系统设定的目标,去把设想变成现实的人。除了扎实的专业能力之外,要进阶还有以下几个我觉得重要的方面:
项目中的全局观
前面提到工程师在一个大的项目和产品中往往需要和不同角色配合,那么主动思考技术怎么能贡献于整体项目目标就尤为重要。以项目目标为指挥棒,而不是自顾自地考虑所谓高大上的技术方案。用最简洁的技术解决问题这恰恰是内功的体现。甚至很多时候,由于各种客观条件限制,没法去选择技术上最合理的方案来执行。在此时如何取舍来达成目标,就更考验工程师的智慧和全局观了。
定义问题的能力
在工作中,我们遇到的问题会是多种多样的。不像在学校,往往解决的是一个定义得非常清晰的通用问题。在工作中,由于产品和项目需求多样,我们要解决的是一个特定场景中的细分问题或者是一个可能不复杂但是全新的应用。虽有各种公开的论文或者代码可以参考,但生搬硬套往往都不会是最优方案。在解决问题之前,我们要先考虑清楚这个问题的输入输出是什么?和已有的通用问题区别是什么?有什么样的先验知识可以利用优化问题或者简化问题?来自产品的问题是怎样抽象成一个严谨的描述?准确地想清楚要做什么事情项目就已经成功了大半。
独立解决问题的能力
在解决问题的基础之上,还有重要二字:独立。学生时代以上课学习为主,非博士的同学可能很少能有独当一面来解决问题的机会,过程中往往也多有指导。工作中,要解决的问题可大可小,但切记做一个让同事和领导放心的靠谱的人。我们经常会谈到一个词,管理成本。这并不是指一位同学具体解决问题的技术能力如何,而是在解决问题的过程中,你的leader和同事需要花费多少精力。管理成本越低的同学,在解决问题过程中需要的指导精力越少。理想状况下只需要leader交代清楚要解决的问题,便可在解决问题的过程中独立规划,自主沟通。如有困难,也可以整理好并及时主动提出需求。要达到这一点,其实是需要综合以上所有的能力。
合格的算法工程师
最后的最后才会到算法工程师,这毕竟是最细分的环节。每个公司对算法工程师的定义不尽相同,所以就不谈具体的技术细节了,只能从个人角度谈谈。有以下觉得比较重要的三个点:
优秀的实现能力
这一点其实已经老生常谈了,算法工程师哪怕是算法科学家都需要有能力把想法变成runnable code。根据团队分工和项目不同,有的需求是只需要证明想法可行,有的是需要一个prototype,有的也可能需要直接推到产品或者上线系统中去。无论是哪种情形,有优秀动手实现能力的同学都会占有巨大的优势,哪怕就算是算法不可行,实现能力强的同学也可以快速试错快速迭代。这样的能力无论何时在何团队都会是宝贵的。
除此之外,实现能力不仅仅局限于写出来,写的快,还应该包括写得好,写得美。把代码写得简洁易于维护,可能并不会直接帮助到算法研发,但是从长期来说,这是在一个周期较长的项目中保持效率很重要的一点。
对前沿进展保持追踪
算法工程师不同于其他职位的工程师,最起码在现在这个阶段技术迭代的速度是以月为单位的。所以保持前沿的追踪是非常有必要的。但不同于做科研,算法工程师了解前沿的目的不一定是要在此基础上继续开拓创新,而是能对已有的技术深入理解,去伪存真,以便更好地在业务中为我所用。当然对待新技术也不应该盲从,而应该看清想清之后再动手。最好能有同事朋友针对paper进行讨论和critique。
扎实的计算机原理基础
不了解算法部署的平台谈研发高效的算法就像是空中楼阁。虽然这可能在初级算法的研发中并不明显,但是会成为很多同学进阶中的一道坎。这一点对于非科班转行来做算法的同学尤甚。相比于应试教育式的学习,更重要的是理解系统为什么被设计成了现在这个样子,在这样的过程中做了什么样的取舍,以及作为上层用户这样的取舍对算法设计意味着什么。所以不用担心,补习工作中所需要的知识,这个工作量是远比学习一遍本科计算机专业课要小很多的。
以上是我在这几年的工作中总结出的部分想法,希望能够帮助新入职场的算法同学们少走弯路,也祝愿大家能够在产品和项目中发挥更大的价值。
来源:知乎 www.zhihu.com
作者:Naiyan Wang
【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载
此问题还有 7 个回答,查看全部。
延伸阅读:
AI算法工程师和AI工程师有什么区别吗?