首先,我们先看下算法是什么?百度百科中是这样描述的,算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。我们都知道,我们可以用空间复杂度与时间复杂度来衡量一个算法的优劣。那么算法工程师是什么呢?他们就是利用算法处理事物的人。
相对来说,算法工程师是一个比较高端的职位。其要求从业者的专业是计算机、电子、通信、数学等相关专业。算法工程师这一职位要求学历是本科及其以上的学历,大多数是硕士学历及其以上。同时,算法工程师基本上能阅读国外专业书刊,必须掌握计算机相关知识,至少会一门编程语言。
算法工程师根据研究领域来分主要有音频/视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。从研究方向来看,算法工程师又分视频算法工程师、图像处理算法工程师、音频算法工程师、通信基带算法工程师、信号算法工程师等。
纵览各大招聘网站和深入了解社会对算法工程师的需求,我们可以看出算法工程师的职责主要有以下几点:1.参与算法有关项目的技术研究,善于进行规范化的产品开发及技术测试;2.负责图像处理、目标跟踪、动作捕捉等领域的算法研究,保证项目的可行性;3.对项目所需的机器进行调试和优化,指导相关人员的规范操作;4.需要有良好的数学领域基础、一定的编程能力和较好的软、硬件协调基础;5.协助工程部进行生产建设,确保产品的生产技术与质量合格;6.参与制订产品研发方案及后期产品生产技术维护方案。
那么,算法工程师的核心竞争力是什么呢?我认为算法工程师的核心竞争力体现在以下几个方面。
一、工程能力
什么是工程能力?工程能力就是在一个团队中将项目做好的能力。以敏捷开发的思维,按照一定的流程、规范和方法论,在单元测试和自动化测试的基础上,完成一个项目的初版,并在初版的基础上做到快速响应需求和迭代开发。工程能力是一项综合能力,对个人和团队都非常有意义。
要想拥有好的工程能力,首先必备的编程基础是一定要有的。无论是 Java、C++、Python或SQL、shell脚本等,算法工程师至少要精通一种甚至多种。当然,我们最终目的不仅仅是为了学习这些语言,而是为了快速实现,快速迭代,为了解决问题。其次,对于开发平台如各类操作系统,海量数据处理平台如Hadoop等工具要熟练掌握。此外,算法工程师还需要有相对稳定的,可以承担压力的心智,也需具备辨别主次的能力,持续将事情做好。
二、算法能力
一名合格的算法工程师必须要具备必备的算法能力。算法工程师需要有数学基础,对概率论、数理统计、线性代数、最优化理论等课程要熟悉,要有扎实的基础。这些课程是必须要了解或熟悉的,即使无法做到基础扎实,最起码也要熟悉每门课程的理论体系,当用到相应知识点时可以通过查阅资料来解决遇到的问题。下面,我们举些例子。
针对机器学习和深度学习这个研究领域的算法工程师,他们需要掌握常见的机器学习模型(线性回归、逻辑回归、SVM、决策树、随机森林、GBDT、XGBoost、贝叶斯、KNN、K-means、EM等);需要掌握常见的机器学习理论(过拟合问题、交叉验证问题、模型选择问题、模型融合问题等);需要掌握常见的深度学习模型( CNN、RNN、GAN等)。
对推荐算法工程师的大体要求:熟练掌握C/C++和python语言编程,熟悉linux开发环境,有扎实的数据结构和算法设计功底;熟悉推荐业务常用理论和算法,在多个领域(如排序模型,召回模型,用户画像,深度学习等)有三年以上实际工作经验;有优秀的逻辑思维能力和数据分析能力,善于分析和解决问题;良好的沟通能力与团队协作能力;有推荐系统,广告系统,搜索引擎等开发经验;熟练掌握机器学习、深度学习的基础理论和方法,并在自然语言处理任务中有实际应用经验者优先录用;熟练使用一种或几种深度学习框架(如tensorflow、caffe、mxnet、pytorch等),或者熟悉spark、hadoop分布式计算框架等。
对计算机视觉算法工程师的大体要求:有过硬的技术,熟悉计算机视觉(包括分类,检测,分割,跟踪,SLAM和三维重建);熟悉图像或信号处理;熟悉计算摄影学和计算机图形学等;使用过 Theano, Caffe, Torch, TensorFlow等中的一种或多种开源深度学习框架等。
通过我们举的这几个例子,也可以看出算法工程师需要具备丰富的算法知识,需要熟悉相关的算法模型,需要搞懂设计思路和实现的具体细节。
三、业务能力
业务能力指的是处理当前面对的工作内容的能力,是工作能力的体现。众所周知,技术最终是服务于业务的,对业务的洞察是区分搬砖工和建筑师的分界线。所以算法更要和业务紧密贴合,优秀的算法工程师需要有优秀的业务能力,如在完成业务项目过程中所体现的创新能力、决策能力、组织能力、指挥和控制能力、协调和沟通能力。
历史的车轮滚滚向前,技术也在不断的更新迭代,算法工程师要紧跟时代发展,坚持看论文,坚持学习,以实现业务需求为驱动,与时俱进。
综上所述,算法工程师在产业领域中,需要把技术思维转变为以业务需求为导向的技术思维、技术分解思维。算法工程师需要像大夫一样望闻问切,跟客户一起梳理出业务流程中的痛点,找到优化方式。算法工程师不仅需要有对行业整体的判断,还需要对客户有“体检、开药”的能力。换种说法来看,我认为算法工程师的核心竞争力也是学习能力和解决问题的能力的差异。