天天看点

ML&DEV[18] | 入职一周年:夯实基础,持续深入

【ML&DEV】

ML表示机器学习,DEV表示开发,本专栏旨在为大家分享作为算法工程师的工作,机器学习生态下的有关模型方法和技术,从数据生产到模型部署维护监控全流程,预备知识、理论、技术、经验等都会涉及,敬请期待!

往期回顾:

  • ML&DEV[13] | 快速从无到有建模完成思路
  • ML&DEV[14] | 浅谈解决问题的能力
  • ML&DEV[15] | pyspark杂记
  • ML&DEV[16] | 算法工程师内功修炼
  • ML&DEV[17] | 算法工程师的技术深度

入职一周年,也是自己全职进入职场的第一年。庆祝一下哈哈。

其实之前我是聊过一次来着,职场一周年哈哈:ML&DEV[8] | 算法在岗一年的经验总结。之前那篇主要篇算法的理解吧,这篇讲讲自己工作上的思考和感受。

这篇文章主要是聊聊我的感受和思考的,技术的东西聊的不多,而更多是聊一些自己的思路和成长吧,当然看着可能像是我自己在说教,就当我做一个总结和思考吧。

懒人目录:

  • 职场人:
    • 主动性。
    • 做正确的事与结果导向。
    • 追求极致。
    • 沟通,沟通,沟通。
    • 时间管理。
  • 技术人:
    • 基础与深度。
    • 积累与沉淀。
    • 技巧和技术。
    • 工程和算法。
  • 人:
    • 工作与生活。
    • 娱乐。
    • 有关加班。
  • 未来计划
  • 几个提问和回答。

职场人

初入职场,还是要学会适应这个环境,在各位前辈的帮助下,我还是领悟到了很多东西。

主动性

主动应该是我自己本身的一个特点,自己也一直在尝试保持,需要沟通的主动沟通,需要做的事情要主动推进,在有余力的情况下能主动要活,这就是我理解的主动吧。这个主动其实也不见得是邀功、作秀,其实是为了处理事情采取的主动行动,需要谁支持提前说,需要做什么或者合作就积极去促成,这个说这有些玄学,但是其实挺有用的。

回头说说研究生阶段,这种主动能让自己收获很多,自己主动去了解自己需要的论文,自己看自己学,自己动手,而不是要等着别人来给你分配任务,而且你不和别人说你的情况,别人给你分配的任务能合理吗,所以尽可能让自己去把控这件事情,了解事情全貌,主动推进。

做正确的事与结果导向

这点最初在美团学到,后面在工作中逐步理解。做正确的事与之对应的是正确地做事。我们都在做事,但是我们需要保证的是目标是正确地,无论是讲做事的管理学,还是偏思考的哲学,还是各种实验科学等等,都讲求目标导向,需要确认目标然后再来制定方案解决问题,目标的正确性直接影响更加全局的结果,只要方向正确,快慢总会到重点。所以在做事情之前,要了解目的,确认目标正确,明确目标,这样做事才能看得到成果。

做正确的事告诉我们把目标确认好比做事本身要更加重要,而结果导向的是要求我们,在目标确认之后,所有行动要以订立的目标为中心,道理都懂,但是做起事情来很容易就忘记,代码写着写着不知道自己写的啥,片面的追求高端、前沿而忘了现在的目标是实现功能需求,论文看着看着不知道自己为什么看论文,只知道可能缓解一下焦虑,一句一句翻译最后什么信息都没有获取,非常可怕吧,我们要的是时刻记得自己的目标,不忘初心,其实就是这个意思。

追求极致

这个也是OPPO的价值观之一,不浅尝辄止,要把一件事情做得尽可能好,时间精力有余的时候多想想试试一件事情能不能做得更好,80%的F1能不能提升到82%、85%,10ms的性能能不能下降到5ms,做这些思考,一方面这件事你会做的越来越好,另一方面自己的水平也会在提升,多赢的结果一定会有,这个也呼应了我前面说的主动性,尝试主动地把这件事做的更好,那么你自己就会更好。

沟通,沟通,沟通

程序员是要写代码,但不代表就不用了动嘴,一个系统那么大肯定需要多端合作,还有产品,哪怕同职能也有同事,上下级等等,我们需要沟通,甚至是需要主动沟通,要大胆的动嘴,让他们了解你的情况,也要去了解他们的情况,某个功能好不好做,进度怎么样,借助这些信息能更好地安排自己的工作,也能让整个团队做事能合作的更加紧密。我自己的话,如果自己可控,还会安排特定时间专门拿来沟通,其他时间就能更好地专注于其他事情。

时间管理

