查看原文
其他

心法利器[30] | 算法新人如何在工作中成长

机智的叉烧 CS的陋室 2022-08-24

心法利器


本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有


往期回顾


毕业季结束,光荣毕业的各位要开始走向社会成为一名打工人了,作为校招中的卷王,如何让自己的光环在工作中持续保持自己的优势,持续学习成长,逐步成为一个完全体技术大牛?我虽不是大牛,但几年的学习成长沉淀下来,也有一些自己的心得,和大家分享一下。

懒人目录:

  • 快速融入
  • 明确自己的发展方向和所需技能点
  • 广度和深度的权衡
  • 不要脱离数据
  • 应对焦虑
  • 工作和生活
  • NLP方向的成长
  • 推荐系统的成长

快速融入

开始我想叫熟悉,但是想了想换了一个词,融入,这个可能更好。到了一个新的团队,无论是出于完成工作还是出于个人成长,我们都需要快速融入团队,那么我们需要做些什么呢。

首先是人,很多大佬都喜欢带着新人现在工位上走一遍,带你了解团队,XXX负责什么,同时也让你自我介绍,这是融入团队的第一步,了解团队的内部组成和人员关系,这是后续和他人合作的第一步。

然后是目前工作的现状,整个团队做的主要是什么工作,基本架构什么样的,你所在的小组目前的工作负责什么,在整个架构内的什么位置,现状是什么样的,整体方案是什么,用了哪些方法,后续的规划又是什么,会做哪些事,这些事怎么推进。

再然后就是对你自己未来要做的事情有足够的了解,要做什么,结合你的认知以及先有的现状这件事可以怎么做,预计需要什么资源(时间、人、机器等)。

明确自己的发展方向和所需技能点

对于新人,前3年是基础知识和技能的了解和吸收,如果工作合适,那需要做的就是快速了解你所在的领域,然后逐步深入学习。

有所深入,例如我做NLP,尤其是NLU这块,那文本分类、NER、语义相似度之类的常见方法和前沿技术肯定都要了解,丰富自己的武器库,在解决各种问题的时候有足够高的效率,同时对对应任务的数据、常出现的问题要有比较深入的了解,自己一直保持一个习惯,就是每天都要看一些case,专题各有不同,在线的随机query、目前方案做不到的bad case、专题某个领域的专题样本等,所谓的经验其实就是见过一些问题,可以预判会出哪些问题然后知道怎么去解决。

有些广度,了解一些和自己所熟悉的方向接近的事情,甚至还有些深入。例如即使做的是NLP,因为自己做的搜索所以还是要对排序有些了解,如果自己做的对话,那对对话管理一套还是要了解的,技术上,则一些通用的存储和检索工具,如mysql、redis等,甚至到hive、spark一系列的技术,这里就不是局限在“学python还是学c++”的问题了,有时间、有需要随学随用,重要的是不给自己设限,不要认为这是XXX的工作所以我可以不了解,这就限制了自己了。

换个推荐系统的例子吧,大部分学生工作前和工作后的对“推荐系统”的理解差距会非常大,进去前各种模型表征用户行为特性,公平性问题等,但是实际上到了工作中就是“sql boy”,这点NLP也有类似的但是推荐系统尤为明显,主要原因是学校和工程差距大吧,但这是固有的问题,明确回来后就要去开始熟悉和成长,各种数据涉及到的技术要快速掌握,甚至可以专题学习,spark、hadoop等,至于推荐系统需要的技术,现有的项目几乎都有,随便那一段就能学,多和负责这一模块的大佬交流,自然就有了成长,我们应该逐步明白推荐系统不只是有排序,还有试探,还有冷启动,还有物料和用户画像的维护等。

广度和深度的权衡

深度让自己能更好的解决一个问题,而广度让自己能解决更多问题。

越是大,流程完整,团队完善的部门,分工会越细致,这几乎是必然的,而我们很可能就是完成一个很细小的部分,同样正常,而从成长的角度,对于一个萌新来说,深度的优先级会高于广度,毕竟交到你手上的就是一个基本、明确的小活,要做好必然要求足够的深度和对问题理解,而长期,要晋升、要成长,局限在深度上就会让你变成一名“熟练工”,缺少整个工程管理、项目管理的“大局观”,此时需要的就是广度了,多了解和自己相关的,不设限,才能逐步拓展自己的视野,让自己能做更多事,能掌控更多事。

不能脱离数据

看数据是一个意识,能有这个意识就已经是新的蜕变,毕竟数据是算法的根本:

  • 他是我们深入了解现状的重要窗口。
  • 模型训练的根本,质量和数量直接影响了效果。

