一个算法工程师的日常是怎样的?比如思考写代码的时间分布是怎样的?linyinmobayu

在学校时,除了每天宅在实验室,其实周末的我是这样的!

但是毕业时,每天重复着读论文—>写论文—>改论文—>改论文—>改论文...(大概也就是"最终版.doc"慢慢变成“最终最终绝不修改版v99.doc”)而已,然后我就变成了这样!

从学校毕业之后,工作的日常节奏就变得紧凑了许多。先说下日常节奏吧,每天大概9点半到公司,到公司的第一件事情,就是查看一遍自己的线上作业是否正常,如果有作业挂掉、或者数据不正确的话,那...debug的一天开始了....运气好的重启一下,一上午就过去了....运气不好的话,一天就过去了...

ok,如果没有异常,那就查看一下邮件,接着写写今天的机会,有时也读读论文、开开早会。

中午午休的时候,我经常会找个安静的地方,发发呆...然后下午两点就开始一天的coding....

晚上的话,根据自己的工作排期进度,日常会在9点左右下班吧。最近看到了PDD姑娘的事情......让我开始了懂得了惜命....跑题了跑题了....

首先,个人习惯是做事情之前要理解自己在做一件什么事情,很多业务背景上的限制,会决定后续整个算法建模的方向或者优化方向,所以做好提前的沟通是必不可少的!

其次,整体思路和架构有了之后,数据上的麻烦事情就来了,和数据竞赛中的数据集不一样,生产环境的数据可谓是“脏乱差”,数据埋点的不规范、采集系统的bug、业务系统的问题、数据作业的延迟等等都会给训练样本的生产带来极大数据清洗难度。让我从一个淑女变得经常想说F开头的那个word....

最后,又回到了每天检查和监控稳定的轮回里....

SQL:离线数据、实时数据的提数工具,没这个基本什么都做不了...

Spark:一些离线数据的复杂逻辑处理,需要他来处理。

TensorFlow:不用介绍来吧,codeing的主要框架,当然还有Pytorch。

Docker:线上模型部署,模型服务的载体,dockerfile了解一下呀~

Pandas:接口和函数特别多,遇到问题百度一下,比自己重写好得多的~

....

工作后,变得和学生时代不同了,不会想着去逛街了!

周末的早上偶尔偷个懒,早上10点起床,然后开始了自己“深圳女孩”的一天!

在人工智能算法这个领域,技术迭代是非常快的,你在学校学到的,其实是学习的能力,而不是某行代码怎么写,所以不断的跟随前沿和掌握新的技术,是很重要的。不要老想着摸鱼,虽然摸鱼一时爽,一直摸鱼一直爽...我见过好多算法工程师的混子,他们的一天用两个字就可以概况了....

目前笔者已经在互联网行业从事机器学习方向三年有余,经常也被问到做机器学习算法工程师是一个什么样的体验,同时也常常在其他平台上看到其他人问类似的问题。于是提笔写下此文,供有志投身于这个行业的人参考。

读数学博士的时候,通常的日子是这样的:

在互联网公司做机器学习的时候,通常的日子是这样的:

根据行业的PPT或者业务中的某些痛点来提出技术方案->然后开始收集数据,不仅要问遍组内,还要去其他组收集各种各样的需求->根据之前的技术方案来进行数据的预处理->撰写特征工程->训练模型->调参->调参->重新收集数据->数据的预处理->收集更多数据->调参->调参->调参->…->放弃。。。。

就做机器学习的经验来看,通常来说在做业务之前,一定要清楚的弄明白项目的业务需求是什么,弄清楚这个问题是什么比一开始就写代码重要得多。意思就是在回答问题之前,一定要把问题的内容弄清楚。有的时候,虽然看上去是一个很大的需求,但是实际操作起来的时候使用一些简单的办法也能够达到项目指标。有的时候,虽然看上去很简单,但是实际操作起来并不是一件容易的事情。从之前做理论数学的经验来看,通常数学里面的一些问题是是非题,不能够添加条件的。在PDE等方程领域,定理的条件越多,表示定理越不值钱。不过在工作中,这些条条框框会相对减少很多,只要能够达成项目目标,无论是添加样本,添加特征,添加服务器数量其实都是可以的,并且要把机器学习模型和业务指标有机结合才能够达到最终的项目指标。