额我不是时间管理大师,但是终究要了解一些时间管理。我开始思考时间管理的初衷是因为写代码涉及算法之类的工作需要独立深度的思考,因此需要一大块独立思考的时间,所以要安排各种工作能让自己有这么一块时间,什么时候开会,什么时候写代码,什么时候写PPT(23333),还要腾点时间看看论文之类的。

一般,我是会有自己的周报和每天的计划与总结,是写给自己看的,下周该做什么,然后拆解每天该做什么,然后一步一步执行就行,非常有计划地按部就班的,人也不慌,做起来也得心应手。

技术人

虽然工作中很多时候要处理事务上的东西,但是时刻不能忘记自己是一个技术人员,本职工作还是解决技术上的问题,写代码也好,算法实验也好,这目前还是我们的本职工作,也是我们赖以生存的核心竞争力,我们要守好我们自己建立起来的壁垒。

基础和深度

作为一名校招生,我们可能有比较好的校园知识,进来以后要开始深耕自己的技能树了。基础上,业务很忙,不要停留在调包,多看源码,掌握你所在做领域的各种基本操作,从初版到中期迭代带最终版本,都要熟悉。深度上除了基操,多看论文,跟着前沿走,同时尝试把这些方法落地,至少自己弄个toy data玩一玩,加深了解。

总之,持续提升自己的核心技术,这个非常重要。

技术沉淀

做过的事要复盘,写过的代码要整理,做一件事的时候多想想这些东西能不能被抽象城经验,成为通用的东西,这就是沉淀,这些就是自己的独门秘籍,某个人物做完以后,自己整理代码形成自己的pipline,同时知道一些trick能让自己做这件事更加熟练,自己在内部吹的一个事情是对于特定问题,经过优化,开发一个能上线的模型,时间从一个月下降到了一周,这个效率杠杠的,真的有啥实质上很高端的东西吗,没有,就是自己设计整理优化了。

技巧和技术

这是我近期感受最深的一个,也是我近期想的最多,近期其实写了一些有关技术深度的文章,来源于一些前辈对我的建议吧。首先什么是深度,深度来源于对一个问题具有比较深入的理解,知道这个问题的全貌,可能有那些坑,怎么解决。然后聊技巧,技巧是一些平时我们使用的小trick,小trick本身其实不能代表什么深度,只是解决问题的技巧而已,而技术,更多的是扎实的技术,稳定、高效、精准解决问题,trick可以有,但是只有trick就不行。

  • ML&DEV[16] | 算法工程师内功修炼
  • ML&DEV[17] | 算法工程师的技术深度

工程与算法

从刚开始当算法工程师起,我就发现,算法工程师,首先是工程师,然后才是算法,需要有基本的工程素养,不仅是代码要会写,还要知道复杂度,知道怎么高效处理数据,怎么评估性能,这些都是非常重要,只有会这些,我们设计的算法才有用武之地。总之,我们在专注于算法的提升的同时,需要注意我们的工程不被拉下。

这章主要讲的是我自己怎么平衡自己的工作和生活的。

工作与生活

很多人可能会觉得我是对技术比较痴迷的,有一说一,是,当然我也会有一些自己的爱好,例如打打游戏、看看电影啥的,而有关算法这块,其实也是自己的爱好吧,所以自己觉得花时间在这里不算难受,按照自己的计划去看这些东西挺好的,其实这个就和钓鱼、打球之类的兴趣一样。但是,还是时刻要提醒自己记得休息,保养好身体,虽然我还是比较胖,但我其实还是有健身的哈哈哈。

娱乐

其实我心态在一些人看来可能挺幼稚的,我会喜欢乐高(最近入了一台塞纳),喜欢手办(最近入了个烧烧果实),英雄联盟、塞尔达之类的哈哈哈,另外我也健身,但是我自己其实不是很管得住嘴(不暴饮暴食但是也不强行管),所以还是比较胖的哈哈哈。

加班

em...,粤语有句俗语:吃得咸鱼抵得渴,这一行工资高是众所周知的,多干点总是合理的吧,当然给不够还干那是另一回事吧。另外,对于目前的我自己来说,但凡干活即是在成长,我还是挺愿意干的,所以继续整呗。

未来计划

标题就是自己未来进步方向,自己原本在“完成任务”这件事情上修炼了很多,而忘记了技术本身,这个多少还是有些问题,在完成任务的基础上要让自己的技术深度进一步提升,内化成自己的内容,这样自己才能走得更远,怎么做,肯定就是把自己的学习面聚焦一些,多了解多思考一个问题,这样深度慢慢就有了。

答疑时间

问我问题的人很多,我选一些来吧。

Q1:算法工程师一般一天的工作时长是什么样的,典型的996吗,加班情况咋样,有空健身吗,身体状况还行,除了工作还有空闲时间发展兴趣爱好吗。

