公司里的算法工程师是在组合使用现有算法,还是设计新算法?zz
所谓算法工程师,大致的工作范围是算法研究+工程实现两部分,不同的人在不同的环境下各有侧重。
第一部分,在目前国内互联网公司的环境里,说算法研究,其实更多的工作是调研、比较、挑选、适配、评估和决策等等,与其他技术领域的技术选型和规划并无本质差别。从学术意义上来看,很难说是创新或设计新算法;但从实际的效果来看,这种做法是经济而高效的,一切围绕场景需求和实际的使用效果出发,利用有限的资源取得最大收益。并且,虽然每一个环节的创新性不强,但综合各个环节的效果,未必就不是真正的创新。
专利领域还有发明专利和实用新型两种呢,恰到好处的解决实际问题,可以称得上是创新。另外,如果你发现面临的问题没有先例可循,现有的算法都不合适,并且,你觉得这是个真正的有意义的问题,你也有能力取得突破,那么恭喜你,你站在巨大机会的边缘。具体例子请参见二十年前 PageRank 算法诞生的过程--- --- 当
然,也有人觉得 PageRank 算法算不得创新,你觉得呢...
第二部分,工程化的部分其实是绝大部分算法工程师每天的日常工作,收集数据、清洗、结构化、模型实现、debug、模型训练、观察 bad case、调整参数、重来一遍、再重来一遍... 没有经历过手工清洗数据肉眼观察参数被低级 bug 折磨得寝食难安的算法工程师不足以言人生。和开发工程师稍有不同的是,算法工程师的产出周期更长,节奏更慢,尤其是在接触到一个全新问题的时候,所需的前置准备时间更多。但无论如何,工程师就是工程师,要对自己的产出负责。
以上是普通的算法工程师在一般场景下的工作状态,除此之外还可能有各种例外的情况,比如有偏底层算法研究和探索的,当然更合适的称呼是科学家或研究员;比如有偏计算平台架构设计和工程实现的,他们和系统工程师走得更近一些;还有偏数据和分析方向的,等等。无论如何,有一点可以确定:不看 paper,不写代码,算不上合格的算法工程师。