一般搞数学科研的时候都是单打独斗,通常来说都是自己干自己的事情,别人也没办法帮自己。但是在工作中是不一样的,工作中除了干好自己的事情之外,周边的很多资源其实是可以在一个合理的范围内去争取的。无论是人员的数量,还是人员的种类,只要最终能够达成项目目标即可。无论是算法人员,还是开发人员,产品经理,最终都是要为一个项目的结果负责的。之前听过一句经典的话“失败的项目里没有成功的个人”,因此,无论怎么做,最终都要保证项目尽量成功。

而在机器学习算法工程师的日常生活中,除了上面的小段子之外,其实最重要的是样本层和特征层的处理工作。在学术界,都是使用开源的数据,别人都已经完全标记好了,学术圈的人通常来说只需要在这些数据的基础上提出更好的模型,更创新的算法即可。但是在工业界就完全不一样了,不要说有人帮你标记数据了,有的时候连数据在哪里都不知道,数据的质量如何也不知道,因此更多的时候是进行数据的处理和清洗工作。之前做一个项目的时候,准确率和召回率始终上不去,但是等把样本里面的脏数据清理掉之后,模型的效果瞬间提升了一个档次。在脏数据面前,再好的模型都是没有用的,在训练模型之前,一定要先看一下数据层的问题。

除了数据的问题,通常来说在一些场景下,样本的数量并没有那么大,因此深度学习等方案不一定特别适合。在这种情况下,一般就会使用传统的机器学习方法,并且会使用一些基于业务的特征工程。这种时候就需要机器学习从业者对业务有一个精准的理解,只要业务理解得好,有的时候写一些简单的规则就可以解决问题。特征工程也是机器学习里面的一个重要问题。

如果是在工业界的话,编程能力是非常重要的。因为从事算法的人通常来说会有一些算法上的优化,工程上的改进,数据分析之类的工作。在这种情况下,首先需要有一定的业务直觉。而业务的经验积累需要通过各种各样的基础数据提取,在海量的数据分析工作中逐渐积累的。在这种情况下,提取数据的工具就是必须要掌握的,例如SQL等。其次,分析数据的工作也是必须要具备的,无论是使用SQL来进行分析,还是使用Python来做数据分析,都是自行编程解决的。再次,在从事机器学习方向的时候,不可避免的就会进行算法的效果对比。而在这种情况下,算法的效果对比是需要机器学习从业者通过写程序来实现的。最后,工业界的算法通常来说都强调上线,如果能够自行把离线,上线,效果验证,ABTest都做完,其实是最好的状况。在这种情况下,通常Python就不太够了,需要使用C++或者Java等其他编程语言。因此,熟练使用多种编程语言也是一个算法工程师的能力。

在互联网公司里面笔者用过的机器学习工具大概有这几个:

勇于接受新的挑战。公司里面除了已有的项目之外,通常来说都会开启各种各样的新项目,在这种情况下,如果有机会做新的项目,也就是别人没有做过的项目。这种机会已经要把握住,因为对于新人来说,能够接触全新的项目肯定是好过维护已有的项目的。但是几乎所有的人都是从维护旧的项目开始的,只有旧的项目做好了,才有机会拿到新的项目。

不要永远抱着已有的方向不放手。在公司里面,业务方向总会或多或少的发生变化,随着部门的调整,方向的变化,所做的内容总会发生一些变化。在工作的时候,最好不要抱着我就是来做这个方向的,除了这个方向之外其他的内容我一概不想做。因为当时的工作岗位未必能够提供你想做的方向,但是说不定能够提供其他的研究方向。有的时候,在公司里面,根据方向的变化来调整自己的工作内容也是一个必要的技能。而且,在公司的时候,一定要多做一些有挑战的项目,只有通过这些项目,才能够让自己的技术壁垒更加深厚。当然,在求职的时候,每个人都有着自己的想法和选择,所以,在求职的时候,是可以选择一个自己喜欢的方向来做的。

