毕业3年的算法工程师技术成长思考

适应阶段

回顾这个阶段,自己是纯纯的萌新,整个这个阶段,个人感觉关键词是:适应。

从学生时代出来,尤其是研究生出来,包括自己带内,绝大多数的视角都是从最前沿的科研技术视角来看现实问题的,不代表这个视角不对,但是确实并不完全适合大部分现实的技术问题。以当下NLP的科研场景和现实对比,预训练模型在科研界是绝对的主流,使用起来相比一些小模型方案确实有很大的优势,泛化能力也很强,但问题是现实场景不止看效果,还需要看成本,看其他方面的性能,而且现实场景的数据也不见得能完全发挥预训练模型的优势,不是什么时候用预训练模型都会很适合。

除了技术方面,还有日常的工作方面的适应。在大部分厂里,基本都是团队合作,不论分工,我们这些萌新大都只用完成一个小部分,但是我们并不能只聚焦于自己的部分,要逐步培养完整的上下游甚至全局视角,了解整个系统的运作,这样才能更好地完成自己的工作。

能力逐步完善

在逐步适应以后,自己是经历了一段能力完善的时间。在学校里,大都没有机会接触一些和工程开发相关的技术,只是关心自己的一个比较小的研究点,而对更广泛的技术没有太多研究,但是在工作中,只聚焦一个小点其实会挺局限的。

在算法领域上,广度上,即使是工作中不见得都要做,但是对各个NLP领域常见的任务和技术点,都多少要熟悉,而对于在可见的未来需要用到的技术,可以逐步开始往前走,例如未来要做语义相似度,那就可以提前开始学习准备,哪怕只是稍微地走在前面,都对自己未来的工作计划有一些可见的认识,挺好的。

算法除了广度还要有深度,也就是有自己擅长的一两个领域。是否擅长,其实主要就体现在自己对问题的理解的深入情况和处理方式的多样性。前者,能尽可能多探索这个领域内常见的问题,并了解一些解决方案,后者,则是自己的招数了,针对前面了解的问题,有尽可能多的方案来解决,说白了就是自己能打的“牌”,而且还要是多样的,别一天天的只会调参、换模型,真就不行,这需要我们长期多看看数据,了解数据和问题才能培养起来,当然,比较高的境界是能兵来将挡水来土掩,能应对和解决这些问题。

在技术领域,作为算法工程师,很难避免要做很多工程方面的工作,从一些小的数据开发,到各种技术工程的中间件,多少都熟悉一些,会有不少的好处,一方面是当需要依赖别人的时候,自己可以多少做点,另一方面,在和其他职能同事的沟通会更方便,毕竟信息和视角会尽可能对等。有关这块,可能很多小伙伴不太熟悉,这里简单列举一下常用的技术点吧。

  • 语言上,除了python必修,入职后根据工程那边的技术栈来补齐吧,例如c++,java,go之类的。

  • 算法方案和模型的包装,了解一下基本的网络链接方案,http为代表的,tornado、flask之类的,高级一些的了解一下gunicorn,rpc类的提一下grpc,剩下有些算法编译相关的,tvm、onnx之类的,按需学习吧。

  • 各种数据相关的中间件和工具。大数据礼包,hadoop、spark等,另外一些数据库类的,例如mysql、redis等,涉及检索的,了解下ES(elasticsearch)这些都只是基操吧。

一般而言,入职后1-2年就已经能把上面这些基本都学习会,学的快慢主要取决于两点,一点是工作方面接触的广度,另一方面是自己主动学习的程度吧,前者是外因,可能会因为工作限制视野,但一旦发现,要及时不足,而后者就真的是自己的原因了。

完善后的技术成长

一般而言,1-2年,或者到3年吧,其实自己的技术体系就会形成,此时要进一步提升,其实是存在瓶颈的,这个瓶颈好像是只通过学习,甚至天天看论文,好像都不会有很大提升,之前看论文那种豁然开朗的感觉少了,这块我是花了不少时间思考的,然后有一些心得吧。

首先先聊这个阶段容易出现的问题,如果遇到下面这些问题,说明陷入了和我类似的情况吧:

  • 看各种书籍、论文就感觉,是能了解一些思路和背景,但是自己的收获没有原来大了。

  • 技术上很多东西,都感觉比较明确,按部就班去做即可,但是感觉又缺少质变和新的增长点。

此时,我的几个成长方向是这样的,我会分点讲。

  • 学习自己上级和前辈,看他们的日常工作和思维方式。

  • 视角放大,从自己相关的模块,到其他的模块,再到整个系统,并且探索每个设计背后的思路和权衡。

  • 在前沿技术下,看是否能再多踏出一步。

首先,学习自己的前辈。这个思路其实挺好理解的,因为自己未来的前进基本是跟随他们的路线,所以如果提前学习和具备他们的能力是有利于自己晋升的,当然自己的目标不见得只为了晋升,但是这种就是个方向,能借助他们看到一些自己未来还需要但是目前不具备的能力。

其次,踏出自己的边界,例如自己做文本分类的,可以去了解一下做实体识别方面的技术,或者是去看看做预训练的同事的日常工作和技术栈等等,甚至深入研究或者尝试,这其实就是一个踏出舒适区的操作吧。另一方面,还是往上走,了解自己所在系统的架构,甚至是更多项目的架构,了解一些架构设计,包括用了什么、设计内容以及这么设计的思路权衡吧,我的很多前沿重器文章里对一些企业级项目的讨论里多少都有谈到这个(前沿重器[1] | 微软小冰-多轮和情感机器人的先行者前沿重器[4] | 腾讯搜索的Quer理解如何直击心灵),这些其实都是技术设计方面的思路,但凡要晋升,总要有能独挡一面甚至负责项目的时候,这些能力其实在学习这个的时候就在培养了。

第三是在前沿技术基础上多踏出一步,当然这里是有前提得,就是你现在的技术已经跟上前沿,例如某个领域,已经了解并且尝试过一些前沿的技术了,然而,你能在这个时候发现一些问题并且能尝试解决,其实你就已经能在前沿多走一步,这些问题包括但不限于总体效果上的、特定问题的处理、性能和工程落地的优化等,其实都是有用的,这些也是技术成长的一部分吧。

但回到最初的出发点,技术成长,这个其实仍旧不能离开对技术发展的跟进,对算法而言,其实就是论文,还有与算法配套的整个技术栈了,这些东西还是要跟进的,否则自己闭门造车,很多时候的判断会受到很多影响。

小结

时间是真的过得快,我已经不太再用一个新手来包装自己了,有一定的技术压力的,不进步不深入很难被新人超越,要保持自己的领先,形成所谓的壁垒,除了学习本身之外,还有就是自己的成长路线的设计吧,这个同样需要时间来探索的,毕竟“做正确的事”比“正确的做事”还是要重要的。

我自己的话,实在按照上面的路去践行的,后面可能有一些新的思路,会和大家分享吧,大家共同进步。

推荐阅读:

我的2022届互联网校招分享

我的2021总结

浅谈算法岗和开发岗的区别

互联网校招研发薪资汇总
2022届互联网求职现状,金9银10快变成铜9铁10!!

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)
发送【1222】获取一份不错的leetcode刷题笔记

发送【AI四大名著】获取四本经典AI电子书

猜你喜欢

转载自blog.csdn.net/qq_33431368/article/details/127045954