适逢程序员佳节,来聊聊自己从无到有成为程序员的历程以及自己的经验吧。
懒人目录:
高考结束,确认自己大学最想学有两个,当医生和学计算机,虽然最后阴差阳错地到了数学专业,但考虑到自己的喜好,仍然在考虑往计算机上走,最直接的方式就是拿了计算机专业的培养计划,加上自己的计划开始写起代码,大一过了计算机等级考试二级(说起来你们可能不信,VB),除了课程要求的c#、c++、matlab和mathematica,还整了点java,加入了一位老师的项目组,开始了第一个项目。
有意思的是因为项目组的需求我还写过爬虫和前端,前端整过jade/less体系,也玩过现在可能还在用的react/redux体系,搭配的是antd UI库,至于爬虫就是最经典的request或者是urllib,后续还玩过类似线程池的操作。
虽然有着对计算机的热爱(可能这就是一种浪漫吧),但是也不想自己的数学白学了,所以一直在探索计算机和数学结合的道路,当时有几个备选项,运筹、数值计算,然而有意思的是,16还是17年,发现了机器学习的机会,于是学习了当时最新潮的《统计学习方法》,也翻阅了可能被聊到更多西瓜书,结合同一位老师的方向,最后选择了统计。
后续就是学术和技术两条腿走的过程了,还接触了NLP这个东西,结合机器学习本身依赖的场景,把NLP当做自己研究生期间的主修技能,当然,时间序列、最优化方法也是自己的研究方向,所以自己这块还不错吧,于是就走上了算法这条路。
在这也借此机会感谢我的这位老师,还有几位带我入门的学长学姐,还有工作(含实习)过程中的领导、导师和同事。
首先来聊聊入门,写代码入门在包括我在内的很多人看来是一个非常痛苦的过程,甚至和第一次接触数分(大部分人应该是高数)其实是类似的,我归结的原因是这个东西和我们习惯的思维是不一样的,我们可能很容易就能想到、能理解、很显然的东西,却偏偏还要从中挖掘出新的东西来,例如一些重复工作我们照着做就行,却需要抽象为一个循环,这肯定是非常困难的。
第一门语言,还是非常建议系统地学一遍,完整地理解下面几个对新手来说比较陌生的概念,其实但凡是教程,这些东西真的都会有提到:
完整地学完这些,其实你会对整个计算机语言体系有非常完整的认识。那么学习过程中,还有几个建议吧。
另一方面,有关算法方面的入门,虽然技术迭代更新地很快,当时word2vector都是一个非常新潮的东西,现在bert都烂大街了,但是时至今日,我仍然建议大家从简单的开始学起来,机器学习基础(仍然推荐统计学习方法)和基本的深度学习几块积木(Dense、CNN、RNN等等),nlp领域则基本的word2vector、fasttext之类的还是都要了解,推荐系统则还是要了解协同过滤等一系列的操作,现在绝大部分的工业界场景还轮不到这些学术界的飞机大炮派上用场,最基本的其实就足够了,或者说大部分场景其实并不能充分发挥学术界飞机大炮的优势,例如如果这个分类问题可能并不需要注意力机制,则加了注意力其实意义不大。
其实熟练了以后,后续的学习推进起来并不会很难,毕竟自己有了一定程度的学习能力,这点能力将会在自己的职业发展起到非常重要的作用。
自己如愿以偿地走上自己计算机和数学结合的道路——算法工程师。之前其实聊过自己一年的工作经验:ML&DEV[8] | 算法在岗一年的经验总结。这里着重聊聊自己怎么提升,这也是自己尝试突破几次瓶颈的收获吧。
算法方面的修炼,我的理解往往在于两点——深度和广度。
总结起来就是两点:
算法工程师首先是一个工程师然后才是算法,所以技术是算法的立命之本,有各种厉害的算法不会落地,就和有脑子没手一样,不能产出了。那么技术线的修炼有哪些:
说实话,上面说的很多,其实上面我能想到这么多,个人认为最重要的一个点就是——主动。主动沟通获得学习进步的机会,主动总结找到自己的问题所在,主动学习自己的不足,主动为自己的学习和进步进行规划。很多时候,主动能为自己获取更多主动权,而不要把主导权交给别人,其实不主动拿主动权就是再把这个东西交给别人了。换个角度反思下,自己是不是在嗷嗷待哺等导师给你方向给你论文,自己是不是在等着有人告诉你该学什么,自己是不是在等着老大给你活干。
就聊到这吧,大家共勉。
下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套! 后台回复【五件套】
下载二:南大模式识别PPT 后台回复【南大模式识别】
推荐两个专辑给大家: 专辑 | 李宏毅人类语言处理2020笔记 专辑 | NLP论文解读 专辑 | 情感分析
整理不易,还望给个在看!