因此不要抗拒看数据,有的时候简单分析100条就几分钟就完事了,没有很多时间也没有很枯燥,还能去发现一些之前没想到的有意思的情况(你能想到,语义相似度的数据里居然有这样的pair吗:你好吗-how are you),有足够的数据理解,对于科研是思路的启发,对工作落地那就是技术方案设计的依据了。

但是,真正难的其实应该是分析的思路和角度。同样的实地考察不同人会有不同的结论从而采取了不同的解决方案,很想展开聊,然而可能因为我段位不够,而且问题多种多样,我暂时还没有总结出比较完整的分析方法论,还需要持续修炼吧。

应对焦虑

面对全新的环境,已经成熟的大佬,大厂完整的框架,哪怕是同期也有大量的大佬存在,各种媒体还在疯狂地贩卖焦虑,甚至开始有了生活的压力,难免觉得自己在蚍蜉撼树,感到弱小无助,正常,非常正常。

遇到问题就解决问题,核心在于找到问题的根本,如果真的是水平不足那就去学,了解自己该学什么然后就去学,我们需要解决的不是焦虑,而是产生焦虑的那个问题,所谓“釜底抽薪”就是这个意思,找到问题的根本。

焦虑有的时候来源的反而不是事情难,而是问题在眼前却没有解决思路,或者思路混乱,因此我们要做的是什么都别做了,冷静下来,列举自己要做的事,排好优先级,明确方案和计划,然后逐步实施,人的精力有限不能同时完成很多事,因此我们列举清楚按部就班,就会轻松很多,原来高考有老师给我们安排,现在的工作那就自己安排。

而对于解决不了的问题,找PlanB,再不行就降低要求,干不到没办法,那就排解。

工作与生活

现在我们这代,我真是没看到过几个能持续每天都准点下班的,哪怕是很多人开始心心念念的公务员、老师。“work life balance”应该是一个大家梦寐以求的东西了。

不太想展开,每个人都有自己过的方式,我只给几个建议吧:

培养至少一个爱好,甚至是嗜好。至少我觉得这是一个让我自己还是一个自然人的标志吧。我自己喜欢打游戏(从怪物猎人太弓锤十多年老粉,海拉鲁大陆无业游民,极地大乱斗职业泉水指挥官)、乐高、写文章。你也可以找到自己的喜好,敦促自己回归生活,享受生活,终点的风景很美,但是沿途的风景也很美。(趁着还没有吞金兽尽情快活)

关心身边的人,父母亲戚、伴侣、朋友,定时沟通,保持交流。

至于工作,我自己是一个弹性比较大的人吧,工作真的来我能拼,干完方休,工作空下来也会抽空早点走(当然6点半是真的少额),很多人聊到OPPO是不是加班很多,至少我的部门并不会(来投简历试试?),多少有些幸运吧,自己其实挺享受这个节奏。

NLP方向的成长

感觉可能会有人会要到这个东西,简单给大家列举一下新人可以了解和学习的一些建议吧。

  • 了解1-2个基本任务,知道他的多种方案并且能明确分析他们的区别和应用场景。
  • 会解决问题,能分析出一个目前效果不佳的原因并进行优化(绝对不是调参换模型那么简单!)
  • 性能意识,知道自己用的方法性能是什么样的,是否符合需求。
  • 会基本的数据处理和挖掘,至少能把想法翻译为代码。
  • 大规模预训练语言模型只有很少一部分项目会用到,当然越成熟大团队越可能使用。

工程上:

  • 代码是要会写的,不要问是java、c++还是python,这里需要的不仅是会代码本身,需要的是快速掌握和现炒现卖的能力。(当然系统学习是可以在业余时间补充)
    • 基本的代码会写。
    • 编译、打包、部署。
  • 基本的数据库要懂,mysql、hive、redis等,原理倒是不优先,重要的是会用,会存会取。
  • 计算机网络和数据结构与算法,没学过的最好补一下,有个基本的认识。

推荐系统的成长

推荐系统也顺带简单聊一下。

  • 推荐系统是系统工程,不是只有一两个部分就能完成任务的,能尽快了解所在产品的全貌就尽可能快速了解。
  • 多看数据,多看内部已有的策略。
  • 了解1-2个模型任务的特征、离线训练数据构造、训练过程、在线使用的全流程,确保自己能学会。
  • AB实验的指标设计、计划安排。

工程上:

  • 推荐系统大都用java,和上面一样做,没什么好说的。
  • 推荐系统非常依赖数据,因此sql一定一定要熟练掌握,另外spark、hadoop也要懂。
  • 计算机网络和数据结构与算法,没学过的最好补一下,有个基本的认识。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存