算法开云 开云体育工程师和软件工程师的区别在哪里他们工作是如何合作的?
Kaiyun App下载 全站Kaiyun App下载 全站Kaiyun App下载 全站算法工程师,前端工程师,大家都是软件工程师。只是细分领域不一样,没有本质区别。
在硅谷,我没听说过算法工程师这个title。Facebook在面试名校PhD的时候也会重点申明来的都得干脏活,不会区别对待。
说说具体的例子。开云体育 开云官网我所在的Facebook Newsfeed Ranking在我13年加入的时候只有不到10个人,大家在做所谓“算法工作”的同时也要负担日常的“非算法工作”,甚至包括代码部署和服务器监控这类偏运维的工作。至于需要自己动手去做数据收集就更不用提了,Facebook第一版记录用户在每个新鲜事上停留多少时间的代码就是我写的,网页端的javascript和后来的Android,算是半个前端了。
说这些不是为了炫耀什么,只是想说明,好的算法工程师必须先是一个好的软件工程师,因为没有什么好的算法是可以脱离工程实践而成立的。
优秀的算法工程师不应自绝于非算法工作,就如同好的软件工程师不应自绝于产品测试。
最后推荐我的另一个回答,宋一松:你实践中学到的最重要的机器学习经验是什么?说的和这个有些关系。
这里可能要稍微clarify一下,这里所说的“算法工程师”特指机器学习、数据挖掘领域所用到的非确定性算法。广义来说,所有的计算机开发工作其实都会用到算法,比如游戏开发、系统开发里用到的经典确定性算法。为了简化起见,后面不会特别区分,所以当后面提到“算法工程师”时,特指的是数据挖掘,机器学习领域开云 开云体育官网的算法工程师。
如果从工程师的角度来看,本质上我觉得并没有太大区别,优秀的算法工程师和其他方向的优秀工程师(比如系统领域或开云 开云体育官网游戏开发领域)都需要去跟踪行业的技术进展,也要求扎实的工程实现能力和数理逻辑基础。比如我很欣赏的一位游戏开发领域的腾讯资深工程师,写得一手好code,也能紧密follow图形学领域的最新技术及学术进展,数学背景也非常扎实。一个好的算法工程师也基本是类似的背景,只不过把关注的技术子领域从图形学/分布式系统改成机器学习和数据挖掘算法相关罢了。所以,没有必要因为这几年AI很火,就专门把算法工程师这个岗位跟其他工程师岗位区分对待。
在国内,因为算法工程师对应的业务形态刚刚起步,相对来说,处于一个供小于求的状态,所以其实有一些算法工程师的工程能力和经典算法能力会略薄弱一些,所以“算法”的比重可能大于“工程”的比重,这在当前的行业背景下倒也不影响短期的职业发展,但是当行业进入到比较健康的状态以后,开云体育 开云官网我会认为算法工程师的“工程”这两个字的比重也要相应提高。
谈这个问题,我们可以把researcher这个职位放进来一起考虑,问题会更清楚一些。
研究员,算法工程师,软件工程师,这三者中,算法工程师相当于研究员到软件工程师的桥梁。
研究员更关注的是理想环境下算法的理论创新,保证算法模型的正确性和创新性;
软件工程师更关注的是支持算法运行的工具的稳定和高效,比如tensorflow这个平台能否稳定的运行,spark平台能否做到灵活扩展,算法所需要的数据能否正确准时的存储到redis、hdfs这些数据库或文件系统中。<a href="http://jiaonichi.com" target="_blank" 开云 开云体育官网target=_blank>开云体育 开云官网
而算法工程师就像一个安装和组装的师傅,把“算法模型”这个复杂的部件“基本正确”的安装到大数据平台这样一个底座中去。
为什么安装的过程是“基本正确的”,不是“准确的”也不是“完美的”,因为算法工程师最主要的工作就是做算法与工程的权衡。比如researcher们希望他们心爱的模型能够实时训练,实时更新,这样模型的效果才能达到理想的状态。但软件工程师们说数据从生产到消费再到落盘整个过程走下来,最大延迟30分钟,researcher们说这太长了,忍不了。算法工程师就可以登场了,看一下能不能把feature的预处理放到spark streaming的流计算过程中,把30分钟的延迟降低到5分钟。数据量太大,导致模型收敛速度过慢,影响模型更新速度,算法工程师就又可以登场了,看能不能做数据并行,能不能用parameter server解决并行训练问题。
当然上面的例子是为了说明算法工程师的工作性质的,比较理想化。实际工作中,算法工程师不可能单独的工作,要始终同研究员和软件工程师们紧密合作,像模型并行化这种事情,少不了平台的支持以及从理论上保证算法的收敛是正确的。大多数优秀的算法工程师也完全具有模型改进的能力。事实上硅谷很多公司甚至没有研究员,算法工程师这样一个明确的职位,即使MIT,CMU的博士加入google也是software engineer,大家都要合作起来实现end to end的服务,把代码写的干净,把业务理解清楚。
我也完全同意@宋一松的观点,算法工程师首先要是一个好的工程师,这也是hulu在晋升research SDE时候的标准,就是你要满足所有senior SDE的条件,再看机器学习的水平。
在我的专栏里我写了一篇文章用雷达图说明了算法工程师、大数据软件工程师、研究员的技能侧重和区别,有兴趣的同学可以看一下。
软件工程师工作内容可以很泛, 从编程到算法, 从架构设计到编码实现. 算法工程师的工作内容偏向数据挖掘(或其他特定领域), 面向的多是开放性问题, 编码实现占得比重不太高, 学习研究不同方法的效果的时候多.
对算法的需求差别在于, 一般软件工程师可能对各种数据结构的操作, 对常见问题的程序化复杂度的把握, 对设计, 编码实现能力, 要求比较高. 算法工程师对特定数据挖掘领域的知识有要求.
通常, 算法工程师负责数据质量部分, 软件工程师负责展现. 展现方式其实也挺开放地, 但大家研究地不多, 据我据知, 还没有多少算法工程师参与.
工作产品:软件工程师输出代码和文档,其中代码是主要产品;算法工程师输出算法模型和描述,虽然通常也是代码和文档,但是目的是为了表达算法。
手段和工具:软件工程师用的是各种编程语言和软件架构。算法工程师也使用编程语言,但更多依赖各种专业上的工具软件,例如MATLAB、各种统计分析软件等等。
关注点:软件工程师关注使用现成算法提供应用软件和解决方案,多数情况下核心算法是算法工程师提供的。算法工程师关注如何解决某一类特定问题,实现某一类功能。
举个例子说明大家是怎么合作的。公司要开发一款多媒体播放器,就是通常说的MP4。算法工程师研究各种视频和音频解码算法,研究各种多媒体文件格式,研究如何用最少的资源实现最快的解码速度。在不是很大的公司里面,算法工程师通常会负责把上面的算法实现成一个软件库,只提供几个很简单的API给软件工程师(通常就是应用软件工程师)。应用软件工程师使用软件库,实现UI等外围功能,形成最终的产品。
扫一扫关注微信公众帐号