A1:额,这么说网上传闻很多,但是不是所有的事都非黑即白的,不是所有人都996,至少我不是6,995吧。至于这个加班,现在概念模糊了,你说9点下班算加班那就算加班吧,不算那就不算吧。健身有,我一周两次,全在周末,身体挺好的(说得好像大家回家就9点睡觉,很健康似的?),兴趣爱好有啊,塞尔达一周有5个小时,另外我还有时间写文章,写一篇文章至少要3个小时吧,带着代码公式的那就5个小时起步了。

Q2:入职前建议。

A2:保证毕业,及时行乐,工作以后玩的机会就少了。能提前了解自己的岗位,那就提前学点东西吧。有兴趣可以参加一下比赛,或者自己找一个方向,开始多做一些尝试。

Q3:目前搞query parse,感觉就是nlp任务,目前都是机器学习,数据量也不是很庞大,别人天天聊一些spark,Scala什么的,我这边都还没用到,深度的方法更没有用到,风险太大。但是推荐都用上深度的方法了。所以,我想问刚入门搜索算法工程师,该有什么规划?需要掌握哪些技巧?是先沉淀一下去了解业务,还是更趋向于模型,甚至尝试把深度用到搜索领域中呢?

A3:首先,我说了多少次了T T,深度学习不是目标而是方法,解决一个问题有很多方法,不要为了深度学习而去用深度学习,这是指导思想的问题。

搜索里面,在query理解这块,绝大部分都是和NLP打交道的,这个没毛病,至于用机器学习这个问题额,有啥问题吗?会用的话挺好的啊,如果还有更好的方法欢迎提出,对效果有提升的欢迎去尝试,这个都还行,要是没有,那就老老实实用现有的方法,解决问题是第一要素,这个和科研是不一样的,科研要求标新立异,追求创新,但是工作,要求的是完成任务。

推荐之所以可直接使用深度,我的理解是对于“正确”这个事情的要求不是很高,推荐什么东西,怎么推荐,用户喜欢什么,是不完全确定的,用户自己都不知道,所以可以猜,用户的容忍度会比较高,差体验不会那么明显,但是搜索,用户是有强烈的搜索预期才会去搜索的,所以对准确性要求非常高,一旦出了无关的会非常恶心,这就导致了推荐那套不能完全照搬到搜索来,除非,你的深度学习做的非常非常非常好。

有关规划,一方面建议是了解整个搜索系统中涉及的算法问题,知道一些基本操作,另一方面,针对一两个小项进行深挖,例如意图(文本分类)、实体抽取(命名实体识别),了解他的基本操作,常用的优化提升方法(包括但不限于深度学习,我也希望能认真读我的文章的各位不要把优化都想成改进深度学习模型,手里只有深度学习一把武器)

spark、scala之类的,个人建议还是看看spark,大规模的数据挖掘和处理还是需要的,尽量不要等到要用再学。

搜索产品初期还是词典之类的为主。其实这个大部分系统和项目都是这样的,包括我们“熟知”的推荐,要深度学习,在推荐系统初期我们哪来的用户行为来做深度,自己仔细想想是不是。

Q4:每天就写写规则sql,没有模型,全是策略。还是比较老的,可能新人业务还没理解好也提不出好的想法。目前想的就是把手头上先完成。比较好奇的是平常用不上的算法自己平常也要多看论文积累么,是多从论文吸收一些idea么,[捂脸]感觉看论文原文比较少。叉烧哥这一年提升最快的是啥,是不是刚入职接触一些看似的坑也属实正常?hah 发现我也没具体的问题,就瞎问一下。

A4:先这么想,真给自己一个模型任务,自己能不能做好,不知道你是不是,但可以反思一下自己是不是眼高手低了,如果可以,可以主动和领导说,什么场景,什么问题,可以用什么方法解决,预期收益和风险是那些,如果能阐述清楚并说服你的领导,就是干。如果不行,就老老实实写sql、写规则,但不局限在这里,而应该主动,借助这些东西了解业务,了解现状,了解某些问题应该怎么解决,了解一个项目怎么上线。我们需要知道的一点是,哪怕一个项目组很大,很多人,但也没有那么多模型任务来做的,要优化整体系统的效果,有很多事情可以做,能发现到优化点,脑子里有方案就尽管去做,没必要看不起sql、规则之类的,任何模型其实都可以用简单的规则代替,但是不是所有的规则不是都可以用模型代替,(别泄露了自己只会模型不会别的的真相)。

另外,在做什么事和自己的成长学习不应该太过绑定,特定相关问题的方法、模型都要去了解,去尝试,平时要注意自己的学习提升。

ML&DEV[18] | 入职一周年:夯实基础,持续深入