随着大数据和以深度学习为代表的人工智能技术的飞速发展,算法工程师这个职业逐渐成为国内互联网行业的标配。2016年3月,谷歌旗下DeepMind公司的围棋程序“AlphaGo”战胜职业九段棋手李世石。这场著名的科技秀把人工智能的热潮从学术界席卷到工业界、新闻媒体和广大群众。
外行人眼中的算法工程师是高收入和高科技的职业;而新入行的人往往觉得算法工程师门槛低导致内卷化(人才饱和导致过度竞争)。随着算法相关的工具越来越成熟,很多算法工程师自嘲为调包侠、调参侠,于是也开始有人唱衰这个职业。
本人作为有一些算法研究和实践经验的过来人,想分享一些自己在企业做算法工作的心得,顺便为想入行做算法以及刚从事算法工作的朋友提供一些参考。本文的观点基于个人的工作经验和理解,如有不对的地方欢迎指正。
本文接下来的内容分为六个部分:
1. 什么是算法
2. 算法的应用场景
3. 算法技术介绍
4. 算法工程师的职业定位
5. 算法工程师的职业发展
6. 总结
1. 什么是算法
提到算法,有人可能会联想到人工智能。个人觉得人工智能是个非常大的概念(很多算法技术似乎都可以归类到人工智能),所以为了使叙述更清晰和聚焦,本文会避免用“人工智能”这样的术语,而是尽量用更精确的词汇来描述算法相关的技术。
狭义地看,算法是用计算机程序求解 计算问题的方法。定义一个计算问题有两个要素:输入和输出。
例(素数判定问题):给定一个整数,判断它是否为素数(素数是只能被1和自身整除且大于1的整数)。
以素数判定问题为例,它的输入是一个整数,输出是一个布尔值:“是”或“否”。求解素数判定问题的算法是一个满足上述输入和输出条件的计算机程序。
在实际应用中,首先要明确算法需要解决的具体问题,以及对应的输入和输出,然后才是设计与实现算法。我们可以把一个算法理解成一个满足输入与输出要求的硬件装置或软件模块。从这个角度来看,算法工程师与软件、硬件工程师的工作是相似的:实现满足输入与输出要求的算法(软件、硬件)模块。
算法工程师的工作目标是实现“又快又好”的算法。具体来说,需要关注两个要素:
解的质量算法输出的结果称为“解”。它的解是否“正确”或者说有多好?
解的效率算法的计算时间有多长?
更多关于算法的介绍可以参考经典教材《Introduction to Algorithms》(中文:算法导论),作者:T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein。
前面介绍了算法的基本概念,接下来我们看看算法在商业中的应用价值。
2. 算法的应用场景
算法产生商业价值有两个思路:
产品研发 算法本身是商业产品的一个核心模块。例如,“词典笔”可以直接“扫一扫”书本上的文字就能实现单词或句子的查询和翻译功能。
与传统的词典相比,它不仅提供了更方便的查询方式,而且体积小巧、方便携带。为了实现这样的产品功能,背后的一个核心算法是文本图像识别(称为OCR技术)。它解决的算法问题是这样的:输入一张文本照片,输出照片中的文本内容。我们不难发现,决定这个产品体验好坏的关键因素之一就是文本识别的准确率。
降低业务的复杂性 当企业的规模增大,业务必然会变得越来越复杂。这个时候可能会导致两种问题:
组织运转效率降低,典型的表现就是人力成本高、协作困难、决策流程冗长;
各业务节点之前存在依赖关系,导致需要决策的“变量”太多以及决策“空间”太大。
由于任何一种决策结果都会带来显著的成本,因此寻求低成本高收益的决策变得非常困难。在这样的背景下,只有把复杂的业务抽象成一个个高内聚、低耦合的模块,然后用算法代替人工决策,才能达到降低成本、提高效率的目的。
接下来我们从三个角度介绍一些算法的商业应用:
自动化解决重复劳动。
车牌识别汽车进入单位、小区、上高速、停车等日常场景,管理人员一般都需要记录车牌号以及出入场地时间。有了车牌识别技术,在这些场景下软件系统可以代替人工,精准地记录车辆号牌和出入场时间。
人脸识别人脸识别技术为金融和安防领域提供了廉价、准确且高效的身份核验能力。以安检为例,以往身份核验流程是首先由被检人提供证件,之后检查官做人证对比,最后在后台查询被检人的犯罪记录。整个过程既费人又费时。有了人脸识别技术,被检人只要面对摄像头,系统就可以在1秒内完成身份核验。
纸箱推荐在网络购物中,商品发货时一般需要被装入纸箱。而纸箱的大小对用户体验和成本有着直接的影响。如果选择更大的纸箱,对工人来说装箱比较容易,但是成本高而且容易造成商品损坏;选择稍小的纸箱,对工人来说装箱耗时更长,会降低工作效率。
基于选择纸箱这个频繁操作的场景,我们设计了一套装箱算法,为打包工人推荐最合适的纸箱,不仅节省了装箱成本而且提升了用户体验。
个性化解决用户需求。
内容推荐基于人的浏览行为与“内容”进行匹配,其中内容包括文章、商品、广告等,素材形式有文本、图片、语音和视频。好的推荐算法可以让用户在APP中看到更多自己感兴趣的内容,就会沉迷其中难以自拔。
换句话会说,用户在APP上停留的时间越长,APP就可以把更多的广告呈现在用户面前,于是赚取更多的广告费。
地图导航生活中出差、旅行、接人、上班等场景大概率需要用到地图导航。输入出发地、目的地、交通方式等信息,背后的路径规划算法会根据地理信息自动帮我们规划出一条路径,甚至能避开拥堵和限行。
由于出行是人们的刚需,因此地图导航是人们的必需品。它的商业价值不仅体现在广告的触达能力,更重要的是可以直接获取珍贵的“线下”数据(出行数据),从而为其它的商业决策提供有价值的输入,例如商业选址、餐馆和景点的推荐等。
客服机器人在电商业务中,客服需要回答用户的售前和售后提问,例如商品、活动、物流、保修等各种咨询。尤其是在大促期间,常常会出现用户咨询量过大导致等待时间长的问题。
我们通过知识图谱技术构建商品和物流相关的知识库,然后把用户经常咨询的问题进行分类,基于自然语言处理的技术对用户的提问进行解析和回答,从而在一定程度上提升用户体验并降低客服成本。
系统化解决复杂问题。
客服排班给客服安排上班的班次。当客服人数多达百人时,这个问题往往变得非常棘手。原因是现实中考虑的约束条件非常多,例如:
每个班次的客服人数不能低于指定的数量;
一个客服每个月必须休息8天,至少保证每月一次2天连休;
客服安排晚班之后,第二天不能上早班(因为需要休息);
一天同一个人只能安排一个班次;
每个人的晚班天数差异尽可能小;
当客服规模达到一定数量时,这个问题的复杂程度显然出过了人的经验能力。我们因此研发了一套排班算法来解决上述问题。
库存调度用户在网上下单之后,商品一般会从用户所在区域的仓库发货,称为本地发货。由于不同客户购买的商品和数量可能不同,因此单个仓库的商品可能会发生供需不均的情况。
我们需要对全国各仓库之间的商品进行调拨,目标是提高仓库的本地发货率。这样一来不仅能节约配送成本,而且能提高配送时效。
库存调度要解决如下问题:
哪些商品需要调度?
从哪调到哪?
调拨量如何计算?
安排几辆货车?
实际中需要考虑的限制因素也非常多:
箱规:按整箱调拨;
调拨限制:有些商品在只能调拨到特定仓库;
仓库产能:仓库每日可调拨的件数有限;
货车容量:货车的长宽高有尺寸限制;
大促和平销的目标:平销控成本,大促控本地缺货;
我们自研了一套调拨系统,可支持日均10万商品的调拨计划自动生成。试想一下,如果这背后没有算法的支持,我们的人力成本、沟通协作成本以及软件成本将会随着业务的发展呈指数增长。
用户触达随着互联网技术的发展,商家触达用户变得越来越容易。常见的线上触达方式有APP内的消息推送、短信和在线广告。在这样的背景下,商家触达用户需要从全局的角度来考虑,否则不仅浪费成本而且可能带来极差的用户体验。
例如:一个用户可能在同一天内被短信、消息推送和广告弹窗的骚扰,从而引起用户对商家的反感。因此,我们触达用户时需要对四个要素做决策:触达人群、触达时机、触达方式和触达内容。
由于不同的触达方式对应不同的成本与收益,我们自研的这套全渠道触达决策系统不但可以从全局优化“投入产出比”,还能为被触达用户提供个性化的文案和红包等权益。这背后的算法系统除了要考虑商业价值和用户体验,还要考虑如何在现有业务中以低成本、低风险的方式进行落地。
通过前文介绍的案例,我们可以看到算法既能作为商业产品的核心模块输出价值,也能简化业务、降本提效,从而让业务更快更好地发展。值得注意的是,算法是一个宽广的技术领域,涉及的技术方向较多。下面我们列举一些常见的算法技术。
3. 算法技术介绍
本节介绍的算法技术(或方向)仅限抛砖引玉,不宣称公认的分类,也谈不上深刻的理解。技术方向之间或多或少有重叠,也无法涵盖所有算法方向。之所以列出这些方向,要么出于本人在工作中发现了它的应用价值,要么源自于本人的兴趣。
算法理论
这里提到的算法理论实际上是指算法相关的基础知识,主要分为两块:1. 数据结构;2. 算法设计与分析。数据结构是算法的基石,掌握必要的数据结构才有可能去实现一个算法。前文提到算法工程师还关心解的质量和效率,而算法设计与分析的理论可以有效地指导我们如何做这件事。
在实际工作中,或许90%以上的项目都可以使用现有的算法工具求解,而不需要我们亲自设计算法。但是一旦遇到真正棘手的问题,它需要我们有能力应对,这也是算法工程师的价值所在。
我们曾经做包材推荐项目时需要求解一个三维装箱问题。根据算法理论,三维装箱问题是一个 NP-难 问题。这意味着(在NP不等于P的假设下),它不存在“又快又好”的算法(即,多项式时间的精确算法)。于是我们设计算法方案的时候分两部分考虑:
当问题规模较小时采用精确算法;
当问题规模较大时采用启发式算法。
在求解小规模三维装箱问题时,我们对计算效率有较高要求。当时开源的求解器不能满足我们的需求,因此我们决定自研一套算法。这个时候就要求我们对算法设计的方法有一定了解。在项目中,我们用到了 规约(Reduction)的技巧,把一个三维装箱问题转化成 图(Graph)上的搜索问题,然后利用图相关的数据结构简化三维装箱操作。
概率统计
数据往往是企业的宝贵资产,因为它不仅可以为商业决策提供依据,还是业务的护城河。数据之所以会有价值,还依赖于正确的数据加工和使用方法。而概率统计提供了描述数据规律的方法,利用数据的规律,使得我们可以预判未来的趋势、提高决策效率、降低决策成本。
虽然这是个大数据时代,但不意味着我们想要的数据应有尽有。在实际项目中,我们常常面临样本量不足的问题。以销量预测为例,假设我们要预测每个商品在 “双十一”期间的销量。这个时候我们发现一共才搞过四次双十一活动。换句话说,每个商品关于历史双十一的销量最多只有四个样本点。如果简单地拟合这个规律,在实际中容易出现过拟合的问题,即导致预测值与真实值偏差很大。
在这种情况下,我们可以考虑结合主观经验与客观事实。例如,假设双十一的销量与平销的差异服从某个规律,然后借助历史上几次双十一的销售数据来修正这个规律。这套方法在统计上称为贝叶斯估计(Bayesian Estimation):主观经验得到的规律称为 先验分布,利用客观事实修正后得到的规律称为 后验分布。贝叶斯估计提供了一套主观经验与客观事实结合的方法,能有效地弥补实际情况下样本量不足的问题。
机器学习
网络上每天生产着海量的文本、图片、语音和视频信息,它们也是企业珍贵的数据资产,有着巨大的商业价值。那么如何用算法对这些信息进行分类、理解以及分发?
深度学习普及之前,业界主流仍然是采用基于统计的方法处理这些数据,即,利用概率分布函数来表示数据的规律。注意到数字媒体这一类数据的维度非常高,例如,一张手机照片的像素点就高达千万,好处是它能表达的内容非常丰富。但是从算法的角度来看,这一类高维数据非常难以处理,因为已知的概率分布函数难以表达这种规律,即使这些规律在人看来很简单。以文本识别为例,人可以快速识别出照片中的文字,但是我们很难找到一个函数把图片上的像素值和它表达的文字关联起来。
而深度学习提供了一种“逼近”这种复杂函数的方法。它通过定义“元函数”(称为激活函数)和仿射变换,然后利用海量的数据来拟合出这种复杂的函数关系(这个步骤称为“训练”),从而可以表达“样本”与“标签”之间的联系。
例如,通过输入大量包含水果的照片“训练”一个深度学习模型,从而让计算机有能力识别照片中的水果。这背后并不是数据让计算机有了真正的智能,而是它把照片的像素值作为算法模型的输入,用类似于最小二乘回归的方法拟合出了一个复杂的函数,把像素值与“水果”之间的规律表达出来。
深度学习这种自动化的拟合能力使它可以在海量数据中学习数据与标签之间的联系,因而非常适合用来解决分类问题,例如人脸识别、图像分割、语音识别、机器翻译等。随着机器学习工具和相关计算硬件(GPU、TPU、FPGA等)的发展成熟,机器学习应用的门槛进一步降低,模型的训练和部署已经变得非常便捷。我们有理由相信,未来有只要数据的地方就有机器学习算法创造价值的机会。
建模与优化
数学建模是一种把复杂问题抽象化的技术,它用数学语言描述现实世界的问题,使得我们可以用系统的方法对它求解和分析。而优化方法可以看作是求解数学模型的工具,例如前文提到的深度学习技术,本质上是用梯度下降的方法解一个优化问题。
在企业经营中,利润和成本结构往往是非常复杂的。以网易严选的电商业务为例,我们的业务链路包含商品研发、采购、仓储、质检、配送、营销、渠道和售后。业务节点之间的成本(或利润)可能同时存在依赖和冲突的关系,因此各节点做好自己的业务不一定意味着整体业务会好。
如何站在全局的角度来思考并解决业务中的复杂问题?需要分三步:
充分理解业务;
把业务问题抽象化;
用数学语言表达然后求解。
构建数学模型可以使用一套标准方法,即梳理数学模型的四要素:参数、变量、目标和约束,其中参数是指问题的输入。
以数独游戏(Sudoku)为例,把数字1-9填入下图的空格子中。
填入的数字必须满足三个条件:
每个区块包含数字1-9;
(图中灰色方框包含的3×3小格子代表一个区块)
每行包含数字1-9;
每列包含数字1-9。
问题的 输入参数 是图中给定的数字;变量 是空白处需要填入的数字;约束 是上述三个条件。这个问题没有优化目标。这样一来,我们可以得到求解数独问题的数学模型:
利用通用的求解工具求解这个数学模型,即可得到数独问题的解。
我们研发的决策产品, 例如库存平衡系统、自动补货系统、排班系统和全渠道触达系统,都是以抽象的数学模型为基础,并持续地迭代模型和算法。这些算法产品在提升业务目标的同时,推动业务沿着低复杂性的方向发展。
个性化技术
在电商业务中,一个杀手级的功能是可以为用户带来个性化的购物体验(俗称“千人千面”),因而使得网络购物比线下购物更高效。个性化技术的典型代表是内容推荐技术,在电商业务中,推荐的内容以商品为主。
为了实现更精准的推荐,技术层面要不仅要参考商品和用户的特征,甚至还需要考虑营销活动、库存、用户体验等因素。这背后可能还需要图像处理、音视频处理和自然语言处理等技术的协同。
以生成商品页面为例,一般它包含了卖点文案、图片和视频介绍。为了给用户呈现个性化的文案、图片和视频风格,从而刺激用户下单,我们用自然语言处理技术抽取商品信息并生成卖点文案,用图像生成技术制作不同风格的商品图片。
通过算法挖掘商品评论,我们可以自动化地提取商品卖点并呈现给用户,促进用户下单;对差评原因分类,从而改进商品和提升购物体验;通过建立商品知识图谱,用对话生成的技术回答用户的售前和售后提问,从而提升用户体验并降低客服成本。
回顾前文提到的深度学习技术,它的成功离不开它在图像、音视频和自然语言领域的突破。而个性化技术本质上也是在海量非结构化数据中拟合人与内容的联系。因此,应用深度学习技术可以有效地实现多种场景下的个性化能力,例如猜你喜欢、新品推荐、个性化文案等。
更多的技术
前文提到的算法技术只是工业应用中的冰山一角。还有非常多不同的算法在工业界中大放异彩,例如计算机图形学用于动画、游戏和工业设计中的三维建模,有限元分析用于建筑和桥梁设计,同步定位与地图构建技术(SLAM)用于机器人和自动驾驶等等。
世界在变化,用户需求在变化,因而企业面对的问题也在不断变化。技术人员应该意识到没有哪门技术能解决所有问题,而技术交叉越来越普遍,因此我们需要保持技术嗅觉和好奇心,坚持学习,然后用适合的技术解决问题。
4. 职业定位
前文介绍了一些算法技术,但实际上并没有在技术细节层面展开,而是始终围绕技术在商业中的应用价值,目的是想强调两点:一是在企业中技术必须创造商业价值,这样才能让企业在竞争中领先,同时促进行业的进步;二是算法工程师的职责以“应用”算法为主,不能脱离业务。
我把算法工程师分为三种类型(我承认可能过于狭隘,毕竟某些企业还存在学术型的算法人才):
产品研发型
为产品研发提供技术支持。这种情况下,算法一般是商业产品的一个模块。例如:词典笔的文本识别功能、汽车的自动驾驶系统、电商APP的搜索功能等。
产品研发型的算法工程师主要关心产品的技术实现,用算法技术为用户提供极致的体验。这种情况下,只要产品卖得好,算法的价值就能充分体现。因此,产品研发型的算法工程师一般出现在商业模式比较清晰的业务(例如卖产品、卖广告)。
业务优化型
当业务发展到一定阶段可能会面临两种局面:一是规模太大,例如用户数、员工数、设备数、产品数等非常庞大;二是业务复杂,业务节点之间依赖与竞争并存,导致成本和利润构成复杂。这样会造成业务的运转效率降低,企业成本增加。
在这样的背景下,算法工程师需要为企业降本提效。例如:
实现业务节点的自动化;
做精细化的决策;
业务建模与流程仿真。
以零售中的补货为例,库存量的多少直接影响到企业的成本和利润。一般来说,从下采购单到货品入库需要制造和运输时间(称为提前期,短则数周长则数月),因此商家需要预估未来一段时间的销售量,依此计算采购量。由于预测不可能精准,所以会导致计算的采购量与实际需求有偏差。采购多了不仅占用资金而且会增大库存积压的风险;采购少了就会造成缺货,从而损失销售利润。因此,采购量的计算模型直接影响到商家的成本和利润。
类似这样的决策问题在零售业中比比皆是,算法工程师需要建立符合业务的数学模型,用科学的方法为企业做出最优决策。
业务优化型算法工程师的价值在于创造“增量”价值,即带来成本的节约、效率的提升或利润的增加。在日常工作中,我们需要评估算法项目带来的增量价值,避免把过多的精力放在价值不高的事情上。
需求洞察型
技术研发最难的地方有时候不是解决问题,而是发现问题。比如复盘业务数据的时候,发现用户规模或经营利润不达标,这个属于业务症状。那么造成这些症状背后的主要原因是什么?这是我们需要回答的问题。算法工程师要有能力从数据的角度发现问题、抽象问题以及提供解决方案。
有人可能会质疑,难道这不是数据分析师的职责吗?没错,数据分析师当然可以做这件事。但是对其能力的要求可能不仅限统计分析,还要有一定的建模和计算能力。事实上,发现技术问题的本质是定义技术问题,而定义技术问题需要对技术有较深的理解。
下面我举一个例子来说明这个观点。我们曾经做一个包材项目,目标是降低消耗纸箱的成本。我们的技术思路是研发一套三维装箱算法,给仓库打包的工人推荐最优箱型,从而节省装箱成本。事实证明这套算法确实产生了显著的效果。那么后续如何进一步降低纸箱成本呢?
经过思考我们发现,这套三维装箱算法还可以用来优化纸箱的尺寸,从而达到进一步降低纸箱成本的目的。之后我们用算法设计的新箱型,用历史订单进行了一次模拟,评估发现确实可以显著降低纸箱成本,于是推动了新箱型在业务中的落地。回顾这个案例,我们从纸箱推荐问题出发,进而研发纸箱设计算法。这个研发需求的变化来源于我们对业务的理解和技术的认知。
算法工程师走到这个阶段,除了对技术能力的要求,还需要承担部分数据分析、产品设计甚至是业务操作的职能。从另外一个角度来看,数据分析师、产品经理、业务人员也应该掌握一些算法能力,以便从技术角度思考问题或者让技术人员更快速地定位问题。
小结随着技术工具越来越成熟,技术应用的门槛越来越低,个人觉得未来对复合型人才的需求会越来越旺盛。作为算法工程师的你,不妨问自己几个问题:
我们的商业产品是什么?它是否以算法为核心的产品?
我参与的算法项目,产生的商业价值是多少?
我们的商业模式是什么?业务的机会点在哪?
企业在不同的发展阶段和不同的项目中对算法人才的要求是不一样的,因此要求我们能够在不同角色之间切换。技术是我们的出发点,但解决问题才是我们的终点。只有站在商业的角度思考技术,才能洞察需求和创造商业价值,进而提升自身的竞争力。
5. 职业发展
技术在进步,需求在变化。只有洞察变化,才有可能引领技术创新,进而提升自己的职场竞争力。下面我站在职业发展的角度,探讨一下算法工程师需要具备的能力(我承认又狭隘了,毕竟作者本人菜鸡一只)。
技术能力
技术能力是技术人员的立身之本。站在算法的角度,这里的技术能力主要是算法应用能力,包括阅读论文、算法实现、工程化以及相关文档的撰写。
技术人员常见的一个认知误区是技术大于一切,认为只要技术做好了,就应该得到认可或奖励。事实上,技术在大多数情况下只是商业中的一环,技术做得好不能确保商业上的成功。
以自营电商为例,技术人员做一款功能强大的购物APP不难,但同时必须有商品研发、供应链和物流配送才能完成一个极小的商业闭环。此外,要想商品卖得好得有市场和运营团队一起发力。在这样的背景下,购物APP只是诸多商业环节中的一个节点,因此仅仅依赖软件研发技术显然不足以实现商业上的成功。好的技术团队必须始终围绕各商业环节,有能力定位问题,并研发工具有效地解决问题。
业务能力
作为算法工程师,在立项和需求评审时,需要有能力评估项目为业务带来的价值以及算法在整个项目中的价值,从而避免把精力浪费在“投入产出比”不高的事情上。如何做到这一步呢?除了有扎实的技术,还需要深入了解业务。
需要了解的业务知识包括(但不限于)商业模式、业务流程、业务限制以及与当前业务相关的技术等等。算法工程师了解业务的另一个好处是洞察需求,解决问题的同时可以发现更多的技术问题,从而推动业务的进步。
技术人员最难跨越的是从技术能力到业务能力的提升。有两方面原因:一是技术人员主观上不太愿意处理业务问题(扯皮的事情较多);二是技术人员晋升和跳槽时主要被考察的还是技术,因此业务能力在有些技术人员看来短期的收益不高。
架构能力
架构能力是一种解决复杂问题的能力,它需要考虑业务的现状和未来,把复杂问题分解成简单问题,然后给出解决方案。与软件架构相比,算法架构更偏向业务,不仅要对业务进行建模和抽象,还要考虑工程实现,以便技术方案在实际业务中落地。因此,良好的技术能力和业务能力是算法架构能力的基础。
算法相关的技术项目可能涉及到与其它技术工种的配合,例如:产品经理、数据分析、数据开发、前端、后端、测试、运维等。因此,算法工程师设计的技术方案应该考虑到算法模块与其它技术模块的解耦与协同。
算法工程师做解决方案时应该从全局出发:一是技术上不仅考虑算法而且还要考虑工程实现和产品化(切忌手里有锤子,看什么都是钉子的想法);二是从整体业务的角度考虑项目带来的收益。例如,假设推荐系统的重构可以带来推荐模块的转化率提升。那么这件事情一定值得做吗?我们还应该评估这个提升效果对大盘利润的影响。如果对大盘利润的提升有限,或许应该把精力投入在更有价值的项目中。
管理能力
在互联网行业,多工种协作是常态,但管理能力却恰恰是技术人员最容易忽略的一项能力。这里说的管理能力不是站在管理人的角度,而是站在取得业务结果的角度。它主要体现在:沟通协作、项目管理、目标管理和风险管理。
简单来说,就是把自己负责的事情做好而且讲明白,即:
把要做的事讲清楚;
按要求交付工作内容;
把业务结果讲清楚;
把风险讲清楚。
我在工作中发现,不重视管理能力的技术人员常常面临这样的尴尬局面:辛辛苦苦写了很多代码,最后项目却没有上线;或者项目上线了却说不清收益。然后看着自己的同事,觉得他代码能力不如自己,研究能力也不如自己,却屡次升职加薪。于是内心抱怨着命运的不公:写代码的不如写PPT的!
管理能力的提升不是一朝一夕,希望算法工程师们重视管理能力,在实际项目中不断磨练自己。说不定升职加薪不过是水到渠成的事。
6. 总结
本文花了较大篇幅介绍算法的概念、应用场景和算法技术,目的是强调算法技术必须创造商业价值。随着科技进步和全球数字化时代的到来,商业决策只会变得越来越复杂,而算法产生价值的空间一定越来越大。
从前文提到的应用场景,我们看到算法工程师这个职业的工作内容是非常多元化的。夸张地说,算法工作简直没有边界,这也对算法工程师提出了更高的要求。我总结成两点:
1. 算法工程师有三种类型:产品研发型、业务优化型和需求洞察型。企业在不同阶段以及不同项目中,对算法的需求是不同的。我们需要有能力洞察需求,并按需切换自己的角色。
2. 从职业发展的角度来看,算法工程师需要掌握四种能力:技术能力、业务能力、架构能力和管理能力。业务能力和管理能力非常重要,但往往容易被技术人员轻视。
最后声明一下,文中的观点基于个人工作经验,由于个人经历的狭隘和认知的不足,难免有不正确的地方,欢迎读者指出。