通常来说,在干了两三年算法工程师之后:(以下是从其他地方看到的小段子,出处忘记了~~~)

如果要具体统计每类工作的占比,大概这样划分:

文档占比15%。记录工作是一方面,有时要进行向上汇报,主要是写一些文档和PPT,是考验画图能力的时刻。进了大公司之后,尤其觉得自己的画图能力有所提升,尤其是模型图,要多fancy有多fancy,以至于每次自己看到都不由得发出赞美。

THE END
1.终于有大牛把《数据结构与算法》讲透了,附源码笔记这份PDF阅读体验肯定是要比公众号和各大的博客平台的文章要好的。PDF内容为纯手打! 话不多说,先看目录 需要完整版笔记的老铁点此获取 下面简单介绍一下八大基础排序和基础的数据结构,每种排序的思想和基础的讲解和源码在PDF里边有。 数据结构与算法学习文档及笔记 https://zhuanlan.zhihu.com/p/567419989
2.数据结构和算法一定要背算法的代码嘛但是如果一个人自己跑几个模型例子就声称自己可以做算法并且十分反感写代码的话,那他在算法领域也不会有很好的发展。 除非,你是一个算法造诣非常高的天才并且能够胜任算法科学家的人。 否则,请不要欺骗自己,认真培养你的算法能力和工程能力,毕竟你的目标还是一个合格的算法工程师。 https://blog.csdn.net/weixin_39967405/article/details/111279063
3.算法一定要用计算机程序实现吗?程序必须用规定的程序设计语言来写,而算法很随意。一个算法可以用不同的编程语言编写出不同的程序。程序并不都满足算法所要求的特征,例如操作系统,是一个在无限循环中执行的程序,因而不是一个算法。程序=数据结构+算法。数据结构与算法要通过程序的实现,才能由计算机系统来执行。所以,并不是所有的https://zhidao.baidu.com/question/2149819650965762628.html
4.30了,程序员中的老司机们,30后的路该开向哪里?擅长什么,不要放弃。擅长工程,就不要眼红人家搞算法的。坚持到底,路才能更宽,走得更远。 左:打工赚钱? 右:创业冒险? 当技术积累到一定程度的时候,大部分人都会技痒难耐,考虑创业。原因有几个: 给别人写代码,期权从几千股到几万股, 比例从毫不知情到万分之几、千分之几就不错了。自我感觉很好,但并不是https://36kr.com/p/1721857474561
5.GitHubCoding4Real/leetcodePDF版本:「代码随想录」算法精讲 PDF 版本。 最强八股文::代码随想录知识星球精华PDF 刷题顺序: README已经将刷题顺序排好了,按照顺序一道一道刷就可以。 学习社区: 一起学习打卡/面试技巧/如何选择offer/大厂内推/职场规则/简历修改/技术分享/程序人生。欢迎加入「代码随想录」知识星球。 https://github.com/Coding4Real/leetcode-master
6.探秘写了一百万行代码是什么体验?腾讯云开发者社区探秘| 写了一百万行代码是什么体验? 搞程序的累计写到一百万行代码到底是什么体验呢? 如果一百万是标量的话,来和大家研究一下这个数据,假设最好的情况,一天100行高质量代码,一年36500,100/3.65=27年多。即便从20岁开始编码,要到50岁左右方可完成。但实际上关于平均代码量的问题,即便把所有工作日都算上,大概也https://cloud.tencent.com/developer/article/1085550
7.编程中,有哪些好的习惯从一开始就值得坚持?只有先做到这一点,你才能把代码写简单,才能让人一眼看出意图、明显没有缺陷。 把很简单的程序搞复杂、搞的没人能懂,这很简单——不妨搜一下“C 语言混乱代码大赛”。 但把很复杂的功能写简单、写的让人一眼看懂、而且很确定“这里明显没有错误”,反而需要极深的功底。 https://maimai.cn/article/detail?fid=1704779105&efid=OhUNp8oeLY-b-crWXJxV2w
8.从事程序员14年,我总结了8条宝贵的编程实战经验优设网快速获得精准反馈:开发者每次调整代码后,能通过自动化测试快速获得结果反馈; 零成本试错:写出的代码语法有错误、逻辑有问题,没有任何不良后果,心理负担小。 不过,屏幕前的你很可能觉得我在说些废话。 “不然呢?解算法题、写小脚本,不就是这样的体验吗?有啥特别值得说的?”你很可能会继续补充道,“你知道我们公司https://www.uisdc.com/8-programming-experience
9.求职求助面试java岗用c++写代码可以吗本人一直是用c++写算法题的,但之后找工作估计是java后端,所以突然想到了这个问题o(╥﹏╥)o0 收藏分享 回复讨论接收动态 共4 个回复最热小约翰可汗 来自湖北 2024-04-15 可以但没必要,建议不要这样,可能面试官当场不介意你这么搞,能做出算法题特别是高难度一些的就证明你很优秀。但是吧面试官可能会觉得你Java基础https://leetcode.cn/circle/discuss/4L2prB/
10.代码规范指南java,代码规范说明(8).不允许把多个短语句写在一行中,即一行只写一条语句。 (9).函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。 注:如果大家有兴趣可以到安安DIY创作室博客,有相关说明性的文章和解释。 2、注解 Java 的语法与 C++ 及为相似,那么,你知道 Java 的注释有几种吗?是两种? http://www.cxhlcq.com/article/heoges.html
11.php学习心得范文(通用14篇)搞清楚HTML和PHP的概念,那么PHP和HTML混合编程应该不成问题,在这期间,你完全可以让PHP给你算算 一加一等于几,然后在浏览器输出,不要觉得幼稚,这的确是跟阿波罗登月一样,你打的是一小段代码,但是对于你的编程之路,可是迈出了一大步啊!兴奋吧?但是不得不再给你泼点冷水,您还是菜鸟一个。 https://www.yjbys.com/edu/PHP/471525.html
12.入行14年,我还是觉得编程很难:给大项目写代码没意思还危险1写代码很简单,但写好代码很难 编程曾经是一项门槛很高的专业技能。从前,一个普通人想学编程,最常见的做法就是通过教材和书本学习。不过大部分编程专业书,十分艰深晦涩,对于初学者来说很不友好。因此不少人在尝到编程的乐趣前,就早早地半途而废。 但如今,学编程正在https://www.elecfans.com/d/2016881.html
13.多吹牛,少写代码–四火的唠叨可是,这真的 “正确” 吗? 来看看所谓的软件工程师的基础素质里面,写代码占了多大的比重?沟通、合作、学习,问题分析、解决,系统设计、算法,代码实现、测试、ops……到底有多少部分是 “写代码” 的? 如果我们把写代码看做软件的具体实现,那么,为了能写代码,有很多工作要做;而在写代码之后,也有很多工作要做。https://www.raychase.net/6634/
14.几个对程序员的误解,害人不浅!51CTO博客进了公司后我才发现,真正写代码的时间很少,像前期的需求评审、跟产品 Battle 啊、方案设计、技术选型啊、沟通、资源协调更重要,也往往更花时间。在你想清楚要不要写代码、怎么写代码后,再去写代码,那时你会发现只不过是一种翻译工具而已。 而且就我观察下来,一般职级越高、工资越高、能力越强的人,写的代码反而https://blog.51cto.com/u_13626762/5377111
15.学图论,你真的了解最短路吗?这就好比是走迷宫,你沿着一条路要一直走,直到遇到死胡同才返回 通常采用邻接矩阵存储,有权无权都可以处理,可以处理负边权,但不能处理负环 简单来说就是从一个点出发,递归+回溯遍历每一条与它相连的边,到达每个点,更新最短路 虽然代码很好写,但是极容易超时,请谨慎食用此算法 https://www.luogu.com.cn/blog/FrozaFerrari/xue-tu-lun-ni-zhen-di-liao-xie-zui-duan-lu-